如何在youtube-api v3中获取“transcript”

时间:2012-12-27 20:55:31

标签: youtube-api

我已经开始使用java客户端库在Android设备上使用YouTube api的v3。我感兴趣的一些视频有我可以在网络界面上访问的成绩单(如教育视频)。有没有办法使用v3 apis访问成绩单(如果存在)?

由于

6 个答案:

答案 0 :(得分:31)

我遇到了同样的问题...并花了一周的时间寻找解决方案,直到我点击这个:

https://stackoverflow.com/questions/10036796/how-to-extract-subtitles-from-youtube-videos

只需执行GET请求:http://video.google.com/timedtext?lang= {LANG}& v = {VIDEOID} 你不需要任何api / oauth / etc。访问这个。

答案 1 :(得分:6)

我可能错了,但我认为还没有一种记录方法可以通过API的v3获取字幕轨道。但是,如果您使用oAuth2进行身份验证,那么您的身份验证也适用于API的v2,因此您可以快速调用此Feed:

http://gdata.youtube.com/feeds/api/videos/[VIDEOID]/captiondata/[CAPTION TRACKID]

获取您想要的数据。要使用API​​的v2检索可能的字幕轨道ID列表,请访问此Feed:

https://gdata.youtube.com/feeds/api/videos/[VIDEOID]/captions

该Feed请求还接受一些可选参数,包括语言,最大结果等。有关详细信息以及显示字幕轨道列表的返回格式的示例,请参阅https://developers.google.com/youtube/2.0/developers_guide_protocol_captions#Retrieve_Caption_Set上的文档< / p>

答案 2 :(得分:5)

使用API​​ v3,您可以先使用代码段获取可用的成绩单:

https://www.googleapis.com/youtube/v3/captions?videoId=U1e2VNtEqm4&part=snippet&key=(my_api_key)

{
 "kind": "youtube#captionListResponse",
 "etag": "\"DsOZ7qVJA4mxdTxZeNzis6uE6ck/aGHflncRxq1Uz6m1akhrOLUWUqU\"",
 "items": [
  {
   "kind": "youtube#caption",
   "etag": "\"DsOZ7qVJA4mxdTxZeNzis6uE6ck/IC7rNKkn3SQNdovFwR6fEabUYnY\"",
   "id": "TqXDnlamg84o4bX0q2oaHz4nfWZdyiZMOrcuWsSLyPc=",
   "snippet": {
    "videoId": "U1e2VNtEqm4",
    "lastUpdated": "2016-01-25T21:50:27.142Z",
    "trackKind": "standard",
    "language": "en-GB",
    "name": "",
    "audioTrackType": "unknown",
    "isCC": false,
    "isLarge": false,
    "isEasyReader": false,
    "isDraft": false,
    "isAutoSynced": false,
    "status": "serving"
   }
  },
  {
   "kind": "youtube#caption",
   "etag": "\"DsOZ7qVJA4mxdTxZeNzis6uE6ck/5UP1qPkmq6mzTUaEVnFC8WqjFgU\"",
   "id": "TqXDnlamg84o4bX0q2oaHw_Y53ilUWv6vMFbk0RL3XY=",
   "snippet": {
    "videoId": "U1e2VNtEqm4",
    "lastUpdated": "2016-01-25T21:55:07.481Z",
    "trackKind": "standard",
    "language": "en-US",
    "name": "",
    "audioTrackType": "unknown",
    "isCC": false,
    "isLarge": false,
    "isEasyReader": false,
    "isDraft": false,
    "isAutoSynced": false,
    "status": "serving"
   }
  }
 ]
}

然后选择你想要的成绩单:

https://www.googleapis.com/youtube/v3/captions/id?id=TqXDnlamg84o4bX0q2oaHz4nfWZdyiZMOrcuWsSLyPc=

https://www.googleapis.com/youtube/v3/captions/TqXDnlamg84o4bX0q2oaHz4nfWZdyiZMOrcuWsSLyPc=

此时您需要提供授权密钥。显然一个简单的钥匙是不够的。可能是因为:

  

配额影响:对此方法的调用的配额成本约为200个单位。

请注意网址(/caption//caption?)的细微差别。

所有可爱的文档都在这里: https://developers.google.com/youtube/v3/docs/captions

答案 3 :(得分:5)

这是我编写的一些代码,它可以从任何YouTube视频中获取所有字幕轨道,而无需使用API​​。只需将视频网址插入$video_url变量即可。

// get video id from url
$video_url = 'https://www.youtube.com/watch?v=kYX87kkyubk';
preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+(?=\?)|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\n]+#", $video_url, $matches);

// get video info from id
$video_id = $matches[0];
$video_info = file_get_contents('http://www.youtube.com/get_video_info?&video_id='.$video_id);
parse_str($video_info, $video_info_array);

if (isset($video_info_array['caption_tracks'])) {
    $tracks = explode(',', $video_info_array['caption_tracks']);

    // print info for each track (including url to track content)
    foreach ($tracks as $track) {
        parse_str($track, $output);
        print_r($output);
    }
}

答案 4 :(得分:0)

可能最好的方法是使用 Youtube API 3。我正在尝试,但您需要一个 API 密钥 + OAuth 2.0 用户。一个快速的解决方案是使用 captionsgrabber 并解析返回的 HTML 数据。

使用示例:

https://www.captionsgrabber.com/8302/get-captions.00.php?id=UJTY7ilwSq4

//这里的id是youtube视频id

答案 5 :(得分:-1)

对于试图实现相同目标的任何人,您都可以尝试我创建的这个API-

https://rapidapi.com/yashagarwal/api/subtitles-for-youtube

您还可以每天免费计划上提出100个请求。它将使您能够提取自动生成的字幕和手动上传的字幕。