Twitter搜索API - PHP多字搜索不起作用

时间:2012-04-28 01:17:07

标签: forms search twitter

我有一个简单的搜索栏,搜索字词中的用户类型和匹配搜索字词的推文应该会显示出来。但是,它仅适用于单字搜索。

<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);

?>

3 个答案:

答案 0 :(得分:2)

如果您使用引号搜索确切的词组匹配,则需要在构造查询字符串之前转义这些引号。使用当前代码:

$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

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

答案 1 :(得分:0)

编辑:

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

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

-

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

  

“逗号分隔的关键字和短语是逻辑OR,短语是逻辑AND。   短语中的单词由空格分隔。如果任何短语匹配,则推文匹配。   如果推文中存在所有单词,则短语匹配。 (例如,推特就是   和推特,推特是推特或推特。)条款是完全匹配的,也是   精确匹配忽略标点符号。“

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

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

Tweet: "This is a tweet about grapefruit"

将与查询匹配:

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

但不是:

  • 菠萝
  • 葡萄柚菠萝

如果您正在搜索“菠萝”或“葡萄柚”中的推文,那么您的查询参数必须是:

“柚子,菠萝”。

答案 2 :(得分:0)

$q = $_GET['search_box']." is";
$search = "http://search.twitter.com/search.atom?q=%22".urlencode( $q )."%22";