-
AuthorPosts
-
January 23, 2012 at 1:43 pm #173087
The demo and quickstart of JA_Elastica have a twitter box with the last tweet, but it is in fact just a custom module using fixed text.
How can I recreate it to actually query twitter?
Also can the JA_Elastica forum be moved to public like the JA_Purity forum?
Thanks in advance.
Hamish
January 31, 2012 at 6:10 am #436276Nearly solved it myself. The only thing left to do is figure out what to change to style the time of the tweet correctly. I ran out of time before figuring it out.
1. Install a plug in that allows you to post PHP code. I used sourcerer.
2. Create a module in “position-7” using Module Class Suffix “grid-double mod-contrast contrast-blue”
3. Insert the following PHP code. This is modified from code written by Jonathon Nicol that you can see documented here.
I cut this from sourcerer so the formatting is a little off. I basically changed the classes of some items to match Elastica, changed it from being a list, and reduced it to only grab 1 tweet.Hope this helps.
Hamish
<blockquote>
<?php/**
* TWITTER FEED PARSER
*
* @version 1.1.1
* @author Jonathan Nicol
* @link http://f6design.com/journal/2010/10/07/display-recent-twitter-tweets-using-php/
*
* Notes:
* We employ caching because Twitter only allows their RSS feeds to be accesssed 150
* times an hour per user client.
* —
* Dates can be displayed in Twitter style (e.g. “1 hour ago”) by setting the
* $twitter_style_dates param to true.
*
* Credits:
* Hashtag/username parsing based on: http://snipplr.com/view/16221/get-twitter-tweets/
* Feed caching: http://www.addedbytes.com/articles/caching-output-in-php/
* Feed parsing: http://boagworld.com/forum/comments.php?DiscussionID=4639
*/function display_latest_tweets(
$twitter_user_id,
$cache_file = ‘./twitter.txt’,
$tweets_to_display = 1,
$ignore_replies = true,
$twitter_wrap_open = ”,
$twitter_wrap_close = ”,
$tweet_wrap_open = ‘<div id=”ja-twitter-wrap”>’,$meta_wrap_open = ‘<span class=”date”> ‘,
$meta_wrap_close = ‘</span>’,
$tweet_wrap_close = ‘</div>’,$date_format = ‘g:i A M jS’,
$twitter_style_dates = true){// Seconds to cache feed (1 hour).
$cachetime = 10;
// Time that the cache was last filled.
$cache_file_created = ((@file_exists($cache_file))) ? @filemtime($cache_file) : 0;// A flag so we know if the feed was successfully parsed.
$tweet_found = false;// Show file from cache if still valid.
if (time() – $cachetime < $cache_file_created) {$tweet_found = true;
// Display tweets from the cache.
@readfile($cache_file);} else {
// Cache file not found, or old. Fetch the RSS feed from Twitter.
$rss = @file_get_contents(‘http://twitter.com/statuses/user_timeline/’.$twitter_user_id.’.rss’);if($rss) {
// Parse the RSS feed to an XML object.
$xml = @simplexml_load_string($rss);if($xml !== false) {
// Error check: Make sure there is at least one item.
if (count($xml->channel->item)) {$tweet_count = 0;
// Start output buffering.
ob_start();// Open the twitter wrapping element.
$twitter_html = $twitter_wrap_open;// Iterate over tweets.
foreach($xml->channel->item as $tweet) {// Twitter feeds begin with the username, “e.g. User name: Blah”
// so we need to strip that from the front of our tweet.
$tweet_desc = substr($tweet->description,strpos($tweet->description,”:”)+2);
$tweet_desc = htmlspecialchars($tweet_desc);
$tweet_first_char = substr($tweet_desc,0,1);// If we are not gnoring replies, or tweet is not a reply, process it.
if ($tweet_first_char!=’@’ || $ignore_replies==false){$tweet_found = true;
$tweet_count++;// Add hyperlink html tags to any urls, twitter ids or hashtags in the tweet.
$tweet_desc = preg_replace(‘/(https?://[^s”<>]+)/’,'<a href=”$1″>$1</a>’,$tweet_desc);
$tweet_desc = preg_replace(‘/(^|[ns])@([^s”tnr<:]*)/is’, ‘$1<a href=”http://twitter.com/$2″>@$2</a>’, $tweet_desc);
$tweet_desc = preg_replace(‘/(^|[ns])#([^s”tnr<:]*)/is’, ‘$1<a href=”http://twitter.com/search?q=%23$2″>#$2</a>’, $tweet_desc);// Convert Tweet display time to a UNIX timestamp. Twitter timestamps are in UTC/GMT time.
$tweet_time = strtotime($tweet->pubDate);
if ($twitter_style_dates){
// Current UNIX timestamp.
$current_time = time();
$time_diff = abs($current_time – $tweet_time);
switch ($time_diff)
{
case ($time_diff < 60):
$display_time = $time_diff.’ seconds ago’;
break;
case ($time_diff >= 60 && $time_diff < 3600):
$min = floor($time_diff/60);
$display_time = $min.’ minutes ago’;
break;
case ($time_diff >= 3600 && $time_diff < 86400):
$hour = floor($time_diff/3600);
$display_time = ‘about ‘.$hour.’ hour’;
if ($hour > 1){ $display_time .= ‘s’; }
$display_time .= ‘ ago’;
break;
default:
$display_time = date($date_format,$tweet_time);
break;
}
} else {
$display_time = date($date_format,$tweet_time);
}// Render the tweet.
$twitter_html .= $tweet_wrap_open.$tweet_desc.$meta_wrap_open.'<a href=”http://twitter.com/’.$twitter_user_id.'”>’.$display_time.'</a>’.$meta_wrap_close.$tweet_wrap_close;}
// If we have processed enough tweets, stop.
if ($tweet_count >= $tweets_to_display){
break;
}}
// Close the twitter wrapping element.
$twitter_html .= $twitter_wrap_close;
echo $twitter_html;// Generate a new cache file.
$file = @fopen($cache_file, ‘w’);// Save the contents of output buffer to the file, and flush the buffer.
@fwrite($file, ob_get_contents());
@fclose($file);
ob_end_flush();}
}
}
}
// In case the RSS feed did not parse or load correctly, show a link to the Twitter account.
if (!$tweet_found){
echo $twitter_wrap_open.$tweet_wrap_open.’Oops, our twitter feed is unavailable right now. ‘.$meta_wrap_open.'<a href=”http://twitter.com/’.$twitter_user_id.'”>Follow us on Twitter</a>’.$meta_wrap_close.$tweet_wrap_close.$twitter_wrap_close;
}
}display_latest_tweets(‘YOURTWITTERNAMEHERE’);
?>
</blockquote>
-
AuthorPosts
This topic contains 2 replies, has 1 voice, and was last updated by hes21 12 years, 10 months ago.
We moved to new unified forum. Please post all new support queries in our New Forum