2012-12-27 62 views
9

我已经开始在Android设备上使用v3的YouTube apis,使用java客户端库。我感兴趣的一些视频具有我可以在网络界面上访问的成绩单(如教育视频)。有没有办法使用v3 apis来访问成绩单?如何在youtube-api v3中获得“transcript”

感谢

+0

你在说服务器api还是客户端api? –

回答

6

我可能是错的,但我不认为这是又一个记录的方式通过API的V3让字幕轨道。如果你正在使用的OAuth2认证,但是,您的验证也将是良好的API的V2,所以你可以做一个快速调用该饲料:

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

得到你想要的数据。要检索与API的V2可能字幕轨道ID的列表,您可以访问此饲料:

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

饲料的要求也接受一些可选参数,包括语言,最大结果等有关详细信息,沿与显示字幕轨道列表返回的格式样本,请参阅文档在https://developers.google.com/youtube/2.0/developers_guide_protocol_captions#Retrieve_Caption_Set

+1

感谢您的回复。如何获得[caption trackid]?我无法在v3 apis中看到这个... –

+1

@AliNaddaf - 编辑回复您的评论的答案。 – jlmcdonald

+0

该API将被删除。我该如何更换v3? – Victor

22

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

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。访问此。

+0

你有任何这样的工作的例子?我尝试了几个视频ID以及我能想到的各种语言代码,但都没有得到答复。 – streetlogics

+1

@streetlogics here:http://video.google.com/timedtext?lang=en&v=yJXTXN4xrI8 –

+1

对我来说工作得很好。卓越的工作! –

3

随着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

+0

无法使用id挑选抄本,显示错误404“无法找到字幕轨道,请检查请求id参数的值以确保其正确。” – Abhishek

4

继承人一些代码,我写了抓住任何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); 
    } 
} 
+1

我已经根据您的标题trackas逻辑创建了一个代码,如果您希望我们可以添加更多支持,我已经添加了翻译详细信息。 https://github.com/jamesjara/php-transcript-youtube-api-and-xml-parser/blob/master/example/test.php – jamesjara