1

我正在尝试通过 api 订阅 youtube 频道。因为我不擅长 xml 所以需要你的帮助。文档的原始链接:https ://developers.google.com/youtube/2.0/developers_guide_protocol_subscriptions 或

简而言之,这是 youtube 文档中写的内容:

添加订阅

要创建订阅,您发送一个 POST 请求,该请求为创建订阅的经过身份验证的用户标识 YouTube 用户名。请求的主体是一个 XML 条目,其中包含以下元素:

<category>标签标识用户正在创建的订阅类型。将标签的 term 属性值设置为 user 表示该用户正在订阅其他用户的活动(上传视频、评分、标记视频为收藏等),或者将 term 属性值设置为 channel 表示用户正在订阅一个频道。

<yt:username>标签标识正在订阅其活动的频道或用户。

订阅频道

POST /feeds/api/users/default/subscriptions HTTP/1.1
Host: gdata.youtube.com
Content-Type: application/atom+xml
Content-Length: CONTENT_LENGTH
Authorization: Bearer ACCESS_TOKEN
GData-Version: 2
X-GData-Key: key=DEVELOPER_KEY

<?xml version="1.0" encoding="UTF-8"?>
<entry xmlns="http://www.w3.org/2005/Atom"
  xmlns:yt="http://gdata.youtube.com/schemas/2007">
    <category scheme="http://gdata.youtube.com/schemas/2007/subscriptiontypes.cat"
      term="channel"/>
    <yt:username>GoogleDevelopers</yt:username>
</entry>

我的问题

我如何编码发布请求?我尝试使用简单的 html 表单方法发布。但它没有奏效。我收到以下错误。

Content-Type application/x-www-form-urlencoded is not a valid input type.
4

1 回答 1

2

由于您使用的是 HTML 表单帖子,因此它将内容类型设置为,application/x-www-form-urlencoded但所需的内容类型是application/atom+xml

为了做你想做的事,你需要使用 javascript 来发布(为了简单起见,我推荐 jQuery)。

 var data = //XML Data for post

 $.ajax({
  url://Youtube Subscribe Post URL,
  type:"POST",
  data:data,
  Authorization: //ACCESS_TOKEN,
  GData-Version: '2',
  X-GData-Key: 'key=' //DEVELOPER_KEY,
  contentType:"application/atom+xml",
  dataType:"xml",
  success: function(){
    alert('subscribd');
  }
});

我没有测试过,但你应该明白。确保将注释替换为应用的实际值。

请注意,这可能会遇到跨域问题。

于 2012-07-29T17:03:13.140 回答