Skip to content

Instantly share code, notes, and snippets.

@stevelacey
Created December 28, 2010 20:29
Show Gist options
  • Save stevelacey/757665 to your computer and use it in GitHub Desktop.
Save stevelacey/757665 to your computer and use it in GitHub Desktop.
Symfony task extract for parsing Twitter user atom feed and extra data from Twitter status API.
<?php
$this->logSection($this->namespace, 'Getting latest tweets for @'.$user->getUsername());
$web = new sfWebBrowser();
$atom = $web->get('http://search.twitter.com/search.atom?q=from:'.$user->getUsername().'&rpp=5');
try {
if(!$atom->responseIsError()) {
$feed = new SimpleXMLElement($atom->getResponseText());
foreach($feed->entry as $rss) {
$id = preg_replace('/[^0-9]+/', '', $rss->link[0]['href']);
$tweet = Doctrine::getTable('Tweet')->find($id);
$namespaces = $rss->getNameSpaces(true);
if($tweet instanceOf Tweet) {
if(strtotime($rss->updated) <= strtotime($tweet->getUpdatedAt())) {
continue;
}
} else {
$tweet = new Tweet;
}
$file = $web->get('http://api.twitter.com/1/statuses/show/'.$id.'.json');
try {
if(!$file->responseIsError()) {
$json = json_decode($file->getResponseText());
$tweet->setId($id);
$tweet->setUser($user);
$tweet->setText($rss->title);
$tweet->setHTML(html_entity_decode($rss->content));
$tweet->setUri($rss->link[0]['href']);
if(isset($json->in_reply_to_status_id)) {
$tweet->setReplyId($json->in_reply_to_status_id);
}
if(isset($json->in_reply_to_user_id)) {
$tweet->setReplyUserId($json->in_reply_to_user_id);
$tweet->setReplyUsername($json->in_reply_to_screen_name);
}
$tweet->setLanguage($rss->children($namespaces['twitter'])->lang);
$tweet->setSource(html_entity_decode($rss->children($namespaces['twitter'])->source));
$tweet->setCreatedAt($rss->published);
$tweet->setUpdatedAt($rss->updated);
$tweet->save();
echo '.';
} else {
// Error response (eg. 404, 500, etc)
}
} catch (Exception $e) {
// Adapter error (eg. Host not found)
}
}
} else {
// Error response (eg. 404, 500, etc)
}
} catch (Exception $e) {
// Adapter error (eg. Host not found)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment