<div class="twitter_box" style='width:150px; word-wrap: break-word;'> <?php $tweet_amount = 3; if (is_array($tweets)) { echo '<ul id="tweets">'; foreach ($tweets as $tweet) { if ($iterations < 4) { /** Echo Changed string **/ if ($iterations == 1) { echo '<li class="first">' . $tweet['text'] . '</li>'; } elseif ($iterations == 3) { echo '<li class="last">' . $tweet['text'] . '</li>'; } else { echo '<li>' . $tweet['text'] . '</li>'; } $iterations++; } } echo '</ul>'; } else { echo '<p>' . $tweets . '</p>'; } ?> </div> <?php $iterations = 1; $twitter = new Twitter(); $tweets = $twitter->getTweets('username', 'pass'); if (is_array($tweets)) { for ($i = 0; $i < count($tweets); $i++) { /** Put into a variable to make our coding lives a little easier **/ $tweet_text = $tweets[$i]['text']; /** Replace tiny and shortened URIs * * @ This replaces all the URIs in a tweet to correctly redirect */ $pattern = "/http:\/\/([a-zA-z0-9]+).([a-zA-z]+)\/([a-zA-z0-9]+)/"; $replacement = "<a href='http://$1.$2/$3'>http://$1.$2/$3</a>"; $tweet_text = preg_replace($pattern, $replacement, $tweet_text); /** Replace URIs in general * * @ This will replace all URIs in general */ $pattern = "/([http|https]+):\/\/([a-zA-z0-9.]+)([com|co.uk|biz]+)\/([a-zA-z0-9#=?._\-\/ ]+)/"; $replacement = "<a href='$1://$2$3/$4'>$1://$2$3/$4</a>"; $tweet_text = preg_replace($pattern, $replacement, $tweet_text); /** Replace #URIs * * @ This replaces all the hashed URIs to redirect to search pages */ $pattern = "/#([a-zA-Z0-9]+)/"; $replacement = '<a href="http://twitter.com/search?q=%23$1">#$1</a>'; $tweet_text = preg_replace($pattern, $replacement, $tweet_text); /** Replace Usernames * * @ This replace all the @username URIs to redirect to profiles on Twitter */ $pattern = "/@([a-zA-Z0-9_]+)/"; $replacement = "<a href='http://twitter.com/$1'>@$1</a>"; $tweet_text = preg_replace($pattern, $replacement, $tweet_text); $tweets[$i]['text'] = $tweet_text; } } else { /** Put into a variable to make our coding lives a little easier **/ $tweet_text = $tweets; /** Replace tiny and shortened URIs * * @ This replaces all the URIs in a tweet to correctly redirect */ $pattern = "/http:\/\/([a-zA-z0-9]+).([a-zA-z]+)\/([a-zA-z0-9]+)/"; $replacement = "<a href='http://$1.$2/$3'>http://$1.$2/$3</a>"; $tweet_text = preg_replace($pattern, $replacement, $tweet_text); /** Replace URIs in general * * @ This will replace all URIs in general */ $pattern = "/([http|https]+):\/\/([a-zA-z0-9.]+)([com|co.uk|biz]+)\/([a-zA-z0-9#=?._\-\/ ]+)/"; $replacement = "<a href='$1://$2$3/$4'>$1://$2$3/$4</a>"; $tweet_text = preg_replace($pattern, $replacement, $tweet_text); /** Replace #URIs * * @ This replaces all the hashed URIs to redirect to search pages */ $pattern = "/#([a-zA-Z0-9]+)/"; $replacement = '<a href="http://twitter.com/search?q=%23$1">#$1</a>'; $tweet_text = preg_replace($pattern, $replacement, $tweet_text); /** Replace Usernames * * @ This replace all the @username URIs to redirect to profiles on Twitter */ $pattern = "/@([a-zA-Z0-9_]+)/"; $replacement = "<a href='http://twitter.com/$1'>@$1</a>"; $tweet_text = preg_replace($pattern, $replacement, $tweet_text); $tweets = $tweet_text; } class Twitter { private $tweet_count = 10; private $twitter_api_url = 'http://api.twitter.com/1/statuses/user_timeline.xml?screen_name='; private $cache_folder = ""; private $cache_expiration = 3600; public function getTweets($twitter_username = false, $twitter_password = false) { if (!$twitter_username) { return 'Error, you have not provided a Twitter username'; } $this->cache_folder = $_SERVER['DOCUMENT_ROOT'] . "/ext_webservices/twitter/cache"; $cache_file = $this->cache_folder . '/' . $twitter_username . '.xml'; if ( !is_file($cache_file) || (date("U") - date("U", filemtime($cache_file))) > $this->cache_expiration ) { if (is_string($value = $this->storeCache($cache_file, $twitter_username, $twitter_password))) return $value; } return $this->readCache($cache_file); } private function readCache($cache_file = false, $tweets_array = false) { libxml_use_internal_errors(true); $cacheXML = simplexml_load_file($cache_file); if (is_object($cacheXML)) { foreach ($cacheXML->status as $status) { $tweets_array[] = array( 'created' => (string)$status->created_at, 'text' => (string)$status->text); } return (is_array($tweets_array)) ? array_slice($tweets_array, 0, $this->tweet_count) : 'There are no tweets available'; } else { return 'There was an unknown error please try again later'; } } private function storeCache($cache_file = false, $twitter_username = false, $twitter_password = false) { libxml_use_internal_errors(true); if (is_dir($this->cache_folder)) { if (is_writable($this->cache_folder)) { if ($twitter_password) { ini_set("default_socket_timeout", 1); $context = stream_context_create(array( 'http' => array( 'header' => "Authorization: Basic" . base64_encode("$twitter_username:$twitter_password"), 'timeout' => 5) )); if (@file_get_contents($this->twitter_api_url . $twitter_username, false, $context)) { $tweets = file_get_contents($this->twitter_api_url . $twitter_username, false, $context); $a = @simplexml_load_string($tweets); if ($a === FALSE) { } else { $cacheHandle = fopen($cache_file, 'w'); fwrite($cacheHandle, $tweets); fclose($cacheHandle); } } else { if (!file_exists($cache_file)) { $a = @simplexml_load_string($tweets); if ($a === FALSE) { } else { /** write an empty xml file **/ $tweets = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<statuses type=\"array\"/>"; $cacheHandle = fopen($cache_file, 'w'); fwrite($cacheHandle, $tweets); fclose($cacheHandle); } } else { touch($cache_file); } //return "Twitter seems to be having problems at the moment. Please standby"; } } else { $tweets = file_get_contents($this->twitter_api_url, $twitter_username); switch ($http_response_header[0]) { case 'HTTP/1.1 200 OK': $a = @simplexml_load_string($tweets); if ($a === FALSE) { } else { $cacheHandle = fopen($cache_file, 'w'); fwrite($cacheHandle, $tweets); fclose($cacheHandle); } break; case 'HTTP/1.1 401 Unauthorized': return "Error, the Twitter password you have supplied is either invalid or missing"; break; case 'HTTP/1.1 404 Not Found': return "Error, the Twitter username you supplied has not been found"; break; default: return "Error, an error occured while communicating with Twitter, please try again later"; break; } return true; } } else { return 'Error, the folder you have specified is not writable'; } } else { return 'Error, the folder you have specified does not exist'; } } }