我有一个简单的搜索栏,搜索字词中的用户类型和匹配搜索字词的推文应该会显示出来。但是,它仅适用于单字搜索。
<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);
?>
答案 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";