Api 如何仅列出可分配的视频类别?

Api 如何仅列出可分配的视频类别?,api,youtube,Api,Youtube,使用API的v2 via:,我可以看到可分配和不推荐的视频类别 然而,使用v3谷歌数据API,我看到了所有类别,但没有标志指示它们是否可用作视频上传的类别。例如,标有“动画/动画”的类别(类别31)。如果您尝试使用此类别上载视频,您将在上载过程结束时收到YT的“错误请求”响应 如果您根据第一个URL选择“可分配”列表中的任何类别,则上传工作正常。下面是一个使用基于Atom的API的弃用类别: <atom:category term="Movies_anime_animation" labe

使用API的v2 via:,我可以看到可分配和不推荐的视频类别

然而,使用v3谷歌数据API,我看到了所有类别,但没有标志指示它们是否可用作视频上传的类别。例如,标有“动画/动画”的类别(类别31)。如果您尝试使用此类别上载视频,您将在上载过程结束时收到YT的“错误请求”响应

如果您根据第一个URL选择“可分配”列表中的任何类别,则上传工作正常。下面是一个使用基于Atom的API的弃用类别:

<atom:category term="Movies_anime_animation" label="Anime/Animation" xml:lang="en-US">
    <yt:deprecated/>
</atom:category>

我已经看过video.list v3 API文档,以及来自同一API的原始JSON输出。我看不出如何区分不推荐的类别和可分配的类别。这是API中缺少的还是我遗漏了什么?

您可以收到解析XML文档的可分配类别列表。这是一个关于PHP的示例:

$catURL = 'http://gdata.youtube.com/schemas/2007/categories.cat';
$cxml = simplexml_load_file($catURL);
$cxml->registerXPathNamespace('atom', 'http://www.w3.org/2005/Atom');
$result = $cxml->xpath('//atom:category/yt:assignable/..');

$categories = array();
foreach ($result as $row) $categories[(string)$row['term']] = (string)$row['label'];

对于任何偶然发现这个问题的人:YouTube V3 API现在会在每个类别片段中返回一个可分配的标志

请求

curl\
'https://www.googleapis.com/youtube/v3/videoCategories?part=snippet®ionCode=NL&key=[你的API密钥]'\
--标题“授权:承载者[您的\u访问\u令牌]”\
--标题“接受:应用程序/json”\
--压缩的
响应

{
“种类”:“youtube视频分类”,
“etag”:“7mqChSJogdF3hSIL-88BfDE-W8M”,
“id”:“17”,
“片段”:{
“标题”:“体育”,
“可转让”:正确,
“信道ID”:“UCBR8-60-B28hp2BmDPdntcQ”
}
}

您是否进一步解决了此问题?虽然可以使用v2xml接口获取可分配类别的列表,但很难将此信息与v3接口提供的列表相关联。使用类别标题来匹配事物是有问题的。例如,目前有两个“喜剧”类别,一个是可分配的,另一个是不推荐的。似乎没有一种方法可以确定要删除哪一个v3“喜剧”类别。你最终做了什么?我不得不使用v3获取类别,然后使用v2 API进一步解析那些“可上传”的内容。这太可怕了。目前还看不到解决方法,因为V3API似乎没有公开所需的信息。是的,很明显。除了我的问题是“如何在V3API中做到这一点?”。我知道如何在v2api中实现它。
$catURL = 'http://gdata.youtube.com/schemas/2007/categories.cat';
$cxml = simplexml_load_file($catURL);
$cxml->registerXPathNamespace('atom', 'http://www.w3.org/2005/Atom');
$result = $cxml->xpath('//atom:category/yt:assignable/..');

$categories = array();
foreach ($result as $row) $categories[(string)$row['term']] = (string)$row['label'];