从Youtube API获取播放列表的状态

时间:2017-03-27 03:18:00

标签: ios swift youtube-api

我正在构建一个基于用户选择的应用程序连接到youtube api并获取某些播放列表的视频列表。  我想安全使用,如果状态不是200,则无法显示下一个屏幕。  我的请求的JSON结果不会返回有关隐私状态以外的状态的任何信息(类似地,如果我获取视频的数据而不是播放列表,我会收到详细信息):

 var urlString = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=500&playlistId=\(playlistId)&key=XXXXX"

      "status":{  
                "privacyStatus":"public"
             }

如何验证播放列表的请求是否有效? 谢谢!

2 个答案:

答案 0 :(得分:0)

我还没有找到一种可靠的方法来测试YT api状态,所以我通常会查找应该存在的调用结果。如果它们不在那里(即空或'0'),则通常是失败的呼叫。

以[totalResults]和/或[title]为例。

答案 1 :(得分:0)

这里有两个部分。

  1. 您需要确定实际的HTTP请求是否成功(即https://googleapis/youtube/v3/[method]?[parameters]的请求)

  2. 您有一个特定的要求,您需要处理没有数据的情况。 API本身的响应不会明确地提供给您,而是需要定义失败的含义。

  3. 考虑到这一点,您可以实施两级检查:

    检查1 - HTTP状态代码

    第一级会检查HTTP状态代码(200 = OK400 = Bad Request等。)

    如果您的API请求返回状态200,您可以继续进行下一级别的检查(请参阅检查2)。但是,如果您的API请求返回状态400,则请求失败,无需进一步检查(或必需)。

    注意:如果您获得400状态,则响应中会有一些JSON,其中包含有关错误的详细信息。

    {
     "error": {
      "errors": [
       {
        "domain": "youtube.parameter",
        "reason": "missingRequiredParameter",
        "message": "No filter selected. Expected one of: id, playlistId",
        "locationType": "parameter",
        "location": ""
       }
      ],
      "code": 400,
      "message": "No filter selected. Expected one of: id, playlistId"
     }
    }
    

    检查2 - 数据

    第二级将检查是否已返回任何结果(因为似乎可能有HTTP状态代码200并且没有结果)。

    这与实际HTTP请求本身的 status 无关。相反,您必须检查响应以查看应用程序所需的数据是否存在。

    以下200响应为例,items数组为空。所以你可以说,即使请求成功,这也是一个失败的情况,并没有显示你的下一个屏幕。

    {
     "kind": "youtube#playlistItemListResponse",
     "etag": "\"[etag would appear here]\"",
     "nextPageToken": "CAAQAA",
     "pageInfo": {
      "totalResults": 199,
      "resultsPerPage": 0
     },
     "items": [
     ]
    }
    

    注意:以上是将每页结果故意设置为0的示例。