Skip to content

Instantly share code, notes, and snippets.

@itkq
Created May 16, 2015 18:22
Show Gist options
  • Save itkq/3a9690b24afe7aea1904 to your computer and use it in GitHub Desktop.
Save itkq/3a9690b24afe7aea1904 to your computer and use it in GitHub Desktop.
Twitter Rest Client
require 'mechanize'
require 'twitter'
require 'oauth'
require 'dotenv'
class RestClient
KEY_FILE_NAME = 'key'
TOKEN_FILE_NAME = '.token'
def initialize
@keys = load_file(KEY_FILE_NAME)
if File.exists?(TOKEN_FILE_NAME)
@tokens = load_file(TOKEN_FILE_NAME)
else
@tokens = get_access_token
end
@rest_client = Twitter::REST::Client.new do |config|
config.consumer_key = @keys['CONSUMER_KEY']
config.consumer_secret = @keys['CONSUMER_SECRET']
config.access_token = @tokens['ACCESS_TOKEN']
config.access_token_secret = @tokens['ACCESS_SECRET']
end
end
def tweet content
begin
print 'Tweeting ... '
@rest_client.update(content)
puts 'succeeded.'
rescue => e
puts e.message
end
end
private
def get_access_token
puts 'Get access token.'
Dotenv.load
consumer = OAuth::Consumer.new(@keys['CONSUMER_KEY'],
@keys['CONSUMER_SECRET'],
{:site=>"https://api.twitter.com"}
)
request_token = consumer.get_request_token
mech = Mechanize.new
mech.user_agent_alias = 'Windows IE 7'
mech.get request_token.authorize_url
mech.page.form do |f|
f.field_with(:name => 'session[username_or_email]').value = ENV['TWITTER_USER_NAME']
f.field_with(:name => 'session[password]').value = ENV['TWITTER_PASSWORD']
end.click_button
pin = mech.page.search('#oauth_pin').text
access_token = request_token.get_access_token(:oauth_verifier => pin)
tokens = {}
tokens['ACCESS_TOKEN'] = access_token.token
tokens['ACCESS_SECRET'] = access_token.secret
File.write(TOKEN_FILE_NAME, tokens.map{|k,v| "#{k}=#{v}" }.join("\n") << "\n")
return tokens
end
def load_file file_name
data = {}
File.read(file_name).split("\n").each do |line|
k,v = line.split("=")
data[k] = v
end
return data
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment