如何使用 YouTube API V3?

Posted

技术标签:

【中文标题】如何使用 YouTube API V3?【英文标题】:How to use 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 很简单它......但现在我真的不知道从哪里开始...... 有没有人可以用一些例子和一些代码来解释如何实现这一点? 我很确定很多人会从中受益。

【问题讨论】:

【参考方案1】:

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

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

    找到满足您需求的相关端点。要查找有关视频的信息,您需要使用 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

【讨论】:

以上是关于如何使用 YouTube API V3?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 YouTube Data API v3 更改页面结果

如何使用 php 使用 Youtube Api v3 喜欢 Youtube 视频

如何使用YouTube API V3?

如何使用 YouTube API V3 获取视频观看次数?

如何使用 YouTube API V3?

如何使用新的 YouTube Data API (V3) 获取某个频道的上传视频列表?