Solved

How To Display Twitter Profile Picture On My Website

Posted on 2009-07-07
6
326 Views
Last Modified: 2012-05-07
Hi Everyone,

I've found interesting code at @
http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/Q_24524469.html?sfQueryTermInfo=1+twitter

I can display the timeline but i can not display the image (profile image of selected person)

Can someone help?
<?php
$name = 'andy_murray';
if( !file_exists("twitter$name.cache.txt") || filemtime("twitter$name.cache.txt") < time() - 300 ) {
    file_put_contents("twitter$name.cache.txt", file_get_contents("http://twitter.com/statuses/user_timeline/$name.rss"));
}
$items = simplexml_load_string( file_get_contents("http://twitter.com/statuses/user_timeline/$name.rss") )->xpath("/rss/channel/item/title[not(starts-with(.,\"$name: @\"))]/..");
echo '<?xml version="1.0" encoding="UTF-8"?>';
?>
    <h1><a typeof="foaf:OnlineAccount" rel="foaf:accountServiceHomepage" resource="http://www.twitter.com/" property="foaf:accountName" href="http://twitter.com/<?php echo 
 
$name; ?>/">
<?php echo $name; ?></a></h1>
<div id="myTwitter">
<?php
	foreach( $items as $tweet) {
		$diff = Timesince(strtotime($tweet->pubDate));
		$link = $tweet->link;
		$post = preg_replace( '|([^\s])\s+([^\s]+)\s*$|', '$1&nbsp;$2',
						htmlentities(str_replace(array('&lt;','&gt;'),array('<','>'),
						substr($tweet->description, strlen("$name: "))),ENT_QUOTES,'UTF-8'));
		echo "<span style=\"display:none;\">"; 		
		echo date("d/m/Y H:s",strtotime($tweet->pubDate));
		echo "<a href=$link>$post</a>";
		echo "Posted: ".$diff;
		echo "</span>";
	}
?>
</div>
<script type="text/javascript">
//<![CDATA[
$(document).ready(function(){$("span").hide();(f=function(){$("span:hidden:first").fadeIn(600,f);})();});
//]]>
</script>
 
<?php
function Timesince($original) {  
     // array of time period chunks  
     $chunks = array(  
     array(60 * 60 * 24 * 365 , 'year'),  
     array(60 * 60 * 24 * 30 , 'month'),  
     array(60 * 60 * 24 * 7, 'week'),  
     array(60 * 60 * 24 , 'day'),  
     array(60 * 60 , 'hour'),  
     array(60 , 'min'),  
     array(1 , 'sec'),  
     );  
   
     $today = time(); /* Current unix time  */  
     $since = $today - $original;  
   
     // $j saves performing the count function each time around the loop  
     for ($i = 0, $j = count($chunks); $i < $j; $i++) {  
   
     $seconds = $chunks[$i][0];  
     $name = $chunks[$i][1];  
   
     // finding the biggest chunk (if the chunk fits, break)  
     if (($count = floor($since / $seconds)) != 0) {  
         break;  
     }  
     }  
   
     $print = ($count == 1) ? '1 '.$name : "$count {$name}s";  
   
     if ($i + 1 < $j) {  
     // now getting the second item  
     $seconds2 = $chunks[$i + 1][0];  
     $name2 = $chunks[$i + 1][1];  
   
     // add second item if its greater than 0  
     if (($count2 = floor(($since - ($seconds * $count)) / $seconds2)) != 0) {  
         $print .= ($count2 == 1) ? ', 1 '.$name2 : " $count2 {$name2}s";  
     }  
     }  
     return $print;  
 }  
?>

Open in new window

0
Comment
Question by:informabiz
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
6 Comments
 
LVL 110

Expert Comment

by:Ray Paseur
ID: 24805153
On my twitter account, these are the images of me.

http://s3.amazonaws.com/twitter_production/profile_images/299888078/Ray_Paseur_normal.png
http://s3.amazonaws.com/twitter_production/profile_images/299888078/Ray_Paseur_bigger.png
http://s3.amazonaws.com/twitter_production/profile_images/299888078/Ray_Paseur.png

When I use this link:
http://s3.amazonaws.com/twitter_production/profile_images/299888078/andy_murray.png
... I get an XML file that sends an error message.  See code snippet.

So it would appear that you need to extract the Twitter name as well as the subdirectory key from the /profile_images/ directory.

Sorry if that is not much help, but at least it helps establish a pattern,  Best, ~Ray
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Key>profile_images/299888078/andy_murray.png</Key>
<RequestId>607621F47FD061F2</RequestId>

<HostId>
qmkz7cY8EOZOnediXfic7dJAL3spfJyQyjfc7o1C0pn8QkfoNzdtOSkr5IPxLAu9
</HostId>
</Error>

Open in new window

0
 

Author Comment

by:informabiz
ID: 24915606
Hi Ray,

Is there any sets of rules for names like user_id.jpg or images are named randomly ?
0
 
LVL 110

Accepted Solution

by:
Ray Paseur earned 500 total points
ID: 24915876
It can't be completely random, but it may not be very predictable.  Here is Andy Murray's "large" photo link
http://s3.amazonaws.com/twitter_production/profile_images/55512065/72990748.jpg

It looks like this much is consistent:
http://s3.amazonaws.com/twitter_production/profile_images/

After that, the file names may be something that is an aritfact of the image upload - probably carried in the Twitter data base.
0
 
LVL 110

Expert Comment

by:Ray Paseur
ID: 25109166
Not sure what to do about this.  I believe our Asker is looking for information that Twitter may not want to make public, so there may be no good way to answer the Q.  Twitter has an API (and I would post a link here, but Twitter is down at the moment - a not uncommon situation).
0
 
LVL 110

Expert Comment

by:Ray Paseur
ID: 25109302
Worth a look http://status.twitter.com/

I recently developed some automated Twitter interface code.  I am now in the process of revising and strengthening the error recover components!  ;-(
0

Featured Post

Resolve Critical IT Incidents Fast

If your data, services or processes become compromised, your organization can suffer damage in just minutes and how fast you communicate during a major IT incident is everything. Learn how to immediately identify incidents & best practices to resolve them quickly and effectively.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article discusses four methods for overlaying images in a container on a web page
This article discusses how to implement server side field validation and display customized error messages to the client.
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to count occurrences of each item in an array.

733 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question