protected function execute($arguments = array(), $options = array()) { $databaseManager = new sfDatabaseManager($this->configuration); $connection = $databaseManager->getDatabase($options['connection'])->getConnection(); $web = new sfWebBrowser(); $this->logSection($this->namespace, 'Getting latest tweets for @' . sfConfig::get('app_twitter_username')); $atom = $web->get('http://search.twitter.com/search.atom?q=from:' . sfConfig::get('app_twitter_username') . '&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 { $this->updated++; } } else { $tweet = new Tweet(); $this->new++; } $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->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); } if (isset($json->geo, $json->geo->coordinates)) { $tweet->setLatitude($json->geo->coordinates[0]); $tweet->setLongitude($json->geo->coordinates[1]); } $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) } echo "\n"; $this->logSection($this->namespace, 'Done: ' . $this->new . ' new, ' . $this->updated . ' updated.'); }