3月9日にTwitterがcrossdomain.xmlを変更してFlashからのメッセージ取得を禁止しちゃったので、3月10日からサーバ側でTwitter APIを使ってメッセージを取得するようにしました(このあたりの話はこちらを参照)。
しかし、1日に10万回位Twitter Balloonからのアクセスがあるのでサーバへの負荷が高く、このままだと制限をかけるというお達しがサーバを借りているDreamHostから来てしまいました。
何とか負荷を下げないとならなくなったので、Twitterのメッセージをキャッシュするようにしました。そのため、Twitterのメッセージを更新してからTwitter Balloonに反映されるまでに最大1時間くらいかかることがあります。どうしてもすぐに反映させたい場合は、自分のTwitter Balloonを表示させてReloadボタン(真ん中のボタン)をクリックして下さい。
技術的な話をすると、CGIでキャッシュを読み込む方式ではCGIの起動回数は変わらないので、404 Error proxy cache方式(勝手に命名)にしました。
例えば、Twitter Balloonがkorelabのメッセージを取得する場合、Twitter Balloonがkorelab.xmlを取得しようとします。でもkorelab.xmlなんていうファイルは存在しない。
そうすると404 Not Foundエラーが発生します。
404 Not Foundエラーが発生した場合に、通常エラーページが表示されるのですが、このエラーページは自分で作った独自のエラーページにすることができます。そして、この独自のエラーページの替わりにCGIを起動することもできるので、ここでCGIを起動します。
CGIでは元の要求を環境変数REQUEST_URIを通して知ることができるので、元の要求であるkorelab.xmlからID korelabを取り出し、Twitter APIでメッセージXMLを取得してそのまま応答します。
このときに応答したメッセージXMLをkorelab.xmlとしてファイルに保存します。
すると次からTwitter Balloonがkorelabのメッセージを取得する際には、korelab.xmlファイルが存在するのでCGIを起動することなく静的なXMLファイルとしてメッセージを取得できるという訳です。
キャッシュファイルはcronで1時間おきに削除していますので、メッセージを更新してから約1時間以内には最新のメッセージが表示されます。
Archive for the ‘開発’ Category
Twitter Balloonの修正
Tuesday, April 22nd, 2008携帯向け多言語翻訳サービス
Monday, March 31st, 2008Google AJAX Language APIがなかなか面白いので、あれやこれやしてJavaScriptを使わないようにして携帯向けの多言語翻訳サービスを作ってみました。
多言語翻訳サービス http://tr.korelab.com/
入力された文章を指定の言語(日本語、英語、中国語(繁体字)、中国語(簡体字)、オランダ語、フランス語、ドイツ語、ギリシャ語、イタリア語、韓国語、ポルトガル語、ロシア語、スペイン語)に翻訳します。
翻訳結果をそのままメールすることもできるようになっています。
とはいえ、AUのW41HとiモードHTMLシミュレータIIでしか検証していないので他の携帯でどの程度使えるかは不明です。
韓国語やアラビア語は携帯にフォントがないので表示できませんでした。
ギリシャ語やロシア語は意外といけます。
Google AJAX Language APIのエラーメッセージ
Wednesday, March 26th, 2008Google AJAX Language APIを使ってみるにあたって、いろんなサイトのサンプルコードを参照させてもらいましたが、エラーメッセージの取得方法がどれも間違っているみたい。
Google Codeのサンプルにはエラーメッセージを取得しているものは見当たらなかった。
サンプルコードはこんな感じ
var source = document.getElementById("source").value;
google.language.translate(source,"ja","en",
function(result) {
if (result.error) {
alert("Error:" + result.message);
return;
}
document.getElementById("result").value = result.translation;
});
このコードだとエラーが発生すると”Error:undefined”って表示されてしまいます。
間違っているのは
alert("Error:" + result.message);
の個所で、以下のようにしなければならない。
alert("Error:" + result.error.message);
Google AJAX Language APIを使って多国語翻訳サービス
Tuesday, March 25th, 2008Google AJAX Language APIを使って多国語翻訳サービスを作ってみました。http://wp.korelab.com/translate.html
こういうサービスがありそうでなかったので(あるかな)。サービスというほどのものでもないが。
英語を中間言語として多国語間の翻訳が可能です。
対応言語は、日本語、英語、中国語(繁体字)、中国語(簡体字)、オランダ語、フランス語、ドイツ語、ギリシャ語、イタリア語、韓国語、ポルトガル語、ロシア語、スペイン語です。
Google Static Maps APIを使ったアプリを作ってみた
Sunday, March 16th, 2008Google Static Maps APIを見てすぐにOpenLaszloで何か作ってみたいと思った。
Google Static Maps APIのよいところは、GIFのイメージが直接取得できるので、JavaScriptが不要なのはもちろん、クロスサイトドメイン制約に引っかからないこと。
逆にあまりよくないところは、APIキーを取得しないとならないし、その上Google Static Maps APIで作ったイメージを公開するとAPIキーも公開されちゃうところ。
APIキーは、何度でも取得できるのであまり大事にするほどのものでもなさそうだけど、ちょっと気持ち悪い。
とりあえず動くものができたのでkorelab Map α版としました。
しかし、誤算が2つあった。
まず1つ目は、携帯で使うことを想定して作っていたのに携帯で使えそうにないというところ。
OpenLaszloではFlash7形式とFlash8形式のswfファイルが作成されるのですが、携帯のFlash Lite2はFlash7相当なのでFlash7形式で動くものにしないとならない(はず)。しかし、GIFファイルがNativeサポートされているのはFlash8形式の方だけで、Flash7形式では肝心の地図が表示されない。
実際のところ、Flash Lite2対応の携帯を持っていないので試していません。誰か試してみてコメントくれると非常にうれしい。
お試し用のURLは以下の2つ。
SWFの直指定 http://wp.korelab.com/korelab_map.swf
OBJECTタグで指定 http://wp.korelab.com/korelab-map/
もう1つの誤算は、地名などから緯度経度を取得する際に使うGoogle Maps APIのGeocoding Serviceが使えなかったところ。
クロスドメイン制約で使えない。
予測できたはずのことなのですが、Google Static Maps APIがクロスドメイン制約なしで使えることで、なんとなくGeocodingサービスも使えるような気がしてしまった。
そこでここの情報(非公式だが使えるYahoo! Japan Geocoder API)を元にYahoo Japanの情報を使わせてもらうことにしました。
しかし、それでは海外に行けないので、他のGeocoding APIを探していたらGetNamesというのを見つけました。ここの情報量はすごい。800万件を超える地図情報を持っているらしい。しかも日本語の地名も通る。
korelab Map α版では、地名等を入力してSearchボタンが押されると、まずGeoNamesで探して、見つからなかったらYahoo Japanで探すようになっています。
候補が複数見つかった場合には、最初に見つかったものをそのまま表示しています。
このユーザインタフェースをどうするかが今後の課題。