bit.lyをつかってpukiwikiのURLを短くするプラグイン
前回に引き続き、PukiWikiのURLを短くするシリーズ。
twitterがbit.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; } ?>
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 とします。
twitterCallbackをhackする
jQueryの練習がてら、twitterのブログツールで使われてるtwitterCallbackをhackしてみた。
function twitterCallback3(obj) { var twitters = obj; var username = ""; for (var i=0; i<twitters.length; i++) { username = twitters[i].user.screen_name; $('#twitter_update_list').append( $('<li></li>').html($('<span></span>').html(twitters[i].text)) .append(' ') .append( $('<a></a>').html(relative_time(twitters[i].created_at)) .css('font-size','85%') .attr('href','http://twitter.com/'+username+'/statuses/'+twitters[i].id)) ).fadeIn('fast'); } }
やってることはtwitterCallback2と変わらないけど、なるだけ$()オブジェクトで処理するようにしてみた。
新しくDOM要素を追加するときは
$('<li></li>'); $('<a></a>');
とか書くのがミソ。常識なのかな?
SWXについてちょっと書いてみる
SWX RPC
- SWXを使ってRPCをやるとすごくない?
- サーバ(SWXではgatewayって呼んでる)にパラメータを渡してloadMovie()するだけでレスポンスを取得できる!!
- レスポンスはObjectで取得できるのでデータ構造とかそのままとれる
- 特にリソースが制限されるFlash Liteでパフォーマンスアップに貢献
高専カンファレンス 参加者募集中!
高専カンファレンス参加者絶賛募集中!
チャットの方でちらほら手伝いますよーって人が出てきてるので、逃がさないためにもWikiの方に参加者ページを作ってみた。
ちょっと早すぎたかな?そうでもないよね、あと1ヶ月ぐらいだもんね。
WEB+DB PRESS Vol.44
WEB+DB PRESS Vol.44の案内北。
id:i_ogi掲載号なので買わねば。
id:dankogai氏の「アルファギークに逢ってきた」も買ったがまだ全部読み終わってないー。