我正在尝试使用youtube api下载youtube视频的字幕。但是,我不知道如何实现这一点。 google api youtube api page上的示例实现包含java,python和php中的示例实现,但不是swift。我怎样才能在swift中实现它。谢谢。
我只实现了如何检索常规JSON以获取有关视频的详细信息。但是,根据Youtube api,它应该可以下载字幕。如果我无法下载它们,我该如何检索字幕?
// Set up your URL
let youtubeApi = "https://www.googleapis.com/youtube/v3/videos?part=contentDetails%2C+snippet%2C+statistics&id=dNV7COWz8ME&key=AIzaSyCuBFAb9dJIhK3LH0d4f5yoq5skfDdIC4w"
let url = NSURL(string: youtubeApi)
// Create your request
let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in
do {
if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as? [String : AnyObject] {
print("Response from YouTube: \(jsonResult)")
}
}
catch {
print("json error: \(error)")
}
})
// Start the request
task.resume()
答案 0 :(得分:1)
下载字幕需要三个步骤:
获取标题ID
获取标题列表
获取标题的数据
首先,使用以下网址下载视频的字幕ID 和字幕列表:
https://www.googleapis.com/youtube/v3/captions?part=snippet&videoId=xxx&key=yyy
并解析响应(我们将在我的示例中看到如何)。
然后,使用以下网址获取字幕数据:
https://www.googleapis.com/youtube/v3/captions?id=xxx&tfmt=yyy
其中xxx
是我们刚收到的ID,而yyy
是字母所需的格式,例如" srt"。
它会将字幕作为数据返回。
使用视频的示例:
let youtubeApi = "https://www.googleapis.com/youtube/v3/captions?part=snippet&videoId=dNV7COWz8ME&key=AIzaSyCuBFAb9dJIhK3LH0d4f5yoq5skfDdIC4w"
if let url = NSURL(string: youtubeApi) {
let task = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: { (data, response, error) -> Void in
do {
if let data = data, jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String : AnyObject] {
if let items = jsonResult["items"] as? [[String : AnyObject]],
item = items.first,
id = item["id"] {
print(id)
if let captionsURL = NSURL(string: "https://www.googleapis.com/youtube/v3/captions?id=\(id)&tfmt=srt") {
NSURLSession.sharedSession().dataTaskWithURL(captionsURL, completionHandler: { (cdata, cresponse, cerror) in
if let captionsResponse = cresponse {
print(captionsResponse)
}
if let captionsData = cdata {
print(captionsData)
}
}).resume()
}
}
}
}
catch {
print("json error: \(error)")
}
})
task.resume()
}
另请注意,在此示例中,我只从标题列表(items.first
)中获取第一个标题,但某些视频可能会有更多标题。