Skip to content

Instantly share code, notes, and snippets.

@morygonzalez
Created May 15, 2011 07:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save morygonzalez/972943 to your computer and use it in GitHub Desktop.
Save morygonzalez/972943 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
#-*- coding: utf-8 -*-
require "rubygems" if RUBY_VERSION < '1.9'
require "json"
require "oauth/cli/twitter"
access_token = OAuth::CLI::Twitter.get_access_token(:file => ENV['HOME'] + '/.favoritter')
def twitter_ary(statuses)
ary = []
statuses.each do |s|
h = {:id => s["id"], :text => s["text"]}
ary << h
end
return ary
end
if ARGV.size == 1
target = ARGV[0]
all_statuses = access_token.get(
"http://api.twitter.com/1/statuses/user_timeline.json?screen_name=#{target}"
).body
parsed = JSON.parse(all_statuses)
target_statuses = []
parsed.each do |s|
target_statuses << s unless s["favorited"]
end
@target = twitter_ary(target_statuses)
if @target.size == 0
puts "there's no #{target}'s status to fav!"
else
@target.each do |t|
request = access_token.post(
"http://api.twitter.com/1/favorites/create/#{t[:id]}.json"
)
puts "favorited #{target}'s #{t[:text]}" if request
end
end
else
puts "you need target user name!"
end
#!/usr/bin/env ruby
#-*- coding: utf-8 -*-
require "rubygems" if RUBY_VERSION < '1.9'
require "net/https"
require "oauth/cli/twitter"
require "json"
$access_token = OAuth::CLI::Twitter.get_access_token(:file => ENV['HOME'] + '/.favoritter')
$target = ARGV[0]
def connect
uri = URI.parse("https://userstream.twitter.com/2/user.json")
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
https.start do |https|
request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data({"track" => $target})
request.oauth!(https, $access_token.consumer, $access_token)
https.request(request) do |response|
raise response.code.to_i unless response.code.to_i == 200
raise 'Response is not chunked' unless response.chunked?
response.read_body do |chunk|
begin
status = JSON.parse(chunk)
rescue JSON::ParserError => e
puts e
next
end
yield status
end
end
end
end
def run
loop do
begin
connect do |json|
if json['text']
user = json['user']
if user['screen_name'] == $target
message = "faved #{user['screen_name']}'s \"#{json['text']}\""
puts message if make_favorite(json['id_str'])
end
end
end
rescue => e
puts e
end
end
end
def make_favorite(id)
request = $access_token.post("http://api.twitter.com/1/favorites/create/#{id}.json")
end
Signal.trap('INT') do
exit
end
run
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment