TeleManiaトラブル解消

TeleManiaというテレビ・ラジオ番組表を表示するプログラムを、Mac OSXのDashboard Widgetと、iGoogle Gadget向けに作成して公開しています。

昨日iGoogle Gadget向けにver2.0.14をリリースしましたが、これの副作用で、番組表の最後の局や局番組一覧が表示されないという不具合が出ていました。さきほどこれを解消しました。サーバ側の変更ですので、皆様の側に変更はありません。
御迷惑をおかけいたしました。

以下、プログラミングに興味がある方だけ。

無精して確認しなかったので今回の不具合を見逃してしまったのですが、元々のiGoogleの仕様も問題だと思われます。

今回の問題、そもそもiGoogleのAPIの_IG_FetchContentのrefreshIntervalというパラメータが、今までは大丈夫だったのに一昨日の夜(日本時間)くらいから正しく働かなくなった、という問題でした。まぁ確かにこのAPIは将来使われなくなることは分かっていたので出来れば最初から使いたくなかったのですが、その替わりになるAPI、gadgets.io.makeRequestは、TeleManiaを最初にリリースした当時のiGoogleでは動かなかったので使えなかった、という事情もあります。
とにかく、refreshIntervalがちゃんと動かないので、今回試しにgadgets.io.makeRequestを使ったところ、どうやら今はサポートされた模様。でも相変わらずデータはキャッシュされてしまって、一度番組表を読み込むと数時間更新できない。そこでgadgets.io.makeRequestでキャッシュをコントロールする方法を探したところ、Googleの解説ページこちら(リモート コンテンツの処理 - Gadgets API - Google Code)を発見。アクセス先(TeleManiaの場合はサーバ)のURLにキャッシュコントロール用パラメータを付けるという、なんとも妙ちきりんな仕様。
gadgets.io.makeRequestのOpenSocial版ではREFRESH_INTERVALというパラメータが別にあるのですが、試しましたが今のiGoogleでは動かないみたい。仕方ないので、Google様がいう通りにURLにキャッシュコントロール用パラメータをつける形で、ver2.0.14をリリースしました。

本来キャッシュコントロールはGoogleへの指示であって、アクセス先(サーバ)には何の関係もないので、アクセス先にこのパラメータは渡らないんだろうな、とほのかに思って(期待して)いたのですが、お前は甘い、というわけで、しっかりサーバにも渡っていました。まぁ、_IG_FetchContentのときもURLに変なゴミデータがくっついて渡ってきていたので、Googleのコーディングを信じる方がどうかしていた、と反省。
今回はこのキャッシュコントロール用パラメータが、TeleManiaのサーバを誤動作させる原因となりました。

TeleManiaの場合、サーバもクライアントも私が作っているので何とでもなりますが、他人のWebサイトをマッシュアップするようなGadgetの場合、キャッシュコントロール用パラメータが付いたURLでアクセスした時、相手がちゃんとデータを返してくれる保証がありません。
だから、一番いいのはOpenSocial版のようにURLとは関係ないパラメータでキャッシュコントロールを行うこと。それが無理なら、せめてから、キャッシュコントロール用パラメータを削ってからURLをアクセス先へ渡すべきだと思うのですが、Google様。

本当は他にちゃんとした方法があるのかな?見つけられなかったのですが。
キャッシュ期間なんてコントロールする方が悪い、という話は無しね。
スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。