]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Pull up the guts of my fixed bit.ly plugin from an old work branch (that had made...
authorBrion Vibber <brion@pobox.com>
Thu, 7 Oct 2010 19:03:33 +0000 (12:03 -0700)
committerBrion Vibber <brion@pobox.com>
Thu, 7 Oct 2010 19:03:33 +0000 (12:03 -0700)
plugins/BitlyUrl/BitlyUrlPlugin.php

index 10d99b35886788f5ea4386b800f673d6f0761152..ceabeb29cd7c4a05694cb3638a25e3eb58414c28 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * StatusNet, the distributed open-source microblogging tool
  *
- * Plugin to push RSS/Atom updates to a PubSubHubBub hub
+ * Plugin to use bit.ly URL shortening services.
  *
  * PHP version 5
  *
@@ -22,7 +22,9 @@
  * @category  Plugin
  * @package   StatusNet
  * @author    Craig Andrews <candrews@integralblue.com>
+ * @author    Brion Vibber <brion@status.net>
  * @copyright 2009 Free Software Foundation, Inc http://www.fsf.org
+ * @copyright 2010 StatusNet, Inc http://status.net/
  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link      http://status.net/
  */
@@ -35,26 +37,98 @@ require_once INSTALLDIR.'/plugins/UrlShortener/UrlShortenerPlugin.php';
 
 class BitlyUrlPlugin extends UrlShortenerPlugin
 {
-    public $serviceUrl;
+    public $shortenerName = 'bit.ly';
+    public $serviceUrl = 'http://bit.ly/api?method=shorten&version=2.0.1&longUrl=%s';
+    public $login;
+    public $apiKey;
 
     function onInitializePlugin(){
         parent::onInitializePlugin();
         if(!isset($this->serviceUrl)){
-            throw new Exception(_m("You must specify a serviceUrl."));
+            throw new Exception(_m("You must specify a serviceUrl for bit.ly shortening."));
+        }
+        if(!isset($this->login)){
+            throw new Exception(_m("You must specify a login name for bit.ly shortening."));
+        }
+        if(!isset($this->login)){
+            throw new Exception(_m("You must specify an API key for bit.ly shortening."));
         }
     }
 
+    /**
+     * Short a URL
+     * @param url
+     * @return string shortened version of the url, or null if URL shortening failed
+     */
     protected function shorten($url) {
-        $response = $this->http_get($url);
-        if(!$response) return;
-        return current(json_decode($response)->results)->hashUrl;
+        $response = $this->query($url);
+        if ($this->isOk($url, $response)) {
+            return $this->decode($url, $response->getBody());
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Inject API key into query before sending out...
+     *
+     * @param string $url
+     * @return HTTPResponse
+     */
+    protected function query($url)
+    {
+        // http://code.google.com/p/bitly-api/wiki/ApiDocumentation#/shorten
+        $params = http_build_query(array(
+            'login' => $this->login,
+            'apiKey' => $this->apiKey), '', '&');
+        $serviceUrl = sprintf($this->serviceUrl, $url) . '&' . $params;
+
+        $request = HTTPClient::start();
+        return $request->get($serviceUrl);
+    }
+
+    /**
+     * JSON decode for API result
+     */
+    protected function decode($url, $body)
+    {
+        $json = json_decode($body, true);
+        return $json['results'][$url]['shortUrl'];
+    }
+
+    /**
+     * JSON decode for API result
+     */
+    protected function isOk($url, $response)
+    {
+        $code = 'unknown';
+        $msg = '';
+        if ($response->isOk()) {
+            $body = $response->getBody();
+            common_log(LOG_INFO, $body);
+            $json = json_decode($body, true);
+            if ($json['statusCode'] == 'OK') {
+                $data = $json['results'][$url];
+                if (isset($data['shortUrl'])) {
+                    return true;
+                } else if (isset($data['statusCode']) && $data['statusCode'] == 'ERROR') {
+                    $code = $data['errorCode'];
+                    $msg = $data['errorMessage'];
+                }
+            } else if ($json['statusCode'] == 'ERROR') {
+                $code = $json['errorCode'];
+                $msg = $json['errorMessage'];
+            }
+            common_log(LOG_ERR, "bit.ly returned error $code $msg for $url");
+        }
+        return false;
     }
 
     function onPluginVersion(&$versions)
     {
         $versions[] = array('name' => sprintf('BitlyUrl (%s)', $this->shortenerName),
                             'version' => STATUSNET_VERSION,
-                            'author' => 'Craig Andrews',
+                            'author' => 'Craig Andrews, Brion Vibber',
                             'homepage' => 'http://status.net/wiki/Plugin:BitlyUrl',
                             'rawdescription' =>
                             sprintf(_m('Uses <a href="http://%1$s/">%1$s</a> URL-shortener service.'),