Пример #1
0
 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.');
 }