Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

All other Modules /

Discuss all other Modules here.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba

Recent Tweets + Blog function - already working


Go to End
Reply


728 Views

Avatar
borriej

Community Member, 267 Posts

5 September 2012 at 9:05pm

If someone wants this code, or wants to build a nice module with it.. go ahead.
I wanted a function that shows the the most recent blog-entry's + latest tweets. Sort them on date and limit them to 5.

class Homepage_Controller extends Page_Controller {
		
	function twitterStatusUrlConverter($status,$targetBlank=true,$linkMaxLen=250){
	  // The target
	  $target=$targetBlank ? " target=\"_blank\" " : "";
		// convert link to url
		$status = preg_replace("/((http:\/\/|https:\/\/)[^ )
	]+)/e", "'<a href=\"$1\" title=\"$1\"  $target >'. ((strlen('$1')>=$linkMaxLen ? substr('$1',0,$linkMaxLen).'...':'$1')).'</a>'", $status);
		// convert @ to follow
		$status = preg_replace("/(@([_a-z0-9\-]+))/i","<a href=\"http://twitter.com/$2\" title=\"Follow $2\" $target >$1</a>",$status);
		// convert # to search
		$status = preg_replace("/(#([_a-z0-9\-]+))/i","<a href=\"http://search.twitter.com/search?q=%23$2\" title=\"Search $1\" $target >$1</a>",$status);
		// return the status
		return $status;
	}

	function NewsTwitter(){
		/* twitter */
		$username = 'lancearmstrong';
		$tweet_count = '5';
		$url = 'https://api.twitter.com/1/statuses/user_timeline.json?screen_name=' . $username . '&count=' . $tweet_count . '&include_entities=1&include_rts=1';
		//https://api.twitter.com/1/statuses/user_timeline.json?screen_name=robvaneckdesign&count=10&include_entities=1&include_rts=1
		$server = $_SERVER["SERVER_NAME"];
		$cache_path =  "/public/sites/$server/silverstripe-cache/twitter/twitter";
		$cache_time = filemtime($cache_path);
		$cache_time_plus = $cache_time+300;
		$now = time();
		/*
		var_dump($server);
		var_dump($cache_path);
		var_dump($cache_time);
		var_dump($cache_time_plus);
		var_dump($now);
		*/
		if ($now < $cache_time_plus){
			$data = file_get_contents($cache_path);
			//var_dump('difference < 5 min - use cache file');
		}else{
			$ch = curl_init();//Initialise CURL
			curl_setopt($ch, CURLOPT_HEADER, 0);
			curl_setopt($ch, CURLOPT_URL, $url);//Set the url
			curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);//We want the data to return
			curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 10);//Of course, we don't want your script to run forever, so set a timeout
			$data = curl_exec($ch);//Execute and get the page
			curl_close($ch);//Close curl connection
			$cachefile = fopen($cache_path, 'wb');
			fwrite($cachefile, $data);
			fclose($cachefile);
			//var_dump('difference > 5 min - update cache file');
		}
		$json = json_decode($data); //Decode the json	
		/*
		var_dump ($url);		
		var_dump ($data);
		var_dump ($json);
		*/
		$twitterOutput = new DataObjectSet();
		foreach($json as $tweet){
			$datetime = $tweet->created_at;
			//$date = date('M d, Y', strtotime($datetime));
			//$time = date('g:ia', strtotime($datetime));
			$ss_datetime = date('Y-m-d H:i:s', strtotime($datetime));;
			$date = date('d M', strtotime($datetime));
			$tweet_text = $tweet->text;
			$tweet_text = $this->twitterStatusUrlConverter($tweet_text);
			$tweet_link = "http://twitter.com/".$tweet->user->id."/status/".$tweet->id_str;
			
			$twitterOutput->push(
				new ArrayData(
					array(
						'Title' => $tweet_text,
						'Date' => $ss_datetime,
						'Tweet' => true,
						'Posted' => $date,
						'Link' => $tweet_link,
					)
				)
			);
		}

		/* news */
		$newsOutput = new DataObjectSet();
		$blogentrys = DataObject::get('BlogEntry');
		$newsOutput->merge($blogentrys);
		
		/* merge twitter + news */
		$Output = new DataObjectSet(); 
		$Output->merge($twitterOutput);
		$Output->merge($newsOutput);
		$Output->sort('Date', 'DESC');
		$OutputLimited = $Output->getRange(0, 5);
		return $OutputLimited;
	}

in your template you can use:



<% if NewsTwitter %>
    <ul id="NewsTwitter">
        <% control NewsTwitter %>
        <% if Tweet %>
            <li class="newsItem clickable tweet <% if Last %>last<% end_if %>" data-url="$Link">
                <span class="date">$Posted | </span><span class="msg">$Title</span><span class="arrow"></span>
                <noscript><br /><a href="$Link" class="arrow" ><small>Lees meer</small></a></noscript>
            </li>
        <% else %>     
            <li class="newsItem clickable web <% if Last %>last<% end_if %>" data-url="$Link" data>
                <span class="date">$Date.FormatI18N(%e %b) | </span> <span class="msg">$Title</span><span class="arrow"></span>
                <noscript><br /><a href="$Link" class="arrow" ><small>Lees meer</small></a></noscript>
            </li>
        <% end_if %>
        <% end_control %>
    </ul>
<% end_if %>