2012-04-28 20 views
0

私は単純な検索バーを持っています。検索条件に一致するユーザータイプと検索条件に一致するツイートが表示されます。ただし、単一単語検索でのみ機能します。Twitter Search 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

これはブラウザにURLを入力することで確認できます。

+0

ありがとう!それは私の問題を解決:)あなたはどのように私はすべての検索クエリに余分な単語を追加することができます知っていますか?例:「ハッピーアワー」を検索すると、実際に「ハッピーアワー・フリーダー」が検索されます。「悲しい時間」を検索すると、実際には「悲しい時間金曜日」が検索されます。 – Alex

+0

それは私が使っていたテストケースのためだけに働いてしまった。私は「怒っている鳥」を検索クエリとして検索していましたが、これらの2つの単語がほぼ常に隣り合うように表示されていました(少なくともtwitterで)。 – Alex

+0

はい、キーワードマッチングについて説明しました私の他の答えでは、私はなぜあなたがこの質問の解決策としてこれをマークしていないのかわかりません... –

0

編集:

はここでTwitterの検索APIのための最適なリソースです:正確なフレーズをマッチングするためのhttps://dev.twitter.com/docs/using-search

、単にqoutesでクエリ文字列を折り返します。

- TwitterのAPIで

カンマ区切り値が論理和であるが、任意のフレーズは、論理名の論理積です。

「カンマ区切りのキーワードやフレーズは、論理的論理和され、フレーズは論理積をとります。フレーズ内 単語はスペースで区切られています。すべてのフレーズが一致した場合につぶやきが一致した。 言葉のすべてが中に存在する場合フレーズが一致しました(例えば、twitterは AND twitterで、twitterはOR twitterです)。用語は正確に一致しており、正確に一致する句読点は一致しています( )。

これは実際にはStreaming APIのものですが、検索APIにも適用されていると思います(私が間違っていると誰かが私を修正してください!)。

のは、これは簡単な例のために何を意味するのか考えてみましょう:

Tweet: "This is a tweet about grapefruit" 

は、クエリと照合されます:

  • つぶやき
  • グレープフルーツ
  • つぶやきグレープフルーツ

が、ではない:

  • パイナップル
  • グレープフルーツパイナップル

あなたはつぶやきを検索していた場合、あなたのクエリパラメータをする必要があるだろう、で「パイナップル」または「グレープフルーツ」のいずれかを枯れ:

「グレープフルーツ、パイナップル"。

+0

「グレープフルーツについてつぶやき」を検索し、正確なフレーズに一致するツイートを返すようにしたいと考えています。つまり、引用符で囲む必要があります。その仕事をするために変数$ qとして何を渡すのですか? – Alex

+0

正確なフレーズをTwitter APIと照合する方法はないと思います。文字列「tweet on grapefruit」を渡すと、「これはグレープフルーツがどれくらい好きか分かります。 –

+0

私はドキュメントをチェックして、この例を示します:GET http://search.twitter.com/search.json?q=Twitter%20API&result_type=mixed – Alex

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