2005-12-13 [長年日記]
_ MM/Memoとblogmapのexists API (12:37)
そういう遊びが流行っているみたいなんで、お手軽APIを用意してみた。
URL: http://1470.net/api/exists.php パラメータ: url=[URL文字列] 戻り値: [URL]\t[MM/Memoの登録数]\t[blogmapの登録数]\n リクエストメソッド: GETでもPOSTでもOK。
urlパラメータとして、改行(\n)区切りで複数のURLを渡すと、結果も複数行で返ってくる(POSTリクエスト推奨)。
あと、MM/Memoで、あるURLのrelatedページを表示したい場合は、
http://1470.net/mm/related?webpage=[1470.net内のWebページID]
にしなくても、
http://1470.net/mm/related?url=[URL文字列]
でもいけるんで、わざわざWebページIDを取得しなくてもリンクはできます。
_ はてなブックマーク件数取得APIのPHPサンプル (15:18)
<?php
/**
* $Id: HatenaExistsApi.php 107 2005-12-13 06:16:23Z ishinao $
*/
require_once 'PEAR.php';
require_once 'XML/RPC.php'; // PEAR XML_RPC
/**
*
*/
class HatenaExistsApi
{
var $_hatenaExistsApiUrl = 'http://b.hatena.ne.jp/xmlrpc';
var $_hatenaExistsApiMethodName = 'bookmark.getCount';
function call($urls)
{
$parameter = array();
foreach ((array)$urls as $url) {
$parameter[] =& new XML_RPC_Value($url, 'string');
}
$message =& new XML_RPC_Message($this->_hatenaExistsApiMethodName, $parameter);
$urlInfo = parse_url($this->_hatenaExistsApiUrl);
$client =& new XML_RPC_Client(
$urlInfo['path'],
$urlInfo['host'],
isset($urlInfo['port']) ? $urlInfo['port'] : '80'
);
$response = $client->send($message);
if (!$response) {
return new PEAR_Error($client->errstr);
}
if ($response->faultCode()) {
return new PEAR_Error(
'Fault Code: ' . $response->faultCode() .
'Fault Reason: ' . $response->faultString()
);
}
return XML_RPC_Decode($response->value());
}
}
?>
<?php
/**
* $Id: HatenaExistsApiTest.php 107 2005-12-13 06:16:23Z ishinao $
*/
require_once 'HatenaExistsApi.php';
$existsApi =& new HatenaExistsApi();
$testUrls = array(
'http://d.hatena.ne.jp/',
'http://b.hatena.ne.jp/',
'http://www.hatena.ne.jp/',
);
$existsUrlInfo = $existsApi->call($testUrls);
if (PEAR::isError($existsUrlInfo)) {
die($existsUrlInfo->getMessage());
}
foreach ($existsUrlInfo as $url => $count) {
echo "$url => $count\n";
}
?>
#> php HatenaExistsApiTest.php http://www.hatena.ne.jp/ => 157 http://d.hatena.ne.jp/ => 35 http://b.hatena.ne.jp/ => 196
そのうちこれを使って、はてブ登録件数をMM/Memoにも表示しよう。→表示した。
_ はてなブックマークの登録件数を表示 (16:13)
はてなブックマーク件数取得APIを使って、MM/Memoにはてなブックマークの登録件数も表示するようにしました。MM/Memoの登録件数は(テキストでは)表示してないのにね。
既存の実装の関係上、複数URLの情報をまとめて取得できるように書けなかったんで、1件ごと呼び出しているんですが、取得した情報は1時間キャッシュするようにしているんで、トータルではそんなに大きな負荷にはならないんじゃないかと思いつつも、それでも負荷が大きいようでしたら、言っていただければ何とかします。>はてなの方々
B!はブックマーク追加アイコンですよー
修正しましたよー。
ってまだB!のままなんですが…
B!の部分は登録リンク、〜usersが閲覧リンク(ってのがはてブの作法?)にしてますよ。はてブで使われている白紙アイコンは、うちに持ってくると意味的に微妙な気がしたんで使ってません。あそこのアイコンは「ここの情報ははてなから持ってきているんだよ」ということを明示するのが主な目的なんで。
表示する予定は……?
MM/Memoの場合は、
- トータルユーザー数がさほど多くないので、数値で登録数を出してもあまり面白みがない(ので、現状の虫眼鏡アイコン4パターン+そのtitle属性程度の目立たない表示で十分だと思っている)
- MM/Memoの場合は、サーバー負荷によって集計系処理のキャッシュ時間を変更しているんで、場合によってはn users系の情報がものすごく古くなることがある。数値で正確に表示すると、キャッシュとリアルタイムデータの誤差が気になる
なんて理由から、現状の表示方法にしています。今のところ変更する予定はありません。
_ 今日のマリオカート (21:05)
昨日の夕方買った。帰りの電車の中でスーファミ版以来の操作を思い出しそうとしてみたものの、自分1人でやっているとどういう方向に求道するべきなのかがよくわからない。ひたすら最初のコースのタイムアタックだけやり続けて、ようやくスタッフゴーストと対等に走れるようになったけど、ここから先はどのくらいまであるんだろう? タイムアタックの隙間に、遊びで50ccのグランプリをやってみたところ、これはずいぶん難易度低めにしてあるみたいだ。ひどい走りでも一回で全勝できた。えらい人の走りを見てみようとWiFi対戦しようかと思ったら、1分くらい待っても対戦相手が見つからなかったんでやめた。俺はこの手のゲームは猿のようにタイムアタックだけやり続けることが多いんだけど、WiFi対戦だったら対戦をやる気にもなるのかなー。でも1分以上は待ちたくないなー。
_ amazon.rbを使うためにtDiary 2.1.3にアップデートした
amazon.rbを使えるようにしようと、tDiary 2.1.3にアップデート。うちの場合は微妙にいじっているので面倒くさい。
- rss-recent.rbの改造版とmm_footer.rbは古いものを使用
- index.rdfも古いものをコピーして使用
- tb.rbはmisc/plugin/trackback/tb.rbにある
- amazon.rbにタイトルだけ表示用のisbn_textというメソッドを追加していたんだけど、面倒くさくなったんで、isbn_textはisbnのエイリアスにしてしまった。isbnってcommentはデフォルトnullになったのね。
- スパムフィルター系はひとまず何も入れていない。ダメそうだったら各種追加していく。
MM/Memoにはてなブックマークでの登録件数表示機能が追加。これはMM/Memoとはてなブックマークでの反応の違いを比較できて面白い機能だと思う。 さておき、MM/Memoには登録件数の表示は必要ないのかという議論について、自分は必要ないと思う。だって、MM/Memoで情報を探..



負荷的にはまだ大丈夫なんですが、単位時間に 20 〜 30 本ぐらいリクエストがあるので、もうちょい減らしてもらえると助かります。
20 〜 30 はちと大げさでした。1秒に 5〜6 ぐらいですね。
思ったよりもいってますね。リクエストをまとめて投げるように変更してみます。
・最新1000件以内のURLに関しては、1時間ごとに50件ごと束ねてキャッシュを更新
・それ以外のURLに関しては、キャッシュ時間を2時間に延長
してみました。
http://1470.net/api/getHbApiRate.phpに直近100コールのアベレージを表示していますが、今のところ30コール/1分以内程度に収まっているようです。
これで様子を見てみます。
その後、一番キャッシュが効いていないリクエストパターンでは、APIをコールしないように変更したところ、1桁コール/分程度まで下がった模様。
まだ余裕がありそうなんでもうちょっとリクエストパターンを増やしてみた。30call/secくらいまでの範囲で一番利便性が高いあたりを狙って調整してみよう。
↑30call/minの間違い