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.

This commit is contained in:
Brion Vibber 2010-10-07 12:03:33 -07:00
parent 458f93bddd
commit 51254ed85e

View File

@ -2,7 +2,7 @@
/** /**
* StatusNet, the distributed open-source microblogging tool * 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 * PHP version 5
* *
@ -22,7 +22,9 @@
* @category Plugin * @category Plugin
* @package StatusNet * @package StatusNet
* @author Craig Andrews <candrews@integralblue.com> * @author Craig Andrews <candrews@integralblue.com>
* @author Brion Vibber <brion@status.net>
* @copyright 2009 Free Software Foundation, Inc http://www.fsf.org * @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 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/ * @link http://status.net/
*/ */
@ -35,26 +37,98 @@ require_once INSTALLDIR.'/plugins/UrlShortener/UrlShortenerPlugin.php';
class BitlyUrlPlugin extends UrlShortenerPlugin 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(){ function onInitializePlugin(){
parent::onInitializePlugin(); parent::onInitializePlugin();
if(!isset($this->serviceUrl)){ 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) { protected function shorten($url) {
$response = $this->http_get($url); $response = $this->query($url);
if(!$response) return; if ($this->isOk($url, $response)) {
return current(json_decode($response)->results)->hashUrl; 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) function onPluginVersion(&$versions)
{ {
$versions[] = array('name' => sprintf('BitlyUrl (%s)', $this->shortenerName), $versions[] = array('name' => sprintf('BitlyUrl (%s)', $this->shortenerName),
'version' => STATUSNET_VERSION, 'version' => STATUSNET_VERSION,
'author' => 'Craig Andrews', 'author' => 'Craig Andrews, Brion Vibber',
'homepage' => 'http://status.net/wiki/Plugin:BitlyUrl', 'homepage' => 'http://status.net/wiki/Plugin:BitlyUrl',
'rawdescription' => 'rawdescription' =>
sprintf(_m('Uses <a href="http://%1$s/">%1$s</a> URL-shortener service.'), sprintf(_m('Uses <a href="http://%1$s/">%1$s</a> URL-shortener service.'),