2017-08-05 21 views
3

YouTube APIを使用してYouTubeチャンネルのアプリを作成しています。私のビデオにはmaxresサムネイルがありますが、その中にはサムネイルがありません。私が表示しているテーブルビューにビデオが表示され、maxresサムネイルがない場合、アプリケーションがクラッシュします。私はそのビデオのためのmaxresサムネイルがある場合、maxresサムネイルを使用するようにAPIに指示したいが、そうでなければ、高いものを使用する。これは私のコードです。YouTube APIを使用して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) 

        } 

maxresサムネイルを探していないようです。高、中、デフォルトのみを表示します。しかし、私がplaylistItemsを使うときはいつでも、それはmaxresサムネイルを表示します。うーん...

答えて

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 
} 
+0

申し訳ありませんが、動作しませんでした。私は 'videoObj.videoThumbnailUrl =(AnyObjectとしてのアイテム).value(forKeyPath:" snippet.thumbnails.maxres.url ")を!文字列 'を指定したコードで置き換えます。これは、maxresを持つ動画のデフォルトサムネイルを表示しているだけです。 APIがmaxresを呼び出さないようです。端末では、高、中、デフォルトのみが表示されます。しかし、私がplaylistItemsを使用しているときはいつでも、maxresオプションがあります。うーん... –

0

thumbnailsを見るためにこのページを作成しました。URLはシンプルであり、apiは必要ありません。ビデオIDだけです。
「wep」または「jpg」はすべて同じです。プラットフォーム固有。

あなたが決定する必要があるのは、サイズが読み込み時間に影響するため、実際に高解像度画像が必要なことです。また、サムネイルサイズに合わせて画像のサイズを変更する必要があります。

関連する問題