如何在youtube-api v3中获取"transcript"

Ali*_*daf 16 youtube-api

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

谢谢

Dev*_*ari 33

我有同样的问题......花了一个星期寻找解决方案,直到我点击这个:

/sf/ask/702575751/

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

  • 当手动输入字幕时,这似乎有效,而不是由youtube自动创建. (8认同)
  • 我找不到的解决方案都不允许我检索自动生成的字幕。因此,我想出了一个更复杂的解决方案。如果有人仍然感兴趣,可以在我的GitHub上找到代码:https://github.com/jdepoix/youtube-transcript-api (5认同)
  • 您链接到的帖子不再可用 (3认同)
  • 为我工作得很好.优秀的工作! (2认同)
  • +1信息,但它对我来说也不起作用,我已经上传视频并自动生成字幕“http://video.google.com/timedtext?lang=en&v=h2pWeot3MJY&track=asr”,但没有从视频中获取字幕这似乎不可能。 (2认同)

Ken*_*arp 7

使用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"
   }
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 无法使用ID选取抄本,显示错误404“找不到字幕轨道。请检查请求<code> id </ code>参数的值以确保其正确。” (2认同)
  • `选择您想要的记录` - 这部分不适用于 API 密钥,给出错误 HTTP 401,需要登录。:“此 API 不支持 API 密钥。需要 OAuth2 访问令牌或其他断言主体的身份验证凭据. 请参阅 https://cloud.google.com/docs/authentication” (2认同)

jlm*_*ald 6

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

http://gdata.youtube.com/feeds/api/videos/[VIDEOID]/captiondata/[CAPTION TRACKID]
Run Code Online (Sandbox Code Playgroud)

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

https://gdata.youtube.com/feeds/api/videos/[VIDEOID]/captions
Run Code Online (Sandbox Code Playgroud)

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

  • 上周在 V3 中添加了字幕;这是文档。https://developers.google.com/youtube/v3/docs/captions (2认同)
  • “https://gdata.youtube.com” API 已移至“https://www.googleapis.com/youtube/v3/videos/”,因此请自 2018 年 1 月起使用此功能 (2认同)

kjd*_*n84 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);
    }
}
Run Code Online (Sandbox Code Playgroud)