0

私は実際にjsonを使い始めたばかりで、できる限り最善を尽くして学ぼうとしています! 私が作ったこの作品を共有したいのですが、大部分ではないにしても、いくつかの改善が必要だと思います.

twitch.tv REST_API を使用します。そして、ここに私のコードがあります。基本的に、Web ホスティング会社を通じて、毎分これを crontab として実行したいと考えています。次の方法で (エンコードされた) json データを取得できることはわかっています。同じように。そして、それはおそらくより速いですか?しかし、データベースでストリームをオフラインに設定する方法がわかりません。

だから私が求めているのは、これをどのように改善できるかということだと思います。

$result = mysql_query("SELECT streamname FROM streams") or die(mysql_error());

$ids=array(); 
while($row = mysql_fetch_assoc($result))  
{
    $ids[]=$row["streamname"]; 
}

$mycurl = curl_init();
for($i=0;$i<count($ids);$i++)
{

    curl_setopt ($mycurl, CURLOPT_HEADER, 0);
    curl_setopt ($mycurl, CURLOPT_RETURNTRANSFER, 1); 

    $url = "http://api.justin.tv/api/stream/list.json?channel=$ids[$i]";
    curl_setopt ($mycurl, CURLOPT_URL, $url);

    $web_response =  curl_exec($mycurl);
    $result = json_decode($web_response);

    if(empty($result))
    {
        $sql = "UPDATE streams SET online = '0' WHERE streamname = '" . $ids[$i] . "'";
    }
    else
    {
        $sql = "UPDATE streams SET online = '1' WHERE streamname = '" . $ids[$i] . "'";
    }
    mysql_query($sql) or die(mysql_error());
}
4

1 に答える 1

1

どうやら、API の結果に表示されないチャネルをオフラインとしてマークし、逆に、まだ表示されているチャネルをオンラインとしてマークしたいようです。

まず、コメントですでに述べられているメモ。PHP の mysql 拡張機能は使用しないでください。これは推奨されておらず、PHP の将来のバージョンでは削除される予定です。MySQLi をお勧めします: http://php.net/manual/en/book.mysqli.php

現在、各チャンネルのデータを取得していますが、これはもちろんプロセスを遅くし、不必要に justin.tv サーバーに負荷をかけます.

ステータスを照会するときの制限は、ほとんどのサーバーで 8192 バイトである GET 要求の最大サイズです。

ここで、結果をチェックする代わりに、emptyすべてのチャネルがオフラインであると見なし、結果をループして、結果のチャネルをオンラインとして再度マークすることができます。これを配列またはオブジェクト (チャネル リスト用にフェッチしたデータベースの結果である可能性があります) で実行し、1 つのクエリですべてのチャネルを更新します。

于 2012-12-22T10:29:44.233 に答える