YouTube APIを使用して、次のようなパラメータ化されたクエリで動画のコメントを取得しています。
http://gdata.youtube.com/feeds/api/videos/theVideoID/comments?v=2&alt=json
これに伴う問題は、クエリごとに取得できる結果の最大数が50であるということです。すべてのコメントを取得したいと思います。私は現在、これを解決するためにstart-index
とmax-results
パラメータを使用しています。一度に50回の反復を行うのに少し問題がありました。これは、反復の開始インデックスがコメント数を超えることがあり、それを理解できなかったため、一度に1つずつ実行しようとしただけです。一度に50を実行する方が良い場合があるので、それがより良い解決策であるかどうかを知らせてください。今のところ:
コメントの量を取得するためにPHPを使用しています。
<?php
$video_ID = 'gT2HYxOdxUk';
$JSON = file_get_contents("https://gdata.youtube.com/feeds/api/videos/{$video_ID}?v=2&alt=json");
$JSON_Data = json_decode($JSON);
$commentCount = $JSON_Data->{'entry'}->{'gd$comments'}->{'gd$feedLink'}->{'countHint'};
?>
次に、JavaScript / jQuery関数を呼び出して、すべてのコメントを配列にロードします。テストのために、それらをdivに出力します。手始めに、これが私が関数を呼び出す方法です:
<body onLoad="loadComments('<?php echo $commentCount; ?>', '<?php echo $video_ID; ?>')">
次に、実際の機能:
function loadComments(count, videoID) {
for(i = 1; i <= count; i++) {
$.ajax({
url: "http://gdata.youtube.com/feeds/api/videos/" + videoID + "/comments?v=2&alt=json&max-results=1" + "&start-index=" + i,
dataType: "jsonp",
success: function(data){
$.each(data.feed.entry, function(key, val) {
comments.push(val.content.$t);
$('#commentOutput').append(val.content.$t + '<br>'); //Just for testing purposes.
});
}
});
}
}
問題は、それが本当に気難しいということです。このようにforループの終了部分として変数を使用するとcount
、たとえば、211件のコメントのうち45件のようになります。手動で211と入力すると、約195になります。1〜15のように小さい数値を入力すると、ほとんどの場合、すべてが取得されます。20歳以上、それは決して正しくありません。
max-results
およびパラメータを利用して、特定のビデオのすべてのコメントを一貫して取得するために、これを取得する方法を理解する必要がありstart-index
ます。ありがとう!