]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Ticket #1108 - Added 'social graph' methods to the API
authorZach Copley <zach@controlyourself.ca>
Mon, 23 Feb 2009 04:04:47 +0000 (20:04 -0800)
committerZach Copley <zach@controlyourself.ca>
Mon, 23 Feb 2009 04:04:47 +0000 (20:04 -0800)
actions/twitapistatuses.php
lib/router.php

index 51c2565892976820e5fd98633b932a6da5427896..216835026de7806b1a5c9d65211c9102cfa88433 100644 (file)
@@ -470,19 +470,28 @@ class TwitapistatusesAction extends TwitterapiAction
         return $this->subscriptions($apidata, 'subscribed', 'subscriber');
     }
 
-    function followers($args, $apidata)
+    function friendsIDs($args, $apidata)
     {
         parent::handle($args);
+        return $this->subscriptions($apidata, 'subscribed', 'subscriber', true);
+    }
 
+    function followers($args, $apidata)
+    {
+        parent::handle($args);
         return $this->subscriptions($apidata, 'subscriber', 'subscribed');
     }
 
-    function subscriptions($apidata, $other_attr, $user_attr)
+    function followersIDs($args, $apidata)
     {
+        parent::handle($args);
+        return $this->subscriptions($apidata, 'subscriber', 'subscribed', true);
+    }
 
-        # XXX: lite
+    function subscriptions($apidata, $other_attr, $user_attr, $onlyIDs=false)
+    {
 
-        $this->auth_user = $apidate['user'];
+        $this->auth_user = $apidata['user'];
         $user = $this->get_user($apidata['api_arg'], $apidata);
 
         if (!$user) {
@@ -514,7 +523,10 @@ class TwitapistatusesAction extends TwitterapiAction
         }
 
         $sub->orderBy('created DESC');
-        $sub->limit(($page-1)*100, 100);
+
+        if (!$onlyIDs) {
+            $sub->limit(($page-1)*100, 100);
+        }
 
         $others = array();
 
@@ -529,7 +541,13 @@ class TwitapistatusesAction extends TwitterapiAction
         $type = $apidata['content-type'];
 
         $this->init_document($type);
-        $this->show_profiles($others, $type);
+
+        if ($onlyIDs) {
+            $this->showIDs($others, $type);
+        } else {
+            $this->show_profiles($others, $type);
+        }
+
         $this->end_document($type);
     }
 
@@ -555,6 +573,28 @@ class TwitapistatusesAction extends TwitterapiAction
         }
     }
 
+    function showIDs($profiles, $type)
+    {
+        switch ($type) {
+         case 'xml':
+            $this->elementStart('ids');
+            foreach ($profiles as $profile) {
+                $this->element('id', null, $profile->id);
+            }
+            $this->elementEnd('ids');
+            break;
+         case 'json':
+            $ids = array();
+            foreach ($profiles as $profile) {
+                $ids[] = (int)$profile->id;
+            }
+            print json_encode($ids);
+            break;
+         default:
+            $this->clientError(_('unsupported file type'));
+        }
+    }
+
     function featured($args, $apidata)
     {
         parent::handle($args);
index a41d35f22c55e7c1748402d30ef6309e1a7ae41d..b18a5523e97a0806ec65093225d44517168ebff8 100644 (file)
@@ -265,6 +265,33 @@ class Router
                           'apiaction' => 'friendships'),
                     array('method' => 'exists(\.(xml|json|rss|atom))'));
 
+
+        // Social graph
+
+        $m->connect('api/friends/ids/:argument',
+                    array('action' => 'api',
+                          'apiaction' => 'statuses',
+                          'method' => 'friendsIDs'));
+                                                   
+        foreach (array('xml', 'json') as $e) {
+            $m->connect('api/friends/ids.'.$e,
+                        array('action' => 'api',
+                              'apiaction' => 'statuses',
+                              'method' => 'friendsIDs.'.$e));
+        }
+                                                    
+        $m->connect('api/followers/ids/:argument',
+                    array('action' => 'api',
+                          'apiaction' => 'statuses',
+                          'method' => 'followersIDs'));
+
+        foreach (array('xml', 'json') as $e) {
+            $m->connect('api/followers/ids.'.$e,
+                        array('action' => 'api',
+                              'apiaction' => 'statuses',
+                              'method' => 'followersIDs.'.$e));
+        }
+
         // account
 
         $m->connect('api/account/:method',