Skip to content

Instantly share code, notes, and snippets.

@udzura
Created November 20, 2009 09:45
Show Gist options
  • Save udzura/239385 to your computer and use it in GitHub Desktop.
Save udzura/239385 to your computer and use it in GitHub Desktop.
:config:
:user: "udzura"
:pass: "udzura_dummy_pass"
:target: "sudori"
#!/usr/bin/env ruby
require 'net/https'
require 'rexml/document'
require 'yaml'
require 'time'
class FavBomb
HOST = "twitter.jp"
def initialize
config = YAML.load_file("./config.yml")
@user = config[:config][:user]
@pass = config[:config][:pass]
@target = config[:config][:target]
@last_access_file = "./last_access.txt"
unless FileTest.exist? @last_access_file
open(@last_access_file, "w").close
@last_access = nil
else
@last_access = Time.parse(open(@last_access_file, "r").read)
end
@http_cli = Net::HTTP.new(HOST, 443)
@http_cli.use_ssl = true
@http_cli.verify_mode = OpenSSL::SSL::VERIFY_NONE
end
def main
@statuses = get_statues
puts "#{@statuses.length} 件のfavを実行します。"
@statuses.each do |status|
create_fav status
end
update_last_access
puts "#{@new_last_access} : までの発言をfavしました。"
end
# private
def get_status
break_flg = false
ret = []
(1..3).each do |i|
req = Net::HTTP::Get.new("/statuses/user_timeline/#{@target}.rss?page=#{i}")
@http_cli.start do |http|
response = http.request(req)
if response.code == "200"
REXML.Document.new(response.body).elements.each("/rss/channel/item") do |item|
@new_lastaccess ||= Time.parse(item.elements['pubDate'].text)
if @last_access && Time.parse(item.elements['pubDate'].text) <= @last_access
break_flg = true
break
end
ret << item.elements['link'].text.split("/").last
end
end
end
break if break_flg
end
ret
end
def create_fav(id)
req = Net::HTTP::Post.new("/favorites/create/#{id}.xml")
req.basic_auth(@user, @pass)
@http_cli.start do |http|
response = http.request(req)
if response.code == "200"
puts "Fav Added: http://twitter.com/bcnranking_jp/statuses/#{id}"
else
puts "Error: http://twitter.com/bcnranking_jp/statuses/#{id}"
end
end
end
def update_last_access
open(@last_access_file, "w") do |f|
f.puts @new_last_access.to_s
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment