【问题标题】:Boolean OR doesn't seem to work in Youtube APIv3 list search (or PHP SDK)Boolean OR 似乎在 Youtube APIv3 列表搜索(或 PHP SDK)中不起作用
【发布时间】:2015-08-22 15:42:54
【问题描述】:

我一直在尝试在我连接的特定频道上搜索与多个关键字之一匹配的视频。我正在使用 Officiel PHP SDK,这就是我所拥有的:

//client is a connected Google_Client
$youtube = new Google_Service_YouTube($client);
$pageToken = null;

$res = $youtube->search->listSearch(
    'id, snippet', [
        'maxResults' => 50,
        'q' => "foo|bar",
        'forMine' => true,
        'type' => 'video',
        'pageToken' => $pageToken
    ]
);

这只会返回包含“foo”和“bar”的视频,而不是“foo”或“bar”。我也尝试过“foo | bar”、“foo%7Cbar”、“urlencode(“foo|bar)”、“foo||bar”,但这些都没有给我想要的。

我错过了什么吗?

谢谢。

【问题讨论】:

  • 如果您的意思是“非此即彼”,那么您可能正在寻找xor,而不是or(即“非此即彼”)。
  • @lenz 感谢您的澄清,我实际上是在寻找“两者之一”,而我只得到那些包含“两者”的东西。我只想实现文档中描述的内容:您的请求还可以使用布尔 NOT (-) 和 OR (|) 运算符来排除视频或查找与多个搜索词之一相关联的视频。例如,要搜索匹配“boating”或“sailing”的视频,请将 q 参数值设置为boating|sailing。 编辑:现在我看到文档描述了“XOR”,但我怀疑这暗示了也将返回匹配两者的视频
  • 上面的代码对我来说很好(使用 | 并且没有编码)。如果删除 forMine 参数会发生什么?你应该得到数百个没有bars 和King of the bar 却没有提到fooFoo 战斗机视频!
  • @theduck 你是绝对正确的,没有 forMine 参数它工作正常。我真的不知道从那里去哪里,但至少这是一个开始 ;-) 谢谢。
  • API 浏览器是否也遇到同样的问题? IE。如果将 forMine 设置为 true,您是否仍然只有返回两个术语的视频?

标签: php youtube youtube-api youtube-data-api


【解决方案1】:

来自documentation

要搜索匹配“划船”或“航行”的视频,请将 q 划船|航行的参数值。

注意管道字符在发送时必须进行 URL 转义 您的 API 请求。管道字符的 URL 转义值为 %7C。

刚刚测试了您的案例,它按预期工作,title 列包含“foo”或“bar”。

https://www.googleapis.com/youtube/v3/search?q=foo|bar&type=video&maxResults=50&key=YOUR_API_KEY&part=snippet

"title": "KING OF THE BAR 2015 - Ultimate Calisthenics Battle!",
...
"title": "Foo Fighters",
...
"title": "Foo Fighters - Something From Nothing",
...
"title": "Browning BAR M1918",
...
"title": "Bar \"u Szwagra\" - Video Dowcip",

所以,问题应该出在 PHP SDK 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多