]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Twitter-API: /statuses/replies.format now works (mostly)
authorzach <zach@copley.name>
Thu, 17 Jul 2008 22:28:45 +0000 (18:28 -0400)
committerzach <zach@copley.name>
Thu, 17 Jul 2008 22:28:45 +0000 (18:28 -0400)
darcs-hash:20080717222845-ca946-f2644317a144157aaba7a38d4effb216a9c5f650.gz

actions/twitapistatuses.php
htaccess.sample

index 0d6443f7d02fb912bff9490aaac67fa6195199f5..6cf1ffb48b534d531c97f27a4a90ae90a3ecb070 100644 (file)
@@ -79,19 +79,26 @@ class TwitapistatusesAction extends TwitterapiAction {
        }       
        
        function show_xml_timeline($notice) {
-               
+
                header('Content-Type: application/xml; charset=utf-8');         
                common_start_xml();
                common_element_start('statuses', array('type' => 'array'));
-               
-               while ($notice->fetch()) {
-                       $twitter_status = $this->twitter_status_array($notice);                                         
-                       $this->show_twitter_xml_status($twitter_status);
+
+               if (is_array($notice)) {
+                       foreach ($notice as $n) {
+                               $twitter_status = $this->twitter_status_array($n);                                              
+                               $this->show_twitter_xml_status($twitter_status);        
+                       }
+               } else {
+                       while ($notice->fetch()) {
+                               $twitter_status = $this->twitter_status_array($notice);                                         
+                               $this->show_twitter_xml_status($twitter_status);
+                       }
                }
                
                common_element_end('statuses');
                common_end_xml();
-       }
+       }       
        
        function show_rss_timeline($notice, $title, $id, $link, $subtitle) {
                
@@ -106,11 +113,19 @@ class TwitapistatusesAction extends TwitterapiAction {
                common_element('language', NULL, 'en-us');
                common_element('ttl', NULL, '40');
        
-               while ($notice->fetch()) {
-                       $entry = $this->twitter_rss_entry_array($notice);                                               
-                       $this->show_twitter_rss_item($entry);
+       
+               if (is_array($notice)) {
+                       foreach ($notice as $n) {
+                               $entry = $this->twitter_rss_entry_array($n);                                            
+                               $this->show_twitter_rss_item($entry);
+                       } 
+               } else {
+                       while ($notice->fetch()) {
+                               $entry = $this->twitter_rss_entry_array($notice);                                               
+                               $this->show_twitter_rss_item($entry);
+                       }
                }
-               
+
                common_element_end('channel');                  
                $this->end_twitter_rss();
        }
@@ -126,9 +141,16 @@ class TwitapistatusesAction extends TwitterapiAction {
                common_element('link', array('href' => $link, 'rel' => 'alternate', 'type' => 'text/html'), NULL);
                common_element('subtitle', NULL, $subtitle);
 
-               while ($notice->fetch()) {
-                       $entry = $this->twitter_rss_entry_array($notice);                                               
-                       $this->show_twitter_atom_entry($entry);
+               if (is_array($notice)) {
+                       foreach ($notice as $n) {
+                               $entry = $this->twitter_rss_entry_array($n);                                            
+                               $this->show_twitter_atom_entry($entry);
+                       } 
+               } else {
+                       while ($notice->fetch()) {
+                               $entry = $this->twitter_rss_entry_array($notice);                                               
+                               $this->show_twitter_atom_entry($entry);
+                       }
                }
                
                $this->end_twitter_atom();
@@ -140,10 +162,17 @@ class TwitapistatusesAction extends TwitterapiAction {
                
                $statuses = array();
                
-               while ($notice->fetch()) {      
-                       $twitter_status = $this->twitter_status_array($notice);
-                       array_push($statuses, $twitter_status);                                         
-               }                               
+               if (is_array($notice)) {
+                       foreach ($notice as $n) {
+                               $twitter_status = $this->twitter_status_array($n);
+                               array_push($statuses, $twitter_status);
+                       } 
+               } else {
+                       while ($notice->fetch()) {
+                               $twitter_status = $this->twitter_status_array($notice);
+                               array_push($statuses, $twitter_status);
+                       }
+               }                       
                
                $this->show_twitter_json_statuses($statuses);                   
        }
@@ -437,8 +466,81 @@ class TwitapistatusesAction extends TwitterapiAction {
        */
        function replies($args, $apidata) {
                parent::handle($args);
-               common_server_error("API method under construction.", $code=501);
+
+               $since = $this->arg('since');
+
+               $count = $this->arg('count');
+               $page = $this->arg('page');
+
+               $user = $apidata['user'];
+               $profile = $user->getProfile();
+
+               $sitename = common_config('site', 'name');
+               $siteserver = common_config('site', 'server'); 
+
+               $title = sprintf(_("%s / Updates replying to %s"), $sitename, $user->nickname);
+               $id = "tag:$siteserver:replies:".$user->id;
+               $link = common_local_url('replies', array('nickname' => $user->nickname));
+               $subtitle = "gar";
+               $subtitle = sprintf(_("%s updates that reply to updates from %s / %."), $sitename, $user->nickname, $user->nickname);
+
+               if (!$page) {
+                       $page = 1;
+               }
+
+               if (!$count) {
+                       $count = 20;
+               }
+
+               $reply = new Reply();
+
+               $reply->profile_id = $user->id;
+
+               $reply->orderBy('modified DESC');
+
+               $page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
+
+               $reply->limit((($page-1)*20), $count);
+
+               $cnt = $reply->find();
+
+               $notices = array();
+       
+               if ($cnt) {
+                       while ($reply->fetch()) {
+                               $notice = new Notice();
+                               $notice->id = $reply->notice_id;
+                               $result = $notice->find(true);
+                               if (!$result) {
+                                       continue;
+                               }
+                               $notices[] = clone($notice);
+                       }
+               }
+
+               switch($apidata['content-type']) {
+                case 'xml': 
+                       $this->show_xml_timeline($notices);
+                       break;
+                case 'rss':
+                       $this->show_rss_timeline($notices, $title, $id, $link, $subtitle);
+                       break;
+                case 'atom': 
+                       $this->show_atom_timeline($notices, $title, $id, $link, $subtitle);
+                       break;
+                case 'json':
+                       $this->show_json_timeline($notices);
+                       break;
+                default:
+                       common_user_error("API method not found!", $code = 404);
+               }
+
+
+               exit();
+
+
        }
+
        
        
        /*
index da1355c065044fc3c82459443c5d82454ac8275c..3954128e22d1617e937f821c804388e1a46de4d8 100644 (file)
@@ -63,7 +63,7 @@ RewriteRule ^api/statuses/friends_timeline(.*)$ index.php?action=api&apiaction=s
 RewriteRule ^api/statuses/user_timeline(.*)$ index.php?action=api&apiaction=statuses&method=user_timeline$1 [L,QSA]
 RewriteRule ^api/statuses/show/(.*)$ index.php?action=api&apiaction=statuses&method=show&argument=$1 [L,QSA]
 RewriteRule ^api/statuses/update(.*)$ index.php?action=api&apiaction=statuses&method=update$1 [L,QSA]
-RewriteRule ^api/statuses/replies/(.*)$ index.php?action=api&apiaction=statuses&method=replies&argument=$1 [L,QSA]
+RewriteRule ^api/statuses/replies(.*)$ index.php?action=api&apiaction=statuses&method=replies&argument=$1 [L,QSA]
 RewriteRule ^api/statuses/destroy/(.*)$ index.php?action=api&apiaction=statuses&method=destroy&argument=$1 [L,QSA]
 RewriteRule ^api/statuses/friends(.*)$ index.php?action=api&apiaction=statuses&method=friends$1 [L,QSA]
 RewriteRule ^api/statuses/followers(.*)$ index.php?action=api&apiaction=statuses&method=followers$1 [L,QSA]