0

各ビデオ チャネルの「ビュー カウント」を取得する必要があり、このライブラリを使用しています 。これは私のコードです

わかりましたコードは正常に動作し、各ビデオのビュー カウントを出力します。ただし、ビュー カウントを出力せずに他のビデオでこれらの警告が表示された場合を除きます。

PHP エラーが発生しました。重大度:警告メッセージ:

  • simplexml_load_string() [function.simplexml-load-string]: エンティティ: 547 行目: パーサー エラー: 属性構成エラー
  • メッセージ: simplexml_load_string() [function.simplexml-load-string]: outube_gdata'/>
  • メッセージ: simplexml_load_string() [function.simplexml-load-string]: ^
  • メッセージ: simplexml_load_string() [function.simplexml-load-string]: エンティティ: 行 547: パーサー エラー: 開始タグ リンク行 547 の終わりが見つかりませんでした
  • メッセージ: simplexml_load_string() [function.simplexml-load-string]: outube_gdata'/>

この警告メッセージを発生させずに、この多数のビデオとチャネルをどのように扱うことができますか。時間内に失われることはありません。ビデオの少ない 1 つのチャネルで同じコードを試しても、エラーは発生しません。

$channels=array('google','apple','mac','xyz','abc','test');
for ($j=0; $j<count($channels) $j++)
{

$JSON = file_get_contents("https://gdata.youtube.com/feeds/api/users/".$channels[$j]."/uploads?v=2&alt=jsonc&max-results=0");
$JSON_Data = json_decode($JSON);
    $total_videos = $JSON_Data->{'data'}->{'totalItems'};

    for($i=1; $i<=$total_videos; )
    {
        $this->get_userfeed($channels[$j],$maxresult=20,$start=$i);
        $i+=20;
    }

}

public function get_userfeed($ch_id,$maxresult=10,$start=0,$do=null)
{

    $output = $this->youtube->getUserUploads($ch_id, array('max-results'=>$maxresult,'start-index'=>$start));
    $xml = simplexml_load_string($output);

    // single entry for testing
    foreach($xml->entry as $entry)
    {
    foreach($entry->id as $key=>$val)
    {
    $id = explode('videos/', (string)$val);

    $JSON = file_get_contents("https://gdata.youtube.com/feeds/api/videos/".$id[1]."?v=2&alt=json");
    $JSON_Data = json_decode($JSON);
    $v_count = $JSON_Data->{'entry'}->{'yt$statistics'}->{'viewCount'};
    if($v_count == NULL) $v_count =0;

    echo $v_count;
    // store the v_count into database

    }
    }

}
4

1 に答える 1

0

あなたはいくつか間違ったことをしています。

まず、API の呼び出し回数を最小限に抑えたい場合はmax-results=50、API がサポートする最大値である を設定する必要があります。

第 2 に、各動画の統計情報を取得するために を個別に呼び出している理由がわかりません。その情報は、フィードhttp://.../videos/VIDEO_IDから取得している動画エントリの一部として既に返されているためです。http://.../users/USER_ID/uploadsそのフィードから返された値を保存するだけで、各ビデオを取得するために追加の呼び出しを行う必要がなくなります。

最後に、根本的な問題は、ほぼ確実にクォータ エラーが発生していることです。詳細については、http://apiblog.youtube.com/2010/02/best-practices-for-avoiding-quota.htmlを参照してください。

ここで説明した手順のいずれかを実行すると、作成するリクエストの総数が減り、クォータの問題を回避できる可能性がありますが、とにかくクォータ システムに慣れておく必要があります。

于 2012-12-18T19:00:51.490 に答える