]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Add timeline tags API (RSS 2.0 and Atom feeds)
authorCraig Andrews <candrews@integralblue.com>
Sun, 12 Jul 2009 19:07:54 +0000 (15:07 -0400)
committerCraig Andrews <candrews@integralblue.com>
Sun, 12 Jul 2009 19:07:54 +0000 (15:07 -0400)
actions/api.php
actions/tag.php
actions/twitapitags.php [new file with mode: 0644]
lib/router.php

index 4a00b77e8da2af7bc96c46d235b0147f808d51e3..452ed8e824a17c914904f459522bf31fb442d238 100644 (file)
@@ -128,6 +128,7 @@ class ApiAction extends Action
                                 'laconica/version',
                                 'laconica/config',
                                 'laconica/wadl',
+                                'tags/timeline',
                                 'groups/timeline');
 
         static $bareauth = array('statuses/user_timeline',
index 888aba0628cb39eef5236725a0aeca43bd00c236..020399d9eeddc2b1d6476f4460fcefc117c26646 100644 (file)
@@ -72,8 +72,24 @@ class TagAction extends Action
     function getFeeds()
     {
         return array(new Feed(Feed::RSS1,
-                              common_local_url('tagrss', array('tag' => $this->tag)),
-                              sprintf(_('Feed for tag %s'), $this->tag)));
+                              common_local_url('tagrss',
+                                               array('tag' => $this->tag)),
+                              sprintf(_('Notice feed for tag %s (RSS 1.0)'),
+                                      $this->tag)),
+                     new Feed(Feed::RSS2,   
+                              common_local_url('api',
+                                               array('apiaction' => 'tags',
+                                                     'method' => 'timeline',
+                                                     'argument' => $this->tag.'.rss')),
+                              sprintf(_('Notice feed for %s group (RSS 2.0)'),
+                                      $this->tag)),
+                     new Feed(Feed::ATOM,
+                              common_local_url('api',
+                                               array('apiaction' => 'tags',
+                                                     'method' => 'timeline',
+                                                     'argument' => $this->tag.'.atom')),
+                              sprintf(_('Notice feed for tag %s (Atom)'),
+                                      $this->tag)));
     }
 
     function showContent()
diff --git a/actions/twitapitags.php b/actions/twitapitags.php
new file mode 100644 (file)
index 0000000..5c85275
--- /dev/null
@@ -0,0 +1,114 @@
+<?php
+/**
+ * Laconica, the distributed open-source microblogging tool
+ *
+ * Laconica extensions to the Twitter-like API for groups
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Twitter
+ * @package   Laconica
+ * @author    Craig Andrews
+ * @author    Zach Copley <zach@controlyourself.ca>
+ * @copyright 2009 Control Yourself, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://laconi.ca/
+ */
+
+if (!defined('LACONICA')) {
+    exit(1);
+}
+
+require_once INSTALLDIR.'/lib/twitterapi.php';
+
+/**
+ * Group-specific API methods
+ *
+ * This class handles Laconica group API methods.
+ *
+ * @category  Twitter
+ * @package   Laconica
+ * @author    Craig Andrews
+ * @author    Zach Copley <zach@controlyourself.ca>
+ * @copyright 2009 Control Yourself, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://laconi.ca/
+ */
+
+ class TwitapitagsAction extends TwitterapiAction
+ {
+
+     function timeline($args, $apidata)
+     {
+         parent::handle($args);
+
+         common_debug("in tags api action");
+
+         $this->auth_user = $apidata['user'];
+         $tag = $apidata['api_arg'];
+
+         if (empty($tag)) {
+             $this->clientError('Not Found', 404, $apidata['content-type']);
+             return;
+         }
+
+         $sitename   = common_config('site', 'name');
+         $title      = sprintf(_("Notices tagged with %s"), $tag);
+         $taguribase = common_config('integration', 'taguri');
+         $id         = "tag:$taguribase:TagTimeline:".$tag;
+         $link       = common_local_url('tag',
+             array('tag' => $tag));
+         $subtitle   = sprintf(_('Updates tagged with %1$s on %2$s!'),
+             $tag, $sitename);
+
+         $page     = (int)$this->arg('page', 1);
+         $count    = (int)$this->arg('count', 20);
+         $max_id   = (int)$this->arg('max_id', 0);
+         $since_id = (int)$this->arg('since_id', 0);
+         $since    = $this->arg('since');
+
+         # XXX: support max_id, since_id, and since arguments
+         $notice = Notice_tag::getStream($tag, ($page-1)*$count, $count + 1);
+
+         switch($apidata['content-type']) {
+          case 'xml':
+             $this->show_xml_timeline($notice);
+             break;
+          case 'rss':
+             $this->show_rss_timeline($notice, $title, $link,
+                 $subtitle, $suplink);
+             break;
+          case 'atom':
+             if (isset($apidata['api_arg'])) {
+                 $selfuri = common_root_url() .
+                     'api/laconica/tags/timeline/' .
+                         $apidata['api_arg'] . '.atom';
+             } else {
+                 $selfuri = common_root_url() .
+                  'api/laconica/tags/timeline.atom';
+             }
+             $this->show_atom_timeline($notice, $title, $id, $link,
+                 $subtitle, $suplink, $selfuri);
+             break;
+          case 'json':
+             $this->show_json_timeline($notice);
+             break;
+          default:
+             $this->clientError(_('API method not found!'), $code = 404);
+         }
+     }
+
+}
index 8104d7818c0518db5f8bee4859de486964462937..e1213863701b9318ef3124831c9aab1d45e92337 100644 (file)
@@ -403,6 +403,15 @@ class Router
                     array('action' => 'api',
                           'apiaction' => 'groups'));
 
+        // Tags
+        $m->connect('api/laconica/tags/:method/:argument',
+                    array('action' => 'api',
+                          'apiaction' => 'tags'));
+
+        $m->connect('api/laconica/tags/:method',
+                    array('action' => 'api',
+                          'apiaction' => 'tags'));
+
         // search
         $m->connect('api/search.atom', array('action' => 'twitapisearchatom'));
         $m->connect('api/search.json', array('action' => 'twitapisearchjson'));