Skip to content

Instantly share code, notes, and snippets.

@aquarla
Created April 30, 2010 08:45
Show Gist options
  • Save aquarla/384950 to your computer and use it in GitHub Desktop.
Save aquarla/384950 to your computer and use it in GitHub Desktop.
#!/usr/local/bin/ruby
# stalker.rb
# 指定したユーザがふぁぼったtweetをリアルタイムで表示 (with ChirpUserStreams)
# by あくあーら ( http://twitter.com/aquarla )
# 使い方
# ./stalker.rb [screen_name]
require 'net/http'
require 'uri'
require 'rubygems'
require 'json'
USERNAME = 'xxxxxxxx'
PASSWORD = 'xxxxxxxx'
class Twitter
def json_api(api_url)
uri = URI.parse(api_url)
Net::HTTP.start(uri.host, uri.port) do |http|
request = Net::HTTP::Get.new(uri.request_uri)
request.basic_auth(USERNAME, PASSWORD)
http.request(request) do |response|
return JSON.parse(response.body)
end
end
{}
end
def user_id_of(user_name)
user = json_api("http://api.twitter.com/users/#{user_name}.json")
user['id'] || "0"
end
def user_screen_name_of(id)
user = json_api("http://api.twitter.com/users/#{id}.json")
user['screen_name'] || "unknown"
end
def status_of(id)
json_api("http://api.twitter.com/statuses/show/#{id}.json")
end
end
class Stalker
def self.run(screen_name)
return unless screen_name
twitter = Twitter.new
target_id = twitter.user_id_of(screen_name)
uri = URI.parse('http://chirpstream.twitter.com/2b/user.json')
Net::HTTP.start(uri.host, uri.port) do |http|
request = Net::HTTP::Get.new(uri.request_uri)
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
if status['event'] == 'favorite' && status['source']['id'] == target_id
target_status = twitter.status_of(status['target_object']['id'])
puts "#{screen_name} さんが #{twitter.user_screen_name_of(status['target']['id'])} さんの発言(#{target_status['text']})をふぁぼりました"
end
end
end
end
end
end
if $0 == __FILE__
Stalker.run ARGV.shift
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment