【问题标题】:Twitter Search API - PHP multiple word search not workingTwitter 搜索 API - PHP 多词搜索不起作用
【发布时间】:2012-04-29 03:26:29
【问题描述】:

我有一个简单的搜索栏,用户输入搜索词,并且应该显示与搜索词匹配的推文。但是,它仅适用于单字搜索。

<div id="search">
<form action="" method="get">
  <label>
  Search:
  <input type="text" name="search_box" id="search_box" />
  <input type="submit" name="submit" id="submit" value="Search" />
  </label>
</form>
</div>

<?php 


$q=$_GET['search_box'];

$search = "http://search.twitter.com/search.atom?q=".$q."";

$tw = curl_init();

curl_setopt($tw, CURLOPT_URL, $search);
curl_setopt($tw, CURLOPT_RETURNTRANSFER, TRUE);
$twi = curl_exec($tw);
$search_res = new SimpleXMLElement($twi);

echo "<h3>Twitter search results for '".$q."'</h3>";

foreach ($search_res->entry as $twit1) {

$description = $twit1->content;

$message = $row['content'];

echo "<div class='text'>".$description."</div><br><br>";

}

curl_close($tw);

?>

【问题讨论】:

    标签: forms search twitter


    【解决方案1】:

    如果您使用引号搜索完全匹配的短语,那么您需要在构造查询字符串之前转义这些引号。使用当前代码:

    $q = $_GET['q']
    $search = "http://search.twitter.com/search.atom?q=".$q."";
    

    输入的“测试短语”将导致这个表达式(这可能会导致解析错误):

    "http://search.twitter.com/search.atom?q="test phrase"";

    相反,尝试在将用户输入包含在搜索字符串中之前对其进行urlencoding:

    $q = urlencode($_GET['q']);
    $search = "http://search.twitter.com/search.atom?q={$q}";
    

    这应该导致值:

    http://search.twitter.com/search.atom?q=%22test%20phrase%22

    您可以通过在浏览器中输入 URL 来检查这是否有效。

    【讨论】:

    • 谢谢!这解决了我的问题:) 你知道我如何在每个搜索查询中添加一个额外的词吗?例如:搜索“happy hour”实际上会搜索“happy hour friday”,搜索“sad hour”实际上会搜索“sad hour friday”。
    • 它最终只适用于我正在使用的测试用例。我一直在搜索“愤怒的小鸟作为我的测试查询,这是有偏见的,因为这两个词几乎总是直接相邻出现(至少在 Twitter 上)。我最终找到了正确的答案。
    • 是的,我在其他答案中解释了关键字匹配。不过,我不明白您为什么将其取消标记为该问题的解决方案...
    • 作为感谢我还给了它,但我下面的那个是我用过的那个。
    【解决方案2】:

    编辑:

    这里是 Twitter 搜索 API 的最佳资源:https://dev.twitter.com/docs/using-search

    要匹配精确的短语,只需将查询字符串包装在 qoutes 中即可。

    --

    在 Twitter API 中,任何短语都是逻辑 AND,而逗号分隔的值是逻辑 OR。

    "逗号分隔的关键字和短语是逻辑 OR,短语是逻辑 AND。 短语中的单词由空格分隔。如果任何短语匹配,则一条推文匹配。 如果所有单词都出现在推文中,则短语匹配。 (例如,推特是 AND twitter,而,twitter 是 OR twitter。)。术语完全匹配,并且 完全匹配忽略标点符号。”

    这实际上来自 Streaming API,但我相信它也适用于搜索 API(如果我错了,请有人纠正我!)。

    让我们考虑一下这对于一个简单的例子意味着什么:

    Tweet: "This is a tweet about grapefruit"
    

    将与查询匹配:

    • 推文
    • 葡萄柚
    • 鸣叫柚子

    但不是:

    • 菠萝
    • 柚子菠萝

    如果您要搜索带有“菠萝”或“葡萄柚”的推文,那么您的查询参数需要是:

    “葡萄柚,菠萝”。

    【讨论】:

    • 我想拥有它,以便用户可以搜索“关于葡萄柚的推文”并让它返回与确切短语匹配的推文。这意味着我需要传入带有引号的短语。为了使它起作用,我将传递什么作为变量 $q ?
    • 我认为没有任何方法可以将确切的短语与 Twitter API 匹配。如果你传递字符串“tweet about grapefruit”,它仍然会匹配文本“This is a tweet about how much I love grapefruit”。
    • 我刚刚检查了文档,它给出了这个例子:GET search.twitter.com/…
    • 是的。所以搜索“Twitter API”与这条推文匹配:“这一定是类似于 twitter jail...*达到 API 限制”。这表明没有精确的词组匹配。
    • dev.twitter.com/docs/using-search 的搜索运算符下,它说您可以使用“happy hour”之类的引号 --> 包含确切的短语“happy hour”。
    【解决方案3】:
    $q = $_GET['search_box']." is";
    $search = "http://search.twitter.com/search.atom?q=%22".urlencode( $q )."%22";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-18
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 2014-11-18
      相关资源
      最近更新 更多