bit.lyをつかってpukiwikiのURLを短くするプラグイン

前回に引き続き、PukiWikiのURLを短くするシリーズ。
twitterbit.lyを採用したらしいので、勢いで作ってみました。
json_decodeを使用しているので、jsonエクステンション必須です。

使い方は、まず、bit.lyのサイトに行ってアカウントを作ってください。
同時にAPI Keyが発行されます。

取得したアカウントとAPI Keyをそれぞれ BITLY_API_LOGIN と BITLY_API_KEY に設定します。

あとは、tinyurl と同様にテンプレートを書き換えれば完了です。

高専カンファレンスWikiですでに動作中。

ライセンスは PHP Licence です。

<?php
/**
 * bitlyプラグイン
 */

// --- アカウントの設定 ---
define('BITLY_API_LOGIN', '');
define('BITLY_API_KEY', '');

// --- API の設定 ---
define('BITLY_API_URL', 'http://api.bit.ly/shorten');
define('BITLY_API_VER', '2.0.1');

function bitly_get_tinyurl()
{
	global $script, $vars;
	$_page  = isset($vars['page']) ? $vars['page'] : $defaultpage;
	$tiny_name = CACHE_DIR . encode($_page) . '.bitly';
	$data_name = DATA_DIR . encode($_page) . '.txt';
	if (! file_exists($data_name)) {
		return false;
	}
	if (! file_exists($tiny_name)) {
		$pageurl = $script.'?'.rawurlencode($_page);
		$tinyurl = bitly_call_webapi($pageurl);
		if($tinyurl) {
			$fp = fopen($tiny_name, 'w')
				 or die_message('cannot write ' . htmlspecialchars($tiny_name));
			fputs($fp, $tinyurl);
			fclose($fp);
		}
		else {
			return false;
		}
	}
	else {
		$tinyurl = file_get_contents($tiny_name);
		if(!preg_match(',^http://bit.ly/,', $tinyurl)) {
			return false;
		}
	}

	return $tinyurl;
}

function bitly_call_webapi($url)
{
	$params = array(
		'version'	=> BITLY_API_VER,
		'longUrl'	=> $url,
		'login'		=> BITLY_API_LOGIN,
		'apiKey'	=> BITLY_API_KEY,
	);
	$request_url = BITLY_API_URL.'?'.http_build_query($params);
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $request_url);
	curl_setopt($ch, CURLOPT_TIMEOUT, 5);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

	$res = curl_exec($ch);
	curl_close($ch);

	$json = json_decode($res, true);
	if($json && isset($json['results'][$url]['shortUrl'])) {
		return trim($json['results'][$url]['shortUrl']);
	}
	else return false;
}
?>