使用Swift 4.2从Youtube API(V3)获取播放列表项信息

时间:2019-03-21 20:17:03

标签: swift api youtube alamofire

使用Alamofire从Youtube API(V3)提取playlistItems数据时出现问题。我正在尝试解码从Youtube API检索的JSON数据。

我尝试了很多解决方案,但没有一个对我有用。

在debugDescription中,我想访问“ items”,但它说“预期要解码Dictionary,但找到了一个字符串/数据。”,underlyingError:nil))。

JSON结构:

{
  "kind": "youtube#playlistItemListResponse",
  "etag": "\"XpPGQXPnxQJhLgs6enD_n8JR4Qk/4ZEGmjW-kzAxEtAgR_01JLhkDYA\"",
  "nextPageToken": "CAEQAA",
  "pageInfo": {
    "totalResults": 13,
    "resultsPerPage": 1
  },
  "items": [
    {
      "kind": "youtube#playlistItem",
      "etag": "\"XpPGQXPnxQJhLgs6enD_n8JR4Qk/9HMdZkkdHtZumZsfvLpnSx1TBBI\"",
      "id": "UExCQ0YyREFDNkZGQjU3NERFLkE2OTA3QzIwNEI3RjYxMDE=",
      "snippet": {
        "publishedAt": "2013-10-18T14:55:24.000Z",
        "channelId": "UCvceBgMIpKb4zK1ss-Sh90w",
        "title": "Andrew Willis, Skatepark Engineer",
        "description": "Andrew Willis built a skatepark in East London using reclaimed materials left over from the Olympic Games, creating a lasting legacy for the local community of Hackney Wick.",
        "thumbnails": {
          "default": {
            "url": "https://i.ytimg.com/vi/GvgqDSnpRQM/default.jpg",
            "width": 120,
            "height": 90
          },
          "medium": {
            "url": "https://i.ytimg.com/vi/GvgqDSnpRQM/mqdefault.jpg",
            "width": 320,
            "height": 180
          },
          "high": {
            "url": "https://i.ytimg.com/vi/GvgqDSnpRQM/hqdefault.jpg",
            "width": 480,
            "height": 360
          },
          "standard": {
            "url": "https://i.ytimg.com/vi/GvgqDSnpRQM/sddefault.jpg",
            "width": 640,
            "height": 480
          }
        },
        "channelTitle": "Google Search Stories",
        "playlistId": "PLBCF2DAC6FFB574DE",
        "position": 0,
        "resourceId": {
          "kind": "youtube#video",
          "videoId": "GvgqDSnpRQM"
        }
      },
      "contentDetails": {
        "videoId": "GvgqDSnpRQM",
        "videoPublishedAt": "2013-10-18T07:03:29.000Z"
      }
    }
  ]
}

这是我的代码:

struct PageInfo: Decodable {

    var totalResults = 0
    var resultsPerPage = 0
}

struct Snippet: Decodable {

    var publishedAt: PublisedAt
    var channelId = ""
    var position = 0
    var title = ""
    var description = ""
    var thumbnails: Thumbnail
    var channelTitle = ""
    var playListId = ""
    var resourceId: Resource
}

struct ContentDetails: Decodable {

    var videoId = ""
    var videoPublishedAt = ""
}

struct Resource: Decodable {

    var kind = ""
    var videoId = ""

}

struct PublisedAt: Decodable {

    var publishedAt = ""

}
struct ChannelUrl: Decodable {
    var url = ""
    var width = ""
    var height = ""
}

struct Thumbnail: Decodable {

    var medium: ChannelUrl
    var high: ChannelUrl
    var standard: ChannelUrl
    var maxres: ChannelUrl

}

struct Item: Decodable {

    var kind = ""
    var etag = ""
    var id = ""
    var snippet: Snippet
    var contentDetails: ContentDetails
}

struct Result: Decodable {

    var kind = ""
    var etag = ""
    var nextPageToken = ""
    var pageInfo: PageInfo
    var items: [Item]
}

这是我的班级;

class VideoModel: NSObject {


    let API_KEY = "My_API_KEY"
    let UPLOAD_PLAYLIST_ID = "MY_Playlist_ID" 
    let VIDEO_URL = "https://www.googleapis.com/youtube/v3/playlistItems"

    var snippets = [String]()


    func getFeedVideos() {
        Alamofire.request(VIDEO_URL, method: .get, parameters: ["part":"snippet, contentDetails", "playlistId": UPLOAD_PLAYLIST_ID, "key":API_KEY], encoding: URLEncoding.default, headers: nil).responseJSON { (response) in


            guard let data = response.data else {
                NSLog("no data")
                return

            }

            do {
                let decoded = try JSONDecoder().decode(Result.self, from: data)

                debugPrint(decoded)


decoded.items.forEach({ (itemss) in

                    print(itemss.snippet.title)
                    self.snippets.append(itemss.snippet.title)


                })
 } catch {

                debugPrint(error)

            }

0 个答案:

没有答案