使用YouTube API显示Maxres或High Thumbnails

时间:2017-08-05 17:34:14

标签: ios swift youtube youtube-api alamofire

我正在使用YouTube API为我的YouTube频道创建应用。我的一些视频有一个最大缩略图,但其中一些不是。如果我在桌面视图中显示了一个视频,并且没有显示最大缩略图,则该应用会崩溃。我想告诉API使用maxres缩略图,如果该视频有一个maxres缩略图,但如果没有,那么只需使用高一个。这是我的代码。

Alamofire.request("https://www.googleapis.com/youtube/v3/search", parameters: ["part":"snippet","maxResults":50,"channelId":CHANNEL_ID,"playlistId":UPLOADS_PLAYLIST_ID,"q":searchText,"type":"video","key":API_KEY], encoding: URLEncoding.default, headers: nil).responseJSON { (response) in

            if let JSON = response.result.value {

                if let dictionary = JSON as? [String: Any] {

                    var arrayOfVideos = [Video]()

                    guard let items = dictionary["items"] as? NSArray else { return }

                    for items in dictionary["items"] as! NSArray {
                        print("//Printing Video\n\(items)")
                        //  Create video objects off of the JSON response

                        let videoObj = Video()
                        videoObj.videoID = (items as AnyObject).value(forKeyPath: "id.videoId") as! String
                        videoObj.videoTitle = (items as AnyObject).value(forKeyPath: "snippet.title") as! String
                        videoObj.videoDescription = (items as AnyObject).value(forKeyPath: "snippet.description") as! String
                        videoObj.videoThumbnailUrl = (items as AnyObject).value(forKeyPath: "snippet.thumbnails.maxres.url") as! String // Here I need to tell the API to use the maxres thumbnail if there is one.

                        arrayOfVideos.append(videoObj)

                    }

似乎API甚至没有寻找maxres缩略图。它只显示高,中和默认值。但是,每当我使用playlistItems时,它确实显示了maxres缩略图。 Hmmmm ...

2 个答案:

答案 0 :(得分:1)

您应该从不隐式地展开基于网络的数据。始终使用?代替!

对于缩略图,您应该检查是否存在maxres缩略图,如果它不可用,请使用默认缩略图。

if let thumbnailUrl = (items as AnyObject).value(forKeyPath: "snippet.thumbnails.maxres.url") as? String ?? (items as AnyObject).value(forKeyPath: "snippet.thumbnails.default.url") as? String {
    videoObj.videoThumbnailUrl = thumbnailUrl
}

答案 1 :(得分:0)

我创建此页面以查看thumbnails,因为他们的网址很简单,不需要api。只是他们的视频ID 关于" wep"或者" jpg",都是一样的。只是平台特定。

您需要决定的是,您确实需要高分辨率图像,因为尺寸会影响加载时间。您还需要调整图像大小以适合缩略图大小。