使用Youtube API下载字幕

时间:2016-03-23 13:55:06

标签: ios swift youtube youtube-api

我正在尝试使用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()

1 个答案:

答案 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)中获取第一个标题,但某些视频可能会有更多标题。