How to use YouTube API V3?

前端 未结 3 1083
南旧
南旧 2020-12-04 23:03

I\'m trying to figure out how to use the new YouTube API (Version 3) in my iOS app but I don\'t know how to do it. I did many research about it but what I found is all examp

相关标签:
3条回答
  • 2020-12-04 23:27

    // 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()
    
    
    
    
    
    
    
    
    
    }
    
    0 讨论(0)
  • 2020-12-04 23:32

    You don't have to use the iOS client Google provides to make those kinds of request.

    1. Navigate to the API Console and generate a new Simple API Access key for your iOS application. Be sure to enter your app's bundle identifier in the provided window. Alternatively, you can create a Server API key for testing with basic requests and curl from the command line.

    2. Find the relevant endpoint for your needs. To find information about a video, you'll want to use the Videos.list method.

    First, set up you URL. I will be using this URL as an example: https://www.youtube.com/watch?v=AKiiekaEHhI

    You're going to want to specify a value for the part parameter. From your question, it looks like you're going to want to pass in the snippet, contentDetails, and statistics values (although for likes and views, you really only need the statistics value).

    Then pass in the id of your video (in this case AKiiekaEHhI, you can add up to 50 comma-separated IDs) and your API key. Your URL should look something like this :

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

    You can also do this in the API Explorer.

    Swift implementation:

    // 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 implementation:

    (This post has been edited to support NSURLSession. For an implementation that uses NSURLConnection, check the edit history)

    // 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];
    

    Your log will look something like this:

    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
    

    The object for the items key will be an array of info for each video id you passed in to the request.

    By digging into this response, you will be able to get the information you need. For example:

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

    Will give you a dictionary of the video's statistics (where you can get the number of likes and the number of views).

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

    This same approach can be used with live events.

    0 讨论(0)
  • 2020-12-04 23:40

    Its pretty simple to use. You can use it from javascript, there is a simple module in npmjs: https://www.npmjs.com/package/youtube-api-es6

    And, its reference I found on its web: https://www.gyanblog.com/gyan/44-youtube-api-nodejs-usage-example

    0 讨论(0)
提交回复
热议问题