2012-02-08 13 views
-1

次のコードを使用して、Twitterからユーザー名を抽出します。私がこれまで行って にあるどのようなこれらのように取得する:PHPコードを変更して特定の文字列を文書から抽出する

[0] => com/USERNAME/statuses/[email protected] 
    [1] => com/ANOTHER_USERNAME/statuses/[email protected] 

が、これは私のコードが...どのように私は唯一のユーザ名を抽出することができますか?

$file = file_get_contents("http://search.twitter.com/search.rss?q=twitter"); 
    $file = strip_tags($file);   

    preg_match_all("([a-z0-9!#$%&'*+/=?^_`{|}~-]*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)\b)siU", $file, $matches); 

    echo '<pre>'; 
    print_r($matches); 
    echo '</pre>'; 

私はこの使用のSimpleXMLをしましたが、私はそれを行うだけで、最初の結果

$url="http://search.twitter.com/search.atom?q=hello"; 
$twitter_xml = simplexml_load_file($url); 

foreach ($twitter_xml->entry->author as $key) { 
    $author = $key->{"uri"}; 

    echo"<li><h5>$author</h5></li>"; 
} 
+0

だから常に 'パターンです...コードを調理com'スラッシュ・ユーザ名、スラッシュ?もしそうなら、正規表現は不要です... – lonesomeday

+0

他の質問を参照してください:http://stackoverflow.com/questions/9199041/how-to-extract-the-content-of-uri-uri-in-a-xml-document – salathe

答えて

5

停止を取得します。適切に構造化された複数の機械可読フォーマットがある場合、regexを使用することは愚かです。

あなたはRSSフィードを解析し、必要な要素を引き出すためのSimpleXMLを使用するか、オブジェクトの素敵なPHPの配列を取得するためにJSON表現(http://search.twitter.com/search.json?q=twitter)と協力し、json_decodeを通してそれを実行するためにも簡単に使用することができ、抽出しようとしているすべてのデータが既にあなたに分かれています。

+1

正確に - 正規表現を使用するためにあなたのやり方から外れる必要はありません。他の解決策がはるかに実行可能なように見えるかもしれません。 – phatskat

+0

こんにちは、私はsimplexmlを使用して質問を更新しましたが、結果は1つしかありません。 – EnexoOnoma

+0

まず、JSONの方がずっと簡単です。次に、 'foreach($ twitter_xml-> entry-> author)'をすることはできません。あなたは 'foreach($ twitter_xml-> entry)'をして、そこの作者と対処しなければなりません。 – ceejayoz

1

堅牢なレシピ:

  1. パーサ、おそらくsimpleXMLまたはDOM、多分他の人、
  2. XPathクエリ(//guidが頭に浮かぶ)。
  3. parse_url($content, PHP_URL_PATH);
  4. explode('/',$path)
  5. は、その配列の第一のエントリを取得したURLからのパスを取得します。

さて、

+0

こんにちは、私はsimplexmlを使用して私の質問を更新しましたが、私は1つの結果しか得ていません。 – EnexoOnoma

+0

ステップ(2)、 'xpath()'クエリ....に行きます。また、ceejayozは正しいです:jsonルートはここではもっと簡単で、おそらくもっと効率的です。 – Wrikken

+0

確かに、私はそれを行う方法がわからない新しいコードを書く代わりに、なぜ私は既存のコードに答えを得ることができないのですか?私は迅速な解決策、何もプロフェッショナルを探していません。 – EnexoOnoma