前回も書きましたが、私はツイッターについての知識がほとんどないということをご了承ください。†statuses/filterメソッドを使用すると、指定したキーワードを含むパブリックステータスだけを送ってもらうことができます。キーワードだけでなく、ユーザーや場所を指定することもできます。API」によると、statuses/filterメソッドはPOSTでデータを送信することになっていますが、GETでも大丈夫のようです(詳しく調べたわけではありませんが)。†キーワードを指定するには、trackパラメータを使います。キーワードは大文字小文字を区別しません。キーワードは1〜60バイトである必要があります。スペースの入ったキーワードは指定できませんし、UTF-8のキーワードもうまくいかないそうです。「Twitter」をtrackパラメータに指定したときは、textフィールド内の「TWITTER」、「twitter」、「"Twitter"」、「twitter.」、「#twitter」、「@twitter」などにマッチし、「TwitterTracker」や「http://www.twitter.com」にはマッチしないということです。trackパラメータに複数のキーワードを指定する場合は、それぞれのキーワードをコンマ(,)区切りにします。複数のキーワードが指定された場合は、どれか1つでも含まれていればマッチしたことになります。パラメータを「track=basketball,football,baseball」とすると、「basketball」、「football」、「baseball」のいずれかのキーワードを含むステータスが送られてきます。キーワードは最大で200個指定できます。†ユーザーを指定するには、followパラメータを使います。followパラメータには、ユーザーのIDを指定します。マッチするステータスは、そのユーザーが作成したか、そのユーザーがReTweetしたか、そのユーザーが作成したものを誰かがReTweetしたか、そのユーザーが作成したステータスへの返信(in-reply-to)かのどれかです。@user」などと書かれたステータスでも)ということです。followパラメータもtrackパラメータと同様に、コンマ区切りで複数のIDを指定可能です。最大で400個指定できます。指定した場所から投稿されたステータスだけを送ってもらうには、locationsパラメータを使います。これは、その場所の範囲を南西と北東の経度緯度をコンマで区切った文字列で指定します(つまり範囲は、矩形(box)っぽくなります)。サンフランシスコは「locations=-122.75,36.8,-121.75,37.8」となるそうです。locationsパラメータもコンマ区切りで複数指定可能で、例えばサンフランシスコとニューヨークであれば、「locations=-122.75,36.8,-121.75,37.8,-74,40,-73,41」となります。locationsパラメータの範囲は、1辺が1度以下でなければならず、最大で10個まで指定できます。trackとlocationsパラメータは、あまりに広い範囲を指定すると、すべてのステータスを返せなくなり、制限された状態になります。制限状態が終了すると、制限メッセージ(前号で紹介したlimitオブジェクトのことのようです)と、マッチしたすべてのステータスがもう一度送られます。trackとlocationsパラメータの両方を指定すると、どちらかにマッチしたステータスが送られます。以下の例では、「2010wc」というキーワードを含むステータスを受信しています。APIのドキュメントでは、JSONの使用をかなり強く勧めています。それにも関わらず、XMLを使うというのはちょっと申し訳ない気がします。そこで、JSONを解析する方法を考えます。Extensionsでも可)やDataContractJsonSerializerクラスを使うことで比較的簡単にできます。なければ、自分で解析するか、JSONで紹介されているようなライブラリを使用すれば良いでしょう。以下に、JavaScriptSerializerを使用した例を示します。このコードを実行するには、System.Web.Extensionsを参照設定に追加してください。ここでは手抜きでデータをDictionaryに変換していますが、専用のクラスを作った方が良いでしょう。statusオブジェクトなのかを判断する方法がわかりませんでしたので、とりあえずtextフィールドがあればstatusと判断するようにしました。†JSONを扱うフリーのライブラリとしては、Json.NET(MITライセンス)が有名です。3.5以降でなければ使用できません。JSONを使った例を紹介します。2.0以降であれば、JsonConvert.DeserializeXmlNodeメソッドを使ってXmlDocumentに変換するといった方法があります。parser?で紹介されているクラスだけのようです。このクラスを使用してみたところ、コードポイントをUnicode文字に変換する箇所でエラーが発生することがありました。1s.Append(Encoding.UTF32.GetString(BitConverter.GetBytes(codePoint)));に変更することで、このエラーは出なくなりました。