好的,根据这个视频;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'];
}
}