2012-04-28 143 views
0

我有一個簡單的搜索欄,用戶鍵入搜索條件和鳴叫匹配的搜索條件應該顯示出來。但是,它只適用於單詞搜索。Twitter搜索API - PHP多個詞搜索不起作用

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

?> 

回答

2

如果您使用精確詞組匹配的引號進行搜索,那麼在構造查詢字符串之前,您需要先轉義這些引號。與當前的代碼:

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

輸入「測試短語」將導致該表達式(這可能會導致一個解析錯誤):

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

相反,嘗試之前URL編碼所述用戶輸入它包括在搜索字符串:

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

應該導致其價值:

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

您可以通過在瀏覽器中輸入網址來檢查是否有效。

+0

謝謝!這解決了我的問題:)你知道我怎麼可以在每個搜索查詢中添加一個額外的單詞嗎?例如:搜索「歡樂時光」實際上會搜索「歡樂時光星期五」,搜索「悲傷時刻」實際上會搜索「悲傷時刻星期五」。 – Alex 2012-04-28 16:23:01

+0

它最終只適用於我使用的測試用例。我一直在尋找「憤怒的小鳥作爲我的測試查詢,這是有偏見的,因爲這兩個詞幾乎總是彼此相鄰(至少在twitter上)。我最終找到了正確答案。 – Alex 2012-04-28 19:25:34

+0

是的,我解釋了關鍵字匹配在我的其他答案。我不明白你爲什麼沒有把這個問題解決爲這個問題的解決方案,雖然... – 2012-04-28 19:43:14

0

編輯:

下面是Twitter的搜索API的最佳資源:https://dev.twitter.com/docs/using-search

匹配精確短語,只是包裹在qoutes查詢字符串。

-

在微博API,任何短語是邏輯值與運算,而逗號分隔值是邏輯OR值。

「逗號分隔的關鍵字和短語邏輯OR值,短語是邏輯與運算。短語內 單詞由空格分隔。鳴叫如果任何短語匹配的匹配。 短語如果所有的單詞存在於匹配(例如,twitter是 AND twitter,而twitter是OR twitter)。術語是精確匹配的,並且 精確匹配忽略了標點符號。

這實際上來自Streaming API,但我相信它也適用於搜索API(有人請糾正我,如果我錯了!)。

讓我們看看這是什麼意思了一個簡單的例子:

  • 鳴叫
  • 柚子
  • 鳴叫柚子

但:

Tweet: "This is a tweet about grapefruit" 

將與查詢相匹配不與:

  • 菠蘿
  • 柚子菠蘿

如果您正在尋找鳴叫枯萎的,那麼你的查詢參數就需要作「菠蘿」或「柚子」:

「柚子,菠蘿」。

+0

我想要這樣,以便用戶可以搜索「關於葡萄柚的推文」,並讓它返回與確切短語匹配的推文。這意味着我需要傳遞引語中的短語。爲了完成這項工作,我會將什麼作爲變量$ q傳遞? – Alex 2012-04-28 01:43:47

+0

我不認爲有任何匹配Twitter API的精確短語的方法。如果你通過了「關於葡萄柚的推文」這個字符串,它仍然會匹配文字「這是一條關於我有多愛葡萄柚的推文」。 – 2012-04-28 10:29:13

+0

我剛查過文檔,它給出了這個例子:GET http://search.twitter.com/search.json?q=Twitter%20API&result_type=mixed – Alex 2012-04-28 14:58:51

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