From 51254ed85eaa755f676e0772d5406deb2cdc73a5 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Thu, 7 Oct 2010 12:03:33 -0700 Subject: [PATCH] Pull up the guts of my fixed bit.ly plugin from an old work branch (that had made other changes we weren't happy with in the plugin management). Now works if given a global API key. --- plugins/BitlyUrl/BitlyUrlPlugin.php | 88 ++++++++++++++++++++++++++--- 1 file changed, 81 insertions(+), 7 deletions(-) diff --git a/plugins/BitlyUrl/BitlyUrlPlugin.php b/plugins/BitlyUrl/BitlyUrlPlugin.php index 10d99b3588..ceabeb29cd 100644 --- a/plugins/BitlyUrl/BitlyUrlPlugin.php +++ b/plugins/BitlyUrl/BitlyUrlPlugin.php @@ -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 + * @author Brion Vibber * @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 %1$s URL-shortener service.'), -- 2.39.5