【问题标题】:How to use YouTube API V3?如何使用 YouTube API V3?
【发布时间】:2015-07-29 04:57:51
【问题描述】:

我正在尝试弄清楚如何在我的 iOS 应用中使用新的 YouTube API(版本 3),但我不知道该怎么做。 我对此进行了很多研究,但我发现的是旧 API 的所有示例和代码,因此它们无效。 直到现在我才明白,要使用新的 API,你必须在 Google 开发者控制台中创建一个项目(我做到了)......但是他们将你发送到一个带有一些代码的页面,但我真的不明白如何使用它。 link to google api page 我需要知道的是如何从 YouTube 视频的给定 URL 中检索一些信息,我需要的信息是“喜欢”的总数和“视图”的总数......使用 API 2 很简单它......但现在我真的不知道从哪里开始...... 有没有人可以用一些例子和一些代码来解释如何实现这一点? 我很确定很多人会从中受益。

【问题讨论】:

    标签: ios objective-c swift youtube-api youtube-livestreaming-api


    【解决方案1】:

    您不必使用 Google 提供的 iOS 客户端来发出此类请求。

    1. 导航到 API Console 并为您的 iOS 应用程序生成一个新的简单 API 访问密钥。请务必在提供的窗口中输入您的应用程序包标识符。或者,您可以创建一个服务器 API 密钥,用于通过命令行测试基本请求和 curl。

    2. 找到满足您需求的相关端点。要查找有关视频的信息,您需要使用 Videos.list 方法。

    首先,设置您的网址。我将以这个 URL 为例:https://www.youtube.com/watch?v=AKiiekaEHhI

    您将要为part 参数指定一个值。从您的问题来看,您似乎想要传递 snippetcontentDetailsstatistics 值(尽管对于喜欢和视图,您实际上只需要 statistics 值)。

    然后传入您的视频的id(在本例中为AKiiekaEHhI,您最多可以添加50 个逗号分隔的ID)和您的API 密钥。您的网址应如下所示:

    https://www.googleapis.com/youtube/v3/videos?part=contentDetails%2C+snippet%2C+statistics&id=AKiiekaEHhI&key={YOUR_API_KEY}
    

    您也可以在API Explorer 中执行此操作。

    Swift 实现:

    // Set up your URL
    let youtubeApi = "https://www.googleapis.com/youtube/v3/videos?part=contentDetails%2C+snippet%2C+statistics&id=AKiiekaEHhI&key={YOUR_API_KEY}"
    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()
    

    Objective-C 实现:

    (此帖子已被编辑以支持NSURLSession。对于使用NSURLConnection 的实现,请查看编辑历史记录)

    // Set up your URL
    NSString *youtubeApi = @"https://www.googleapis.com/youtube/v3/videos?part=contentDetails%2C+snippet%2C+statistics&id=AKiiekaEHhI&key={YOUR_API_KEY}";
    NSURL *url = [[NSURL alloc] initWithString:youtubeApi];
    
    // Create your request
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    // Send the request asynchronously
    [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *connectionError) {
    
        // Callback, parse the data and check for errors
        if (data && !connectionError) {
            NSError *jsonError;
            NSDictionary *jsonResult = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&jsonError];
    
            if (!jsonError) {
                NSLog(@"Response from YouTube: %@", jsonResult);
            }
        }
    }] resume];
    

    您的日志将如下所示:

    Response from YouTube: {
        etag = "\"NO6QTeg0-3ShswIeqLchQ_mzWJs/AAjIATmVK_8ySsAWwEuNfdZdjW4\"";
        items =     (
                    {
                contentDetails =             {
                    caption = false;
                    definition = hd;
                    dimension = 2d;
                    duration = PT17M30S;
                    licensedContent = 1;
                };
                etag = "\"NO6QTeg0-3ShswIeqLchQ_mzWJs/8v8ee5uPZQa1-ucVdjBdAVXzcZk\"";
                id = AKiiekaEHhI;
                kind = "youtube#video";
                snippet =             {
                    categoryId = 20;
                    channelId = UCkvdZX3SVgfDW8ghtP1L2Ug;
                    channelTitle = "Swordless Link";
                    description = "Follow me on Twitter! http://twitter.com/swordlesslink\n\nFollow me on TwitchTV for live video game streaming! http://twitch.tv/swordlesslink";
                    liveBroadcastContent = none;
                    localized =                 {
                        description = "Follow me on Twitter! http://twitter.com/swordlesslink\n\nFollow me on TwitchTV for live video game streaming! http://twitch.tv/swordlesslink";
                        title = "The Legend of Zelda: Majora's Mask With Glitches - Part 17: Going Against the Flow";
                    };
                    publishedAt = "2015-05-04T10:01:43.000Z";
                    thumbnails =                 {
                        default =                     {
                            height = 90;
                            url = "https://i.ytimg.com/vi/AKiiekaEHhI/default.jpg";
                            width = 120;
                        };
                        high =                     {
                            height = 360;
                            url = "https://i.ytimg.com/vi/AKiiekaEHhI/hqdefault.jpg";
                            width = 480;
                        };
                        medium =                     {
                            height = 180;
                            url = "https://i.ytimg.com/vi/AKiiekaEHhI/mqdefault.jpg";
                            width = 320;
                        };
                        standard =                     {
                            height = 480;
                            url = "https://i.ytimg.com/vi/AKiiekaEHhI/sddefault.jpg";
                            width = 640;
                        };
                    };
                    title = "The Legend of Zelda: Majora's Mask With Glitches - Part 17: Going Against the Flow";
                };
                statistics =             {
                    commentCount = 54;
                    dislikeCount = 3;
                    favoriteCount = 0;
                    likeCount = 265;
                    viewCount = 6356;
                };
            }
        );
        kind = "youtube#videoListResponse";
        pageInfo =     {
            resultsPerPage = 1;
            totalResults = 1;
        };
    } with error: nil
    

    items 键的对象将是您传递给请求的每个视频 ID 的信息数组。

    通过深入研究此响应,您将能够获得所需的信息。例如:

    if let items = jsonResult["items"] as? [AnyObject]? {
        println(items?[0]["statistics"])
    }
    

    将为您提供视频统计信息的字典(您可以在其中获得喜欢的次数和观看次数)。

    {
        commentCount = 54;
        dislikeCount = 3;
        favoriteCount = 0;
        likeCount = 265;
        viewCount = 6356;
    }
    

    同样的方法也可以用于现场活动。

    【讨论】:

    • 嘿!感谢您的回答,我使用 Objective c 和 Xcode 进行编程,明天我将尝试在我的项目中使用您的信息并让您知道...感谢您的帮助
    • @Blue 你真的应该改变你问题上的标签。 iOS != Objective-C,Xcode 同时使用 Objective-C 和 Swift。不过,我已经添加了一个 Objective-C 实现,并要求对您的问题进行编辑以包含 Objective-C 标记。
    • @Blue 有任何更新或问题吗?如果您需要其他帮助,请告诉我。
    • 嗨,Jal,我正在尝试您的代码,但遇到了以下问题:1) 如果我使用 iOS 的 Api 访问密钥,我总是会收到错误 403 或有时是 400...但使用服务器密钥一切正常......所以我想我可以在我的项目中使用它?或者服务器密钥有什么限制? 2)我不能使用代码来获取统计信息:if let items = jsonResult["items"] as?任何对象]? { 等等......它给了我错误......也许这是 swift 的代码?
    • @ThiG。我只是通过阅读文档来了解这些东西。我认为 Google 没有提供任何特定于 Swift 的示例,所以我只是调用他们的 REST API。
    【解决方案2】:

    // 斯威夫特 3

    func search() {
    
    
       let videoType = "video you want to search"
    
        // can use any text
    
    
        var dataArray = [[String: AnyObject]]()
        // store videoid , thumbnial , Title , Description
    
        var apiKey = "_________________"
    
         // create api key from google developer console for youtube
    
    
    
            var urlString = "https://www.googleapis.com/youtube/v3/search?part=snippet&q=\(videoType)&type=video&videoSyndicated=true&chart=mostPopular&maxResults=10&safeSearch=strict&order=relevance&order=viewCount&type=video&relevanceLanguage=en&regionCode=GB&key=\(apiKey)"
    
    
    
            urlString = urlString.addingPercentEncoding( withAllowedCharacters: .urlQueryAllowed)!
            let targetURL = URL(string: urlString)
    
            let config = URLSessionConfiguration.default // Session Configuration
            let session = URLSession(configuration: config)
    
            let task = session.dataTask(with: targetURL!) {
    
                data, response, error in
    
    
                if error != nil {
    
                    print(error!.localizedDescription)
    
    
                    var alert = UIAlertView(title: "alert", message: "No data.", delegate: nil, cancelButtonTitle: "OK")
                    alert.show()
    
    
    
                    return
    
                }
    
                else {
    
    
    
    
                    do {
    
    
    
    
    
                        typealias JSONObject = [String:AnyObject]
    
                        let  json = try JSONSerialization.jsonObject(with: data!, options: []) as! JSONObject
                        let items  = json["items"] as! Array<JSONObject>
    
    
    
                        for i in 0 ..< items.count {
    
                            let snippetDictionary = items[i]["snippet"] as! JSONObject
                            print(snippetDictionary)
                            // Initialize a new dictionary and store the data of interest.
                            var youVideoDict = JSONObject()
    
                            youVideoDict["title"] = snippetDictionary["title"]
                            youVideoDict["channelTitle"] = snippetDictionary["channelTitle"]
                            youVideoDict["thumbnail"] = ((snippetDictionary["thumbnails"] as! JSONObject)["high"] as! JSONObject)["url"]
                            youVideoDict["videoID"] = (items[i]["id"] as! JSONObject)["videoId"]
    
    
    
    
    
    
                            dataArray.append(youVideoDict)
    
    
                           print(dataArray)
    
    
    
                            // video like can get by videoID.
    
    
    
    
                        }
    
    
                    }
    
                    catch {
                        print("json error: \(error)")
                    }
    
                }
            }
            task.resume()
    
    
    
    
    
    
    
    
    
    }
    

    【讨论】:

      【解决方案3】:

      它的使用非常简单。 你可以从 javascript 中使用它,在 npmjs 中有一个简单的模块:https://www.npmjs.com/package/youtube-api-es6

      而且,我在其网站上找到了它的参考:https://www.gyanblog.com/gyan/44-youtube-api-nodejs-usage-example

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-13
        • 1970-01-01
        • 2012-12-09
        • 2016-09-07
        • 2017-07-25
        • 2016-04-14
        • 2016-09-05
        • 2021-07-28
        相关资源
        最近更新 更多