何しろ素人なので、コードを公開するのは、恥ずかしいが、そんなことを言っていると、語学と同じでいつまで経っても上達しないので..。
require 'rubygems'
require 'net/https'
require 'oauth'
require 'uri'
require 'yaml'
# Facebook
class Facebook
attr_accessor :conf
ACCESS_TOKEN= 'access_token'
MESSAGE = 'message'
def initialize (conf_from_yaml)
@conf = conf_from_yaml ["facebook"]
end
def post ( message )
https = Net::HTTP.new('graph.facebook.com', 443)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
post_hash = { ACCESS_TOKEN => conf[ACCESS_TOKEN], MESSAGE => message }
msg = post_hash.map { |key,value|
"#{URI.encode(key)}=#{URI.encode(value)}"
}.join("&")
https.start{
response = https.post('/me/feed', msg)
puts response.body
}
end
end
#Twitter
class Twitter
KEY = 'consumer_key'
SECRET = 'consumer_secret'
TOKEN = 'access_token'
TOKEN_SECRET = 'access_token_secret'
UPDATE_URL = 'https://api.twitter.com/1/statuses/update.xml'
attr_accessor :config
def initialize (conf_from_yaml)
@config =conf_from_yaml ["twitter"]
end
def post (msg)
consumer = OAuth::Consumer.new(config[KEY],
config[SECRET],
:site => 'http://api.twitter.com')
token_hash = {
:oauth_token => config[TOKEN],
:oauth_token_secret => config[TOKEN_SECRET]
}
access_token = OAuth::AccessToken.from_hash(consumer, token_hash)
msg_hash = { :status => msg}
response = access_token.post( UPDATE_URL, msg_hash )
end
end
# YAMLファイル読み込み
class Config_setup
attr_accessor :conf_pTerm
def initialize
@conf_pTerm = YAML.load_file("/Users/tom/pTerm_config.yaml")
end
end
# argument解析
class Arguments
attr_accessor :facebook, :twitter, :message, :msg_length, :url
def initialize
@facebook = true
@twitter = true
@message = ""
@url = ""
@msg_length = 0
end
def analyse (argv)
argv.each { |arg|
case arg
when /-f/
@facebook = false
when /-t/
@twitter = false
# when /^http:\/\/.+?/i
# @url = arg
else
@message = arg
@msg_length = arg.split(//u).length
end
}
end
def display
print "facebook= ", @facebook, ", twitter= ", @twitter, " 文字数= ", @msg_length, " 文字", "\n"
print "本文= ", @message, "\n"
end
end
# main
conf = Config_setup.new
arg = Arguments.new
arg.analyse(ARGV)
arg.display
print "post ? (y/n): "
if STDIN.getc == 121 then
puts "posting..."
# twitterにPOST
if arg.twitter then
tw =Twitter.new(conf.conf_pTerm)
tw.post( arg.message )
print "Twitter: posted !", "\n"
end
# facebookにPOST
if arg.facebook then
fb = Facebook.new(conf.conf_pTerm)
response = fb.post( arg.message )
print "Facebook posted !", "\n"
end
else
puts "not posted, nothing happened"
end