嘿,所以我对youtube api相当熟悉。。我知道如何阅读频道和播放列表,同时获取我认为重要的任何相关视频信息我使用php来完成所有这些,但为了确保我对每个请求/响应的工作方式有正确的认识,我尝试在API浏览器中进行此操作
现在我正在尝试将视频插入到我刚刚创建的播放列表中(也通过API),但我很难弄清楚我的请求是如何不正确形成的
这是的请求
POST https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&key={YOUR_API_KEY}
Content-Type: application/json
Authorization: Bearer ya29.1.AADtN_WT2TRZzH1t86nVlX26z9WPp-gnDTxVHGvdQ6xx0vyTzmkYeXkLdJerwllLzF_a
X-JavaScript-User-Agent: Google APIs Explorer
{
"snippet": {
"playlistId": "PL8hD12HFC-nuswc21_e64aPAy9B25sEH7",
"resourceId": {
"videoId": "KMGuyGY5gvY"
}
}
}
这是的响应
400 Bad Request
- Show headers -
{
"error": {
"errors": [
{
"domain": "youtube.playlistItem",
"reason": "invalidResourceType",
"message": "Resource type not supported."
}
],
"code": 400,
"message": "Resource type not supported."
}
}
播放列表是我使用API资源管理器创建的空的可公开查看的播放列表,并且可以通过标准youtube网站查看。视频是从youtube上随机选择的。。。尝试了一些,认为这可能是视频的特定问题,但没有运气。。我已经打开了OAuth,并且正在使用一个经过验证的youtube合作伙伴帐户
然而,我似乎能弄清楚为什么不支持资源类型。我在网上浏览了一下,并找到了左边的答案,但没有发现我到底做错了什么。。对这个问题的任何帮助都将不胜感激因为我现在有点卡住了
您的resourceId
不完整,因为它没有向API确定如何解释videoId
参数。尝试设置resourceId
的kind
属性,如下所示:
"snippet": {
"playlistId": "PL8hD12HFC-nuswc21_e64aPAy9B25sEH7",
"resourceId": {
"kind": "youtube#video",
"videoId": "KMGuyGY5gvY"
}
}
这样,API将知道在哪个"域"(也就是说)中查找由您发送的字符串标识的资源。
这将有助于构建resourceID
def add_video_to_playlist(videoID,playlistID):
youtube = get_authenticated_service() #write it yourself
add_video_request=youtube.playlistItems().insert(
part="snippet",
body={
'snippet': {
'playlistId': playlistID,
'resourceId': {
'kind': 'youtube#video',
'videoId': videoID
}
#'position': 0
}
}
).execute()
阅读Youtube Data Api 上的文档
$playlistId = 'REPLACE_WITH_YOUR_PLAYLIST_ID_STARTS_WITH_PL';
$resourceId = new Google_Service_YouTube_ResourceId();
$resourceId->setVideoId('REPLACE_WITH_VIDEO_ID_YOU_WANT_TO_ADD');
$resourceId->setKind('youtube#video');
$playlistItemSnippet = new Google_Service_YouTube_PlaylistItemSnippet();
$playlistItemSnippet->setTitle('YOUR_VIDEO_TITLE');
$playlistItemSnippet->setPlaylistId($playlistId);
$playlistItemSnippet->setResourceId($resourceId);
$playlistItem = new Google_Service_YouTube_PlaylistItem();
$playlistItem->setSnippet($playlistItemSnippet);
$playlistItemResponse = $youtube->playlistItems->insert(
'snippet,contentDetails', $playlistItem, array());</i>
完整的项目可在我的GitHub 上获得