Ich versuche herauszufinden, wie ich die neue YouTube-API (Version 3) in meiner iOS-App verwenden kann, aber ich weiß nicht, wie das geht. Ich habe viel darüber recherchiert, aber ich habe alle Beispiele und Codes für ältere APIs gefunden, damit sie nicht gültig sind. Bis jetzt habe ich verstanden, dass Sie für die Verwendung der neuen API ein Projekt in Google Developer Console erstellen müssen (und ich habe es getan) ... aber dann schicken sie Sie auf eine Seite mit etwas Code, aber ich verstehe das wirklich nicht wie man es benutzt Link zur Google-API-Seite Was ich wissen muss, ist, wie man einige Informationen von einer bestimmten URL eines YouTube-Videos abruft. Die Informationen, die ich brauche, sind die Gesamtzahl der "Gefällt mir" und die Gesamtzahl der "Aufrufe" ... Mit API 2 war es sehr einfach zu tun ... aber jetzt weiß ich wirklich nicht wo ich anfangen soll ... Gibt es jemanden, der bitte erklären kann, wie man dies mit einigen Beispielen und etwas Code erreicht? Ich bin mir ziemlich sicher, dass viele Leute davon profitieren werden.
Sie müssen nicht den von Google bereitgestellten iOS-Client verwenden, um solche Anfragen zu stellen.
Navigieren Sie zur API Console und generieren Sie einen neuen Simple API Access-Schlüssel für Ihre iOS-Anwendung. Geben Sie unbedingt die Bundle-ID Ihrer App in das bereitgestellte Fenster ein. Alternativ können Sie einen Server-API-Schlüssel zum Testen mit Basisanforderungen und für das Curl von der Befehlszeile aus erstellen.
Finden Sie den relevanten Endpunkt für Ihre Bedürfnisse. Um Informationen zu einem Video zu erhalten, verwenden Sie die Methode Videos.list .
Richten Sie zuerst Ihre URL ein. Ich werde diese URL als Beispiel verwenden: https://www.youtube.com/watch?v=AKiiekaEHhI
Sie möchten einen Wert für den Parameter part
angeben. Aus Ihrer Frage sieht es so aus, als würden Sie die Werte snippet
, contentDetails
und statistics
übergeben (obwohl Sie für Likes und Views wirklich nur den Wert statistics
benötigen).
Übergeben Sie dann die id
Ihres Videos (in diesem Fall AKiiekaEHhI
können Sie bis zu 50 durch Kommas getrennte IDs hinzufügen) und Ihren API-Schlüssel. Ihre URL sollte ungefähr so aussehen:
https://www.googleapis.com/youtube/v3/videos?part=contentDetails%2C+snippet%2C+statistics&id=AKiiekaEHhI&key={YOUR_API_KEY}
Sie können dies auch im API Explorer tun.
Schnelle Umsetzung:
// 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()
Ziel-C-Implementierung:
(Dieser Beitrag wurde zur Unterstützung von NSURLSession
bearbeitet. Für eine Implementierung, die NSURLConnection
verwendet, überprüfen Sie den Bearbeitungsverlauf.)
// 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];
Ihr Protokoll sieht ungefähr so aus:
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
Das Objekt für den Schlüssel items
ist ein Array mit Informationen für jede Video-ID, die Sie an die Anforderung übergeben haben.
Wenn Sie sich in diese Antwort einarbeiten, erhalten Sie die Informationen, die Sie benötigen. Zum Beispiel:
if let items = jsonResult["items"] as? [AnyObject]? {
println(items?[0]["statistics"])
}
Gibt dir ein Wörterbuch der Statistiken des Videos (wo du die Anzahl der Likes und die Anzahl der Aufrufe bekommst).
{
commentCount = 54;
dislikeCount = 3;
favoriteCount = 0;
likeCount = 265;
viewCount = 6356;
}
Der gleiche Ansatz kann bei Live-Events verwendet werden.
// 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()
}
Es ist ziemlich einfach zu benutzen. Sie können es von Javascript verwenden, es gibt ein einfaches Modul in npmjs: https://www.npmjs.com/package/youtube-api-es6
Und seine Referenz fand ich im Internet: https://www.gyanblog.com/gyan/44-youtube-api-nodejs-usage-example