Skip to content

Instantly share code, notes, and snippets.

@syou6162
Created September 8, 2012 04:54
Show Gist options
  • Save syou6162/3671931 to your computer and use it in GitHub Desktop.
Save syou6162/3671931 to your computer and use it in GitHub Desktop.
#! /opt/local/bin/ruby1.9
# -*- coding: utf-8 -*-
require 'mechanize'
require 'logger'
require 'time'
require 'optparse'
require 'pp'
class HatenaGroupKeyword
attr_accessor :agent
attr_accessor :log
attr_accessor :name
attr_accessor :password
attr_accessor :group
def initialize
@agent = Mechanize.new
@log = Logger.new(STDOUT)
@log.level = Logger::DEBUG
end
def login(cookie)
@log.debug("started login.")
if ((!File.exist?(cookie)) || (Time.now - Time::parse(@agent.cookie_jar.load(cookie)['hatena.ne.jp']['/']['b'].expires.to_s) > 0))
login_page = @agent.get('https://www.hatena.ne.jp/login')
login_form = login_page.forms.first
login_form["name"] = @name
login_form["password"] = @password
@agent.submit(login_form)
# pp login_form
@agent.cookie_jar.save_as(cookie)
@log.debug("finished login.")
elsif
@agent.cookie_jar.load(cookie)
@log.debug("skipped login.")
end
end
def edit(file)
f = open(file,"r")
text = f.read
f.close
file = File::split(file)[-1].split(".")
#Tsukuba.R.txtみたいなやつの対処
file.pop
keyword = file.join(".")
puts keyword
url = 'http://' + self.group + '.g.hatena.ne.jp/keyword/' + URI.encode(keyword) + '?mode=edit'
puts url
edit = @agent.get(url)
edit_form = edit.forms[0]
edit_form["body"] = text
edit_form.method = 'POST'
# pp edit_form
@agent.submit(edit_form)
# pp @agent
end
def delete(file)
puts file
file = File::split(file)[-1].split(".")
file.pop
keyword = file.join(".")
puts keyword
url = 'http://' + self.group + '.g.hatena.ne.jp/keyword/' + URI.encode(keyword) + '?mode=edit'
puts url
edit = @agent.get(url)
puts edit.forms.length
edit_form = edit.forms[1]
@agent.submit(edit_form)
end
end
if ARGV.length == 0
puts "引数が必要です。"
#複数の検索語に対応しようと思ったけど、とりあえずタグ検索すればどうにかなるので放置
exit
end
delete = FALSE
edit = FALSE
opt = OptionParser.new
opt.on('-e') {|v| edit = v }
opt.on('-d') {|v| delete = v }
opt.parse!(ARGV)
config = YAML.load_file(File.expand_path("~") + "/ruby/hatena.yaml")
hg = HatenaGroupKeyword.new
hg.name = config['name']
hg.password = config['password']
hg.group = config['group']
hg.login(cookie=File.expand_path("~") + "/bin/cookie.yaml")
if edit == TRUE
hg.edit(ARGV[0])
elsif delete == TRUE
hg.delete(ARGV[0])
end
puts "finished posting"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment