0

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

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

?>
4

3 回答 3

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

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

于 2012-04-28T15:41:41.483 回答
0

编辑:

这是 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"

将与查询匹配:

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

但不是:

  • 菠萝
  • 柚子菠萝

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

“葡萄柚,菠萝”。

于 2012-04-28T01:31:22.997 回答
0
$q = $_GET['search_box']." is";
$search = "http://search.twitter.com/search.atom?q=%22".urlencode( $q )."%22";
于 2012-04-28T19:26:29.337 回答