tinyurlを使ってpukiwikiのURLを短くするプラグイン

tinyurlのサービスを利用して、pukiwikiのURLを短くするプラグイン
高専カンファレンスWiki用に作ってみた
動作確認はPukiWiki Plus! 1.4.7plus-u2-i18nのみ。たぶん本家でも動くはず。

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

define('TINYURL_API', 'http://tinyurl.com/api-create.php');

function tinyurl_get_tinyurl()
{
	global $script, $vars;
	$_page  = isset($vars['page']) ? $vars['page'] : $defaultpage;
	$tiny_name = CACHE_DIR . encode($_page) . '.tiny';
	if (! file_exists($tiny_name)) {
		$pageurl = $script.'?'.rawurlencode($_page);
		$tinyurl = tinyurl_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://tinyurl.com/,', $tinyurl)) {
			return false;
		}
	}

	return $tinyurl;
}

function tinyurl_call_webapi($url)
{
	$request_url = TINYURL_API.'?url='.urlencode($url);
	$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);

	if(preg_match(',^http://tinyurl.com/,', $res)) {
		return trim($res);
	}
	else return false;
}

?>

上のソースをtinyurl.inc.phpとして保存して、plugin あたりに放り込むと吉。
Pukiwiki Plus!だとextend/pluginがいいかも)

<?php if ($is_page) { ?>
 <a href="<?php echo $_LINK['reload'] ?>"><span class="small"><?php echo $_LINK['reload'] ?></span></a>
<?php   require_once(EXT_PLUGIN_DIR.'tinyurl.inc.php'); $tinyurl = tinyurl_get_tinyurl(); ?>
<?php   if($tinyurl) { ?>
 [<a href="<?php echo htmlspecialchars($tinyurl); ?>"><span class="small">tinyurl</span></a>]
<?php   } ?>
<?php } ?>

あとは、skinのphpを書き換えれば完成。

ライセンスは PHP Licence とします。