Youtube API-从播放列表获取视频的时长

Kok*_*kox 5 php optimization foreach google-api youtube-api

我需要获取YouTube播放列表中所有视频的时长。我知道在进行全部搜索时,API不会向我显示每个视频的时长,但是如果对特定视频进行查询,它确实会向我显示。

通过PHP,我尝试从播放列表中收集所有ID,然后分析每个ID以从视频中获取数据,但是该脚本太慢了,尽管应该强调它工作得很好,是否有任何方法可以对其进行优化? ...

    function youtube_automusic($listas, $api_key, $resultados){
        $nresultados = $resultados;
        $lista_reproduccion_random = $listas;
        $lista_reproduccion = $lista_reproduccion_random[array_rand($lista_reproduccion_random)];
        $url_playlist = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&fields=items(snippet(resourceId(videoId)))&type=video&videoCategoryId=10&maxResults=".$nresultados."&playlistId=".$lista_reproduccion."&key=".$api_key;
        $data = dlPage($url_playlist);
        $data_decode = json_decode($data, true);

        $number_song = 1;
        $respuesta = array();
        foreach ($data_decode as $items){
            foreach ($items as $item){
                $lista_ids =$item['snippet']['resourceId']['videoId'];
                $url_video = "https://www.googleapis.com/youtube/v3/videos?id=".$lista_ids."&part=snippet,contentDetails&fields=items(etag,id,snippet(publishedAt,title,thumbnails(default(url)),tags),contentDetails(duration))&key=".$api_key;
                $data_video = dlPage($url_video);
                $data_video_decode = json_decode($data_video, true);
                foreach ($data_video_decode as $items_videos){
                    foreach ($items_videos as $item_video){
                        $data_final = array(
                            'etag' => $item_video['etag'],
                            'idvideo' => $item_video['id'],
                            'titulovideo' => $item_video['snippet']['title'],
                            'thumbnail' => $item_video['snippet']['thumbnails']['default']['url'],
                            'duracion' => $item_video['contentDetails']['duration'],
                            'videoplay' => $number_song++
                        );
                        array_push($respuesta, $data_final);
                    }
                }   
            }
        }
        return json_encode($respuesta);         
    }
Run Code Online (Sandbox Code Playgroud)

joh*_*h10 8

如果您的代码位于 50 个项目的播放列表中,则需要 51 个 API 调用。

不是对播放列表中的每个视频都进行单个视频请求,而是先获取播放列表中的所有视频 ID,然后一次最多发出 50 个视频请求(ID 参数采用逗号分隔的列表,最多 50 个项目)。

那么一个 50 项的播放列表将只需要 2 个 API 调用。

应该会快很多。