We are no longer offering accounts on this server. Consider https://gitlab.freedesktop.org/ as a place to host projects.

Commit 51254ed8 authored by Brion Vibber's avatar Brion Vibber

Pull up the guts of my fixed bit.ly plugin from an old work branch (that had...

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.
parent 458f93bd
......@@ -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.'),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment