Я начал использовать v3 apis YouTube на устройстве Android, используя клиентскую библиотеку java. Некоторые видео, которые меня интересуют, имеют транскрипты, которые я могу получить на веб-интерфейсе (например, образовательные видео). Есть ли способ получить доступ к транскриптам, если они есть, используя v3 apis?
Спасибо
Ответ 1
Возможно, я ошибаюсь, но я не думаю, что еще есть документальный способ получить трек заголовка через v3 API. Однако, если вы аутентифицируете с помощью oAuth2, ваша аутентификация также будет полезна для v2 API, поэтому вы можете быстро позвонить в этот канал:
http://gdata.youtube.com/feeds/api/videos/[VIDEOID]/captiondata/[CAPTION TRACKID]
чтобы получить нужные данные. Чтобы получить список возможных идентификаторов треков заголовков с v2 API, вы получаете доступ к этому фиду:
https://gdata.youtube.com/feeds/api/videos/[VIDEOID]/captions
Этот запрос на передачу также принимает некоторые необязательные параметры, включая язык, максимальные результаты и т.д. Для получения дополнительной информации наряду с образцом, который отображает возвращаемый формат списка дорожек субтитров, см. документацию в https://developers.google.com/youtube/2.0/developers_guide_protocol_captions#Retrieve_Caption_Set
Ответ 2
У меня была такая же проблема с этим... и потратила на неделю поиски решения, пока я не ударил это:
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. для доступа к этому.
Ответ 3
Вот код, который я написал, который захватывает все дорожки субтитров из любого видео с YouTube без использования API. Просто подключите URL-адрес видео в переменной $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
С 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 единиц.
Обратите внимание на небольшую разницу в URL-адресах (/caption/
против /caption?
).
Вся прекрасная документация находится здесь:
https://developers.google.com/youtube/v3/docs/captions
Ответ 5
Для тех, кто пытается достичь того же, вы можете попробовать этот API, который я создал -
https://rapidapi.com/yashagarwal/api/subtitles-for-youtube
Вы также можете сделать 100 запросов в день на бесплатном плане. Это позволит вам получать автоматически сгенерированные и загруженные вручную подписи.