コマンドラインでツイートするRubyスクリプト(つづき)
先日、コマンドラインでツイートするRubyスクリプトを作ってみましたが、引数の最後がURLだった場合、Google URL Shortener APIを使って短縮するようにしてみました。
このままでも動きますが、GoogleはAccess Keyの取得を推奨し、設定するとAnonymous状態と比べて制限*1が拡大されます。先日、公開したスクリプトを既にお使いで、Access Keyを設定したい場合は、お手数ですが「~/.twrc」ファイルに「google_api_access_key」を追記してください。
google_api_access_key: <YOUR ACCESS KEY>
ソース
#!/usr/bin/env ruby $KCODE = 'u' require 'fileutils' require 'yaml' require 'rubygems' require 'oauth' require 'json' class Tw CONFIG_FILE = '.twrc' # Twitter API KEY = 'consumer_key' SECRET = 'consumer_secret' TOKEN = 'access_token' TOKEN_SECRET = 'access_token_secret' MAX_LENGTH = 140 TWITTER_API = 'http://api.twitter.com' UPDATE_URL = 'https://api.twitter.com/1/statuses/update.xml' # Google URL Shortener API ACCESS_KEY = 'google_api_access_key' GOOGLE_APIS = 'www.googleapis.com' SHORTENER_PATH = '/urlshortener/v1/url' attr_accessor :config def initialize config_file = File.join(File.expand_path('~'), CONFIG_FILE) begin @config = YAML.load(File.read(config_file)) rescue @config = { KEY => prompt(KEY), SECRET => prompt(SECRET), TOKEN => prompt(TOKEN), TOKEN_SECRET => prompt(TOKEN_SECRET), ACCESS_KEY => prompt(ACCESS_KEY) } File.open(config_file, 'w') {|f| f.write(@config.to_yaml)} FileUtils.chmod(0600, config_file) puts "saved to #{config_file}" end end def get_token consumer = OAuth::Consumer.new(@config[KEY], @config[SECRET], :site => TWITTER_API) token_hash = { :oauth_token => @config[TOKEN], :oauth_token_secret => @config[TOKEN_SECRET] } access_token = OAuth::AccessToken.from_hash(consumer, token_hash) end def shorten_url(long_url) params = {'longUrl' => long_url} params.store('key', @config[ACCESS_KEY]) if @config[ACCESS_KEY] && !@config[ACCESS_KEY].empty? response = '' http = Net::HTTP.new(GOOGLE_APIS, 443) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE response = http.post(SHORTENER_PATH, params.to_json, {'Content-Type' => 'application/json'}) return Net::HTTPOK == response.class ? (JSON.parse(response.body))['id'] : '' end private def prompt(string) print string.gsub('_', ' ').capitalize + ":" gets.strip end end URL_REGEXP = /(^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$)/ix tw = Tw.new if URL_REGEXP =~ (ARGV.length > 0 ? ARGV[ARGV.length - 1] : '') status = (ARGV[0, ARGV.length - 1].join(' ') + ' ' + tw.shorten_url($1)).strip else status = ARGV.join(' ') end unless status.empty? && status.split('').length > Tw::MAX_LENGTH response = tw.get_token.post(Tw::UPDATE_URL, {:status => status}) exit(Net::HTTPOK == response) else exit(false) end
設定
アプリをTwitter Applicationsで登録してください。アプリケーションの種類は、「クライアントアプリケーション」です。
Access TokenとAccess Token Secretは、アプリを登録した後、右サイドメニューにある「My Access Token」をクリックすると取得できます。
Access Keyは、Google APIs Consoleで取得できます。
引数なしで起動し、Consumer Key、Consumer Secret、Access Token、Access Token Secret、Google Api Access Keyを入力してください。Access Keyは省略する場合、単にエンターキーでスキップしてください。
使い方
Twitterに投稿したいメッセージを引数として、起動してください。複数の引数は、半角の空白で連結します。ただし、半角括弧が文中にある場合は、文章全体をダブルクォーテーションで囲ってください。
注意点
当たり前のことですが、「AS IS」*2です。
バレンタインチョコ欲しい!*3
欲しいプレゼントは…
Apple iPod touch 64GB MC547J/A
- 出版社/メーカー: Apple Computer
- 発売日: 2010/09/02
- メディア: エレクトロニクス
- 購入: 12人 クリック: 580回
- この商品を含むブログ (101件) を見る