3

我正在尝试从 Youtube 播放列表中删除视频,但服务器不断响应:

<errors xmlns='http://schemas.google.com/g/2005'>
    <error>
        <domain>GData</domain>
        <code>ServiceForbiddenException</code>
        <internalReason>User authentication required.</internalReason>
    </error>
</errors>

奇怪的是我可以删除播放列表并将视频添加到播放列表中。我正在关注在此处找到的 Google 文档:

https://developers.google.com/youtube/2.0/developers_guide_protocol_playlists#Deleting_a_video_from_a_playlist

我正在使用如下形状的请求:

网址

删除https://gdata.youtube.com/feeds/api/playlists/PLAYLIST_ID/VIDEO_ID

删除https://gdata.youtube.com/feeds/api/playlists/PLZsHJpFf2dLtEhsYEISc2FR2JWYeIC8KZ/IcxQznDe4u8

标头:(我对所有请求使用完全相同的标头)

Authorization:  Bearer ************************
Content-Type:   application/atom+xml
Host:           gdata.youtube.com
X-GData-Key:    key=***************************
gdata-version:  2

另一个奇怪的事情是,当我在地址中输入请求 url 时,它显示“未找到播放列表视频”,我提供了 Youtube 视频 ID。Mebbe 这不是我需要提供的那个 id。我尝试使用播放列表索引,即只是一个数字。没运气。住手!

4

1 回答 1

3

请允许我回答我自己的问题。

在链接的文档中,他们声明您需要一个PLAYLIST_ENTRY_ID,它与Youtube 上的地址中写入的ID不同。ID来自您通过他们的提要请求请求的条目。每个条目(每个视频)都有一个名为id的属性(它在 feed -> entry -> id[text] 中),其中包含如下内容:

tag:youtube.com,2008:playlist:PLZsHJpFf2dLs_n7e69v5SUNQRuZTMnLcM:PLhRVbNPJX-c0PUOsjeulCsgAx-ydeUUdJhpxbacX0VFk

在这种情况下可以理解为

bla:bla:bla:PLAYLIST_ID:PLAYLIST_ENTRY_ID

所以我正在照顾的 id 是最后一个冒号之后的字符串的其余部分。在 Javascript 中,我像这样获取它:(我使用的是 xml 到 json 解析器,但它是.split(":").pop()会给你所需的id

var deleteId=json.feed.entry[i]["id"]["#text"].split(":").pop();

在这种情况下,生成的 id 将是:PLhRVbNPJX-c0PUOsjeulCsgAx-ydeUUdJhpxbacX0VFk

所以 ytId IcxQznDe4u8 的视频的最终请求 url 不是

https://gdata.youtube.com/feeds/api/playlists/PLZsHJpFf2dLtEhsYEISc2FR2JWYeIC8KZ/IcxQznDe4u8

但反而

https://gdata.youtube.com/feeds/api/playlists/PLZsHJpFf2dLtEhsYEISc2FR2JWYeIC8KZ/PLhRVbNPJX-c0PUOsjeulCsgAx-ydeUUdJhpxbacX0VFk

*飞走了*

于 2012-12-25T19:15:32.070 回答