私は、Own3d と Twitch からのある種のライブストリームを表示する Web サイトを書いています。own3d および twitch API の xml および json リクエストが遅いという問題があったため、Own3d に連絡しました。彼らはとてもフレンドリーで、これは彼らが答えたものです:
ヤコブさん、こんにちは。
API の応答時間は正常ですが、Web サイトが更新されるたびに情報を要求しているため、発生している可能性がある問題です。
clgaming.net などの他のサイトの大部分が行っていることは、オンラインとオフラインのストリームの情報を約 1 分ごとに収集する cron ジョブを実行し、誰かが Web サイトをロードしたときに高速になるようにローカル データベースに書き込むことです。
よろしく、 own3D.tv サポートチーム
それが私がやったことです、私はMysqlデータベースに情報を書き込むPHPスクリプトを書きました。後でウェブサイトをオンラインにしたときにcronjobします。うまくいきましたが、データベースが大きくなったので、再び問題が発生しました:私は今持っています私のデータベースには 65 のストリーマーがあり、またリクエスト時間の問題があると思います。最初にエラーメッセージが表示されました:
致命的なエラー、最大実行時間の 30 秒を超えました
最大実行時間を上げても問題ないと思いました。( ini_set('max_execution_time', 300);
)
今起こっていることは、リクエストが機能していないというランダムなエラーが発生することです。
例えば:
警告: file_get_contents(http://api.justin.tv/api/stream/list.json?channel=schabs) [function.file-get-contents]: ストリームを開くことができませんでした: HTTP 要求が失敗しました! D:\wamp\www\Lol Streamportal\database_actualize.php 行 20 の HTTP/1.1 400 Bad Request
それはOwn3dとtwitchの両方で発生し、前述したように、どのストリームが機能し、どれが機能しないかはランダムです. clgaming f.exには1,000以上のストリームがあり、cronjobスクリプトでオンラインかどうかを確認する必要があるため、実際にはもっとうまく機能させることができるはずだと考えています。
own3d または twitch に再度連絡する前に、みなさんにお願いしたいと思いました。なぜなら、私は XML や Json の経験がまったくないからです。おそらく、修正方法を知っている人もいれば、そうでないスクリプトを作成する必要があるかもしれません。 PHPではなく、JDBCかそこらで??
コード全体をお見せしたくありませんが、問題の原因となっている関数のコードを提供できます。(本当に必要な場合は、他のコードも投稿できます)
function get_online($stream_id, $typ) {
// Ownd3d Streams
if($typ == 'o') {
$xml = simplexml_load_file('http://api.own3d.tv/liveCheck.php?live_id='.$stream_id);
$isLive = $xml->liveEvent->isLive;
if($isLive == 'true') {
return true;
}
else {
return false;
}
}
// Twitch Streams
else if($typ == 't') {
$api = "http://api.justin.tv/api/stream/list.json?channel=".$stream_id;
$json = file_get_contents($api);
$exist = strpos($json, $stream_id);
if($exist) {
return true;
}
else{
return false;
}
}
else {
return false;
}
}
前述したように、データベースが小さかったときは、まったく問題はありませんでした。しかし、50 を超えるエントリを取得したため、問題が発生し始めました。すべての回答をありがとう。
編集:私はちょうどアイデアを得ました。おそらく、twitch.tv と Own3d は、しばらくの間、送信できるリクエストの量が限られているので、それについて連絡するかもしれません。これを解決するために私ができることの 1 つは、データベースの最初の 30 エントリのリクエストのみを送信し、次の 30 エントリの 2 番目のスクリプトなどを送信する 2 つまたは 3 つの異なるスクリプトを作成することです。