如何从youtube视频中抓取包含某个单词的视频片段


How to grab video snippets of youtube vids that contain a certain word

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

我很好奇是否有可能创建一个PHP脚本,将自动抓取某个youtube频道上的所有视频(在这个例子中;https://www.youtube.com/user/whitehouse/videos),抓取所有视频,检查某一行或单词的转录,然后用正确的时间戳保存视频,以便有可能将所有这些视频合并为一个。

我知道有一个API可用于获取所有youtube视频url的特定用户,你可以获得每个视频的转录本,但扫描所有这些将是相当资源繁重。我很好奇你们是否对如何创建这样的脚本有任何想法。

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

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

使用PHP包装器,这可以在几行代码中实现。

程序:
首先,发送对channels下的listChannels的请求,以接收有关由频道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'];
  }
 }