Php 如何从Youtube视频中获取所有评论

Php 如何从Youtube视频中获取所有评论,php,json,youtube,youtube-api,youtube-data-api,Php,Json,Youtube,Youtube Api,Youtube Data Api,首先,我看了所有其他标题。它们都过时了。我的意思是,他们正在使用旧的api 我编写了一个代码,列出所有注释及其nextPageToken 您正在使用参数&nextPagetoken=调用commentThreads 要使用的正确参数是&pageToken=最后,我找到了一个做我想做的事情的站点 如果您必须收集视频的所有评论,并随机抽取其中一条用于抽奖等,请使用这些网站-> 这里有一个递归的、简单的函数,用于返回视频中的所有评论 您为什么要手动执行此操作而不使用GooglePHP客户端库?你能

首先,我看了所有其他标题。它们都过时了。我的意思是,他们正在使用旧的api

我编写了一个代码,列出所有注释及其
nextPageToken



您正在使用参数
&nextPagetoken=
调用
commentThreads


要使用的正确参数是
&pageToken=

最后,我找到了一个做我想做的事情的站点

如果您必须收集视频的所有评论,并随机抽取其中一条用于抽奖等,请使用这些网站->


这里有一个递归的、简单的函数,用于返回视频中的所有评论


您为什么要手动执行此操作而不使用GooglePHP客户端库?你能扩展你的答案吗?现在你正在自己编写代码。Google为PHP创建了一个库,它将为您完成所有这些工作。你让自己变得更难了,那么需要的是函数不能满足我的请求,我想得到所有的注释。这个脚本只能查看最常见的注释并回复它们。相同的结果:(代币没问题。但评论是一样的。对于你代码中的视频ID SE0wDh_pILk,总结果是90,比要求的100少。老实说,我不知道YouTube为什么在这种情况下返回nextPageToken,因为只有一页结果。在视频中,page说“有200多条评论。但是在json中只显示大约100条。如果您也想要评论回复,您需要请求part=snippet,repliers,或者如果您不关心编码,则使用json下载评论。
<?php
$url      = "SE0wDh_pILk"; // Youtube video ID
$ytkey    = "IzaSyCaRXmJ9XDC4XucAZCzXx7hisCtYEH0mNs"; //"IzaSyBuu-rnbmPAj1DjR6WmyxGmpmQKz8aTXbw"  Your api key
$nextPage = ""; // Next Page Token for get comments of next Page.
//$i =0; // DO NOT CHANGE


for ($i = 0; $i < 5; $i++) {
    $str = file_get_contents("https://www.googleapis.com/youtube/v3/commentThreads?key=" . "$ytkey" . "&textFormat=plainText&part=snippet&videoId=" . "$url" . "&maxResults=100&nextPagetoken=" . "$nextPage");

    $json = json_decode($str, true); // decode the JSON into an associative array
    //echo '<pre>' . print_r($json, true) . '</pre>'; // Print json data as array structer ..

    echo "$i - " . "Next Page Token : " . $json['nextPageToken']; // Take the next Page Token for get next 100 comment...
    echo "<hr>"; // Divider


    $nextPage = $json['nextPageToken']; // Take token for next query
    // print comments.

    foreach ($json['items'] as $val) { // Loop for list comments...
        $author  = $val['snippet']['topLevelComment']['snippet']['authorDisplayName']; //Get Comment Author Name.
        //$author_url = $val['snippet']['topLevelComment']['snippet']['authorChannelUrl']; //Get Comment Author URL.
        //$author_thumbnail_url = $val['snippet']['topLevelComment']['snippet']['authorProfileImageUrl']; //Get Comment Author Thumbnail URL.
        $comment = $val['snippet']['topLevelComment']['snippet']['textDisplay']; //Get Comment Content.

        echo "<span style='color:red';>" . "$author" . "</span>" . " --> " . "$comment"; // Author and comment
        echo "<hr>"; // Divider
    }

}

echo "Process over. ";
?>
public function getAllComments($videoId,$pageToken=null,$maxResults){
        $url = "https://www.googleapis.com/youtube/v3/commentThreads";

        static $all =[];
        $params =[
            'key' => 'your-key',
            'part' => 'snippet',
            'maxResults' => $maxResults,
            'videoId' => $videoId,
            'pageToken' => $pageToken
        ];

        $call = $url.'?'.http_build_query($params);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $call);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        $data = NULL;
        $data = json_decode($output,true);
        $all[] = $data;
        if(isset($data['nextPageToken'])){
            if($data['nextPageToken'] != NULL ){
                $pageToken = $data['nextPageToken'];
                getAllComments($videoId,$pageToken,$maxResults);
            }
        }
        curl_close($ch);
        return $all;


    }