YouTube API v3 未检索频道的视频

YouTube API v3 not retrieving videos for a channel

好的,所以我使用以下 php 代码尝试让 youtube 进入 return 用户视频列表,但是,他们的 "items" 显示为空.

$apiKey         =   "MY-API-KEY";
$channel_name   =   "UCSzDPMGFGxDgM4YtNM4arTA";
$count          =   1;

$apiv3          =   json_decode(file_get_contents("https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=".$channel_name."&key=".$apiKey));
foreach($apiv3->items as $item):
    $uploads = $item->contentDetails->relatedPlaylists->uploads;
endforeach;

$youtube        =   json_decode(file_get_contents("https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&contentDetails&maxResults=".$count."&playlistId=".$uploads."&key=".$apiKey));       

return $youtube;

这就是return编辑的内容:

{
 "kind": "youtube#channelListResponse",
 "etag": "\"tbWC5XrSXxe1WOAx6MK9z4hHSU8/3cxjRXf86G9z5Bg7rup3QfCgrxM\"",
 "pageInfo": {
  "totalResults": 0,
  "resultsPerPage": 5
 },
 "items": [
 ]
}

然而在他们的页面上,他们上传了视频。我如何让它工作?我在另一个用户身上使用了完全相同的代码,它工作正常。

您可以改用视频搜索 API。使用带有 channelId 参数的 list 方法。抓住这个 URL:

https://www.googleapis.com/youtube/v3/search?
part=snippet&channelId={THE_CHANNEL_ID}&key={YOUR_API_KEY}

响应看起来像这样(从 尝试一下 部分复制):

{
 "kind": "youtube#searchListResponse",
 "etag": "\"tbWC5XrSXxe1WOAx6MK9z4hHSU8/28IrYJUKXsyiTkjfJRPDVrAyaLo\"",
 "nextPageToken": "CAUQAA",
 "pageInfo": {
  "totalResults": 9,
  "resultsPerPage": 5
 },
 "items": [
  {
   "kind": "youtube#searchResult",
   "etag": "\"tbWC5XrSXxe1WOAx6MK9z4hHSU8/u8AoS8t4dI9bLdKn4n1eMb9XQeY\"",
   "id": {
    "kind": "youtube#channel",
    "channelId": "UCSzDPMGFGxDgM4YtNM4arTA"
   },
   "snippet": {
    "publishedAt": "2013-03-02T00:26:17.000Z",
    "channelId": "UCSzDPMGFGxDgM4YtNM4arTA",
    "title": "Iron Hulk",
    "description": "",
    "thumbnails": {
     "default": {
      "url": "https://lh4.googleusercontent.com/-JeG2zOT2Eu8/AAAAAAAAAAI/AAAAAAAAAAA/9XlpZULoZ8E/photo.jpg"
     },
     "medium": {
      "url": "https://lh4.googleusercontent.com/-JeG2zOT2Eu8/AAAAAAAAAAI/AAAAAAAAAAA/9XlpZULoZ8E/photo.jpg"
     },
     "high": {
      "url": "https://lh4.googleusercontent.com/-JeG2zOT2Eu8/AAAAAAAAAAI/AAAAAAAAAAA/9XlpZULoZ8E/photo.jpg"
     }
    },
    "channelTitle": "",
    "liveBroadcastContent": "none"
   }
  },
  {
   "kind": "youtube#searchResult",
   "etag": "\"tbWC5XrSXxe1WOAx6MK9z4hHSU8/sfhJOiYZgSFY3vR7MTCQqT5gR8c\"",
   "id": {
    "kind": "youtube#video",
    "videoId": "pqJGSSbII6E"
   },
   "snippet": {
    "publishedAt": "2014-01-02T06:00:06.000Z",
    "channelId": "UCSzDPMGFGxDgM4YtNM4arTA",
    "title": "Iron Hulk Fitness Group Sessions Compilation Jan 2014",
    "description": "A compilation of a few of the group sessions conducted in late 2013. Visit our facebook page for more information.",
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/pqJGSSbII6E/default.jpg"
     },
     "medium": {
      "url": "https://i.ytimg.com/vi/pqJGSSbII6E/mqdefault.jpg"
     },
     "high": {
      "url": "https://i.ytimg.com/vi/pqJGSSbII6E/hqdefault.jpg"
     }
    },
    "channelTitle": "",
    "liveBroadcastContent": "none"
   }
  },
  {
   "kind": "youtube#searchResult",
   "etag": "\"tbWC5XrSXxe1WOAx6MK9z4hHSU8/r91n5PeMndZnvf10n6T_L2dJYGg\"",
   "id": {
    "kind": "youtube#video",
    "videoId": "I8bpjJqTnRI"
   },
   "snippet": {
    "publishedAt": "2013-10-27T05:55:13.000Z",
    "channelId": "UCSzDPMGFGxDgM4YtNM4arTA",
    "title": "Iron Hulk Advanced plyometric bodyweight circuit 27/10/13",
    "description": "This weeks advanced class circuit focusing on plyometric and explosive movements 3 rounds for time: 12 x plyometric alternating hands push ups 8 x Alternating ...",
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/I8bpjJqTnRI/default.jpg"
     },
     "medium": {
      "url": "https://i.ytimg.com/vi/I8bpjJqTnRI/mqdefault.jpg"
     },
     "high": {
      "url": "https://i.ytimg.com/vi/I8bpjJqTnRI/hqdefault.jpg"
     }
    },
    "channelTitle": "",
    "liveBroadcastContent": "none"
   }
  },
  {
   "kind": "youtube#searchResult",
   "etag": "\"tbWC5XrSXxe1WOAx6MK9z4hHSU8/xrF0LOpaWmqPl4E2isJ7r4VL2Ds\"",
   "id": {
    "kind": "youtube#video",
    "videoId": "Y3bK24QHlxk"
   },
   "snippet": {
    "publishedAt": "2014-11-15T19:07:35.000Z",
    "channelId": "UCSzDPMGFGxDgM4YtNM4arTA",
    "title": "PORC Nov 2014",
    "description": "Iron Hulk's first PORC event. November 15th 2014.",
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/Y3bK24QHlxk/default.jpg"
     },
     "medium": {
      "url": "https://i.ytimg.com/vi/Y3bK24QHlxk/mqdefault.jpg"
     },
     "high": {
      "url": "https://i.ytimg.com/vi/Y3bK24QHlxk/hqdefault.jpg"
     }
    },
    "channelTitle": "",
    "liveBroadcastContent": "none"
   }
  },
  {
   "kind": "youtube#searchResult",
   "etag": "\"tbWC5XrSXxe1WOAx6MK9z4hHSU8/WQudUOFtaQNk4DyhMg7-Wx2tTAE\"",
   "id": {
    "kind": "youtube#video",
    "videoId": "TAgZL5OzVsU"
   },
   "snippet": {
    "publishedAt": "2015-05-05T21:12:20.000Z",
    "channelId": "UCSzDPMGFGxDgM4YtNM4arTA",
    "title": "IHF 2015",
    "description": "What we've been up to in the first half of 2015.",
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/TAgZL5OzVsU/default.jpg"
     },
     "medium": {
      "url": "https://i.ytimg.com/vi/TAgZL5OzVsU/mqdefault.jpg"
     },
     "high": {
      "url": "https://i.ytimg.com/vi/TAgZL5OzVsU/hqdefault.jpg"
     }
    },
    "channelTitle": "",
    "liveBroadcastContent": "none"
   }
  }
 ]
}

我认为部分属性应该用逗号分隔。

$youtube = json_decode(file_get_contents("https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,contentDetails&maxResults...));

@SalmanA 的答案使用了有效的搜索端点;然而,如果你想使用上传播放列表,它也可以通过一些调整来工作(刚刚用 API 浏览器确认)。首先,正如@SauminiNavaratnam 提到的,您的 "part" 参数需要以逗号分隔。其次,获取频道详情时,不能通过forUsername参数传入频道ID。您要么需要使用 forUsername 参数传入 user name,要么将频道 ID 作为 id 参数传入(请注意,您遇到的问题是 channelList 响应是空,因此没有任何内容可以传递给 playlistItems 调用)。如果您进行了这些更改,您将获得正确的上传 ID,然后您的 playlistItems 调用将返回与搜索调用相同的结果。

但是,总而言之,您可能更喜欢搜索端点,因为它能够按日期、受欢迎程度等对结果进行排序。