<?php function relativeTime($time) { $SECOND = 1; $MINUTE = 60 * $SECOND; $HOUR = 60 * $MINUTE; $DAY = 24 * $HOUR; $MONTH = 30 * DAY; $delta = time() - $time; // change time to match with twitter time if ($delta < 2 * $MINUTE) { return "1 minute ago"; } if ($delta < 45 * $MINUTE) { return floor($delta / $MINUTE) . " minutes ago"; } if ($delta < 120 * $MINUTE) { return "about 1 hour ago"; } if ($delta < 24 * $HOUR) { return floor($delta / $HOUR) . " hours ago"; } if ($delta < 48 * $HOUR) { return "yesterday"; } if ($delta < 30 * $DAY) { return floor($delta / $DAY) . " days ago"; } if ($delta < 12 * $MONTH) { $months = floor($delta / $DAY / 30); return $months <= 1 ? "1 month ago" : $months . " months ago"; } else { $years = floor($delta / $DAY / 365); return $years <= 1 ? "1 year ago" : $years . " years ago"; } } function parse_cache_feed($usernames, $limit) { $username_for_feed = str_replace(" ", "+OR+from%3A", $usernames); $feed = "http://search.twitter.com/search.atom?q=from%3A". $username_for_feed."&rpp=".$limit; $usernames_for_file = str_replace(" ", "-", $usernames); // cache file directory $cache_file = TMP.'cache/views/'.$usernames_for_file.'-twitter'; if (file_exists($cache_file)) { $last = filemtime($cache_file); } $now = time(); $interval = 600; // ten minutes // check the cache file if ( !$last || (( $now - $last ) > $interval) ) { // cache file doesn't exist, or is old, so refresh it $cache_rss = file_get_contents($feed); if (!$cache_rss) { // we didn't get anything back from twitter echo "<!-- ERROR: Twitter feed was blank! Using cache file. -->"; } else { // we got good results from twitter echo "<!-- SUCCESS: Twitter feed used to update cache file -->"; $cache_static = fopen($cache_file, 'wb'); fwrite($cache_static, serialize($cache_rss)); fclose($cache_static); } // read from the cache file $rss = @unserialize(file_get_contents($cache_file)); } else { // cache file is fresh enough, so read from it echo "<!-- SUCCESS: Cache file was recent enough to read from -->"; $rss = @unserialize(file_get_contents($cache_file)); } // clean up and output the twitter feed $feed = str_replace("&", "&", $rss); $feed = str_replace("<", "<", $feed); $feed = str_replace(">", ">", $feed); $clean = explode("", $feed); $clean = str_replace(""", "'", $clean); $clean = str_replace("'", "'", $clean); $amount = count($clean) - 1; if ($amount) { // are there any tweets? for ($i = 1; $i <= $amount; $i++) { $entry_close = explode(" ", $clean[$i]); $clean_id_1 = explode("", $entry_close[0]); $clean_id = explode(" ", $clean_id_1[1]); $id = substr($clean_id[0], -17); $clean_content_1 = explode("", $entry_close[0]); $clean_content = explode(" ", $clean_content_1[1]); $clean_name_2 = explode("", $entry_close[0]); $clean_name_1 = explode("(", $clean_name_2[1]); $clean_name = explode(") ", $clean_name_1[1]); $clean_user = explode(" (", $clean_name_2[1]); $clean_lower_user = strtolower($clean_user[0]); $clean_uri_1 = explode("", $entry_close[0]); $clean_uri = explode(" ", $clean_uri_1[1]); $clean_time_1 = explode("", $entry_close[0]); $clean_time = explode(" ", $clean_time_1[1]); $unix_time = strtotime($clean_time[0]); $pretty_time = $this->relativeTime($unix_time); $val[$i] = array('content'=>$clean_content[0], 'date'=>$pretty_time, 'id'=>$id); } return $val; } else { // if there aren't any tweets return false; } } ?>
Relative Time Function
based on code from http://tinyurl.com/3cfdbrh
For use in the "Parse Twitter Feeds" code below
Parse Twitter Feeds
based on code from http://tinyurl.com/43yyzhm
and cache code from http://tinyurl.com/44kec57
and other cache code from http://tinyurl.com/re439b
Call pull feeds function: /controllers/feeds_controller.php
<?php
var $components = array('Twitter');
function get(){
$feed = $this->Twitter->parse_cache_feed('TWITTERNAME',10);
$this->set('feed', $feed);
}
?>
Auto-refresh function: /views/feeds/index.ctp
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"> </script> <script language="javascript"> $(document).ready(function (){ $("#twitter").load("/feeds/get"); var refreshId = setInterval(function() { $("#twitter").load('/feeds/get?randval='+ Math.random()); }, 300000); }); </script> <div id="twitter"></div>
Display Feeds: /views/feeds/get.ctp
<?php for($i=1; $i<=count($feed); $i++){ echo $feed[$i]['content'].' '; echo '<a href="http://twitter.com/TWITTERNAME/statuses/'.$feed[$i] ['id'].'">'.$feed[$i]['date'].'</a> · <a href="http://twitter.com /?status=@TWITTERNAME%20&in_reply_to_status_id='.$feed[$i]['id'].'& in_reply_to=TWITTERNAME" target="_blank">reply</a>'; } ?>
I'm still a beginner in PHP programming and my dream is to become an expert someday. I didn't know that Twitter can be modified through PHP though. Your tips are really helpful. I'm sure following them will help me achieve my dream faster. =)
ReplyDeleteLawrence Spring
This is an amazing blog,it gives very helpful messages to us.Besides that Wisen has established as Best Javascript Training in Chennai . or learn thru JavaScript Online Training India. Nowadays JavaScript has tons of job opportunities on various vertical industry
Delete@Lawrence
ReplyDeleteSoon you will be if you have passion on this.
Glad to hear that it helps. =)