如何获取包含某个单词的youtube vids的视频片段

时间:2016-10-08 00:02:25

标签: php parsing youtube youtube-api youtube-data-api

好的,基于这个视频; https://www.youtube.com/watch?v=7tjfeEAdY0I

我很好奇是否有可能创建一个PHP脚本,它会自动抓取某个YouTube频道上的所有视频(在此示例中为https://www.youtube.com/user/whitehouse/videos),抓取所有视频,查看特定行的成绩单或者单词,然后使用正确的时间戳保存视频,以便将所有这些视频合并为一个。

我知道有一个API可用于获取特定用户的所有YouTube视频网址,并且您可以获得每个视频的成绩单,但扫描所有这些视频资源会非常耗费资源。如果你们对如何创建这样的剧本有任何想法,我很好奇。

1 个答案:

答案 0 :(得分:5)

可以使用 YouTube V3 API 捕获与特定YouTube频道的视频相关的所有信息。
可以找到YouTube API的文档here
可以找到相关的API功能here

从API调用中从json响应中检索视频的脚本的过程将不是资源密集型的,并且可以在代码行中实现,因为json解析是标准过程,并且在大多数语言(包括PHP)上都受支持。

使用PHP包装器,可以通过几行代码实现。

步骤:
首先,发送在频道下列出频道的请求以接收关于由频道ID表示的特定YouTube频道的所有内容细节。相关的代码段是:

$channelsResponse = $service->channels->listChannels('contentDetails', array('forUsername' => $channelId));

第二步是解析每个视频项目,这些视频项目使用for循环方便地完成:

foreach ($channelsResponse['items'] as $channel)  {}

第三步是从当前项目中获取上传列表ID,并使用参数“snippet”向API发送另一个请求。

此时,您将获得json格式的所有内容相关数据,您需要解析并获取所需的信息。


整个代码段为:

$channelsResponse = $service->channels->listChannels('contentDetails', array('forUsername' => $channelId));

$data = [];

foreach ($channelsResponse['items'] as $channel) 
{

  $uploadsListId = $channel['contentDetails']['relatedPlaylists']['uploads'];

  $playlistItemsResponse = $service->playlistItems->listPlaylistItems(
'snippet', array(
                    'playlistId' => $uploadsListId,
                    'maxResults' => 50
                )
   );

  foreach ($playlistItemsResponse['items'] as $playlistItem) 
  {
        $data[] = $playlistItem['snippet'];
  }
 }