読者です 読者をやめる 読者になる 読者になる

かわろぐ

技術、ボルダリング、セキュリティ、その他もろもろ

MENU

Streaming APIで遊んでみた コンソールにただ出力するだけ編

じゅーん29さんの記事に刺激を受けて

自分でもTwitter の Streaming APIで遊んでみた!

Twitter の StreamingAPIってなんぞや?
っていう人も多いとおもうので,簡単に解説します.
間違ってたらごめんなさい.

従来のAPI と Streaming API

従来のAPIはデータを取得するたびにサーバに接続しデータをもらっていました.

それに対してStreamingAPIは一度接続したらエラーや回線の切断がない限り
Twitterのサーバが勝手にデータを送りつけてくれるというものです.

使用したサンプル

よーし!ガシガシかくぞー!

(「・ω・)「・・・

ワカンネ・・・

ということで先人の知恵を借りました.

しばそんノートさまのところに公開されていたソースを利用させていただきました.

Twitter側のURLが変更になっていたので,そこだけ変更してあります.

自分の遊んでみたコードは下記の通り.

# coding: utf-8

require 'net/http'
require 'uri'
require 'rubygems'
require 'json'

USERNAME = 'ゆーざあいでぃ' # ここを書き換える
PASSWORD = 'ぱすわーど' # ここを書き換える

uri = URI.parse('http://stream.twitter.com/1/statuses/filter.json')
Net::HTTP.start(uri.host, uri.port) do |http|
  request = Net::HTTP::Post.new(uri.request_uri)
  request.set_form_data('track' => 'bit,')
  request.basic_auth(USERNAME, PASSWORD)
  http.request(request) do |response|
    raise 'Response is not chuncked' unless response.chunked?
    response.read_body do |chunk|
      status = JSON.parse(chunk) rescue next
      next unless status['text'] && status['text'].include?('http://bit.ly')
      user = status['user']
      puts "#{user['screen_name']}: #{status['text']}"
    end
  end
end

このスクリプトはツイート本文に”http://bit.ly”の文字列が入っているもの
のみをターミナルの画面にバーッと表示するだけなのですが,なんか楽しい!

ちょっと自分のTwitterIDのみのをバーッとだしてみよう!
ということで下記 'bit' のところを自分のTwitterID '@kawa_xxx' に変更し

request.set_form_data('track' => 'bit')
↓
request.set_form_data('track' => '@kawa_xxx')

次の一行をコメントアウトしました.

#next unless status['text'] && status['text'].include?('http://bit.ly')

そして実行すると,シーン....

そりゃそうですね.検索対象の言葉がTwitter上に流れてないんですもんねw
自分で自分に@飛ばしてきゃっきゃしてましたw

それから,検索対象の文字列を複数指定する場合は,下記の様にカンマ区切りで複数指定します.
コイツの文字数制限が1~60バイトらしいです.

request.set_form_data('track' => 'bit')
↓
request.set_form_data('track' => '文字列1,文字列2')


よーし!これを次はim.kayac.comに投げて遊ぶぞ!