Итак, я использовал следующий php-код, чтобы заставить youtube возвращать список пользователей видео, однако их «элементы» выглядят пустыми.
$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;
И вот что возвращается:
{
"kind": "youtube#channelListResponse",
"etag": "\"tbWC5XrSXxe1WOAx6MK9z4hHSU8/3cxjRXf86G9z5Bg7rup3QfCgrxM\"",
"pageInfo": {
"totalResults": 0,
"resultsPerPage": 5
},
"items": [
]
}
Тем не менее, на своей странице они загрузили видео. Как мне заставить это работать? Я использовал точно такой же код на другом пользователе, и он отлично работает.
Вместо этого вы можете использовать API поиска видео. Использовать list
метод с channelId
параметр. Захватите этот 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 имеет ответ, который использует конечную точку поиска, которая будет работать; однако, если вы хотите использовать плейлист Uploads, он также будет работать с парой настроек (только что подтвердил это с помощью проводника API). Прежде всего, как упомянул @SauminiNavaratnam, ваш параметр «part» должен быть разделен запятой. Во-вторых, когда вы извлекаете информацию о канале, вы не можете передать идентификатор канала с помощью параметра forUsername. Вам либо нужно пройти в имя пользователя с параметром forUsername или вместо этого передайте идентификатор канала в качестве параметра id (обратите внимание, что проблема, которую вы получаете, заключается в том, что ответ channelList пуст, и, следовательно, нечего передавать вызову playlistItems). Если вы внесете эти изменения, вы получите правильный идентификатор загрузки, а затем ваш вызов playlistItems вернет те же результаты, что и поисковый вызов.
Однако, когда все сказано и сделано, вы все равно можете предпочесть конечную точку поиска, так как она имеет возможность упорядочивать результаты по дате, популярности и т. Д.