とあるリーマン日記

ガジェット、艦これアーケード、アフェリエイト、アニメ、声優、アフェリエイト関係が話題に中心になると思います。よろしくお願いいたします。

ustream APIを使った配信チェック方法について

クランZaCのサイトをSJCのサイトのように、配信を表示するようにしたいと我がクランマスターが言っておりました。

RubyPHPできる人いないですかー?」
と募集があったため、挙手をしましたが、私よりももっとスーパープログラマーなponytailさんがやってくれることになったみたいです。

まあ、勉強の一環でもあるので、ustream APIについて調べています。
できあがったら、このブログに載せよーかなと思います。

配信が開始されているかどうかをチェックして、開始されているのであれば表示するというようなことをするためには、ustreamのサーバ上のAPIに対してリクエストをすればいいらしく(チェック結果はxmljsonなどで貰える)、言語はなんでもいいみたい。

一番楽な方法は、恐らく、サーバーへのリクエストする部分はPHPにやってもらい、結果をjavascriptで受け取り、javascript内で配信を表示するためのHTML文字列を組み立てて、innerHTMLでサイトに埋め込む方法です。

ただ、PHPを使おうとすると、apache(IISでもいいのだけれど)を入れたり、PHPそのものもインストールしなければなりません。
なんかめんどー。

javascriptだけでできないものだろうか。
javascriptだけであれば、何もインストールする必要がなく、ブラウザがあれば簡単に動作チェックできるんですよね。

というわけで、私は、今回も(前回はjavasciprtで作ったTwitter BOTjavascriptだけでやりたいと思います。

で、さて・・・javascriptでどうやるか・・・。
サーバへのリクエストというと、まず思いつくのがxmlhttprequestオブジェクトです。
非同期でサーバ上のリソースに対しリクエストするために欠かせないオブジェクトです。
ただ、これには欠点があり、違うセグメントのサーバ上のリソースに対しては、アクセスすることができません。

じゃ、どうやるのか?
裏道的なやり方でやるしかないみたいです。

<html>
<head>
<script type="text/javascript" charset="utf-8" id="import">
</script>
<script type="text/javascript">
<!--
// このメソッドで結果を受け取るんだよ。
// 引数resultにJSON形式で結果が入ってくるらしいw
function resultcallback(result)
{
  // <status>の値(配信されてるか?)を調べる。
うんたらかんたら
// htmlを組み立てる。
うんたらかんたら
  // そのhmtlを<div id="usthtml">~</div>に埋め込む。
  document.getElementById("usthtml").innerHTML = usthtml;
}
function search()
{
// リクエストするためのurlの組み立て
  var usturl = "うんたらなんたら";
//受け取る結果の形式を指定するために、パラメータはoutputで良いかどうかは不明w
  usturl += "&output=json&callback=resultcallback";
  // 動的にscriptタグへsrc属性を追加して、Ustream APIを呼び出す。
  // 結果は、Resultcallbackメソッドで、JSON形式で、受け取る。
  document.getElementById('import').src = usturl;
}
-->
</script>
</head>
<body onload="search()">
<!-- ここに配信のhtmlを埋め込むんだよ -->
<div id="usthtml">
</div>
</body>
</html>

これで骨組みはいいはず。w 


まあ、見てもらえれば解かりますが、

<script>要素のsrc属性に、urlを指定して、違うセグメント上のリソース(Ustream API)に、アクセスしてます。
こういう裏技的な方法(というか今では一般的な方法らしい)があるんですね。

裏技的な方法を許可しているのに、何故、xmlhttprequestオブジェクトではできないようにしているのか、未だにその理由が解かりません。


さて・・・問題は・・・。

1devキーにつき、リクエスト回数が5000回/日と決まってるらしいです。
この方法だと、誰かがZaCのサイトに対しアクセスすると、かならず1リクエスト発生します。(Onloadイベントに書いてるしね)
さら、チェックする配信サイトが複数あった場合には、その分だけリクエストが発生することになるので、

1日のリクエスト数=1日のサイトの訪問者数×配信サイト数

となってしまいます。^^;

さて、どうしよっかなぁ。