Archive for 11月, 2012

PostHeaderIcon Rubyを使ってtwitter投稿してみた

Rubyを使って、twitterのbotさんを作りたいなと思い立ち、上記タイトルに挑戦してみました。

ソースコードは簡単なようなので、すぐにできるかなと思いきや、意外と落とし穴が。

 

環境は、前回に引き続き Windows 7 (64bit)です(Rubyのインストールは32bit版)。

 

まず、Ruby Twitter Gemというライブラリをインストールします。

Ruby にはデフォルトで gemコマンドが入っているので、下記のコマンドでOKです。

gem install rubygems-update

gem install twitter

上記コマンドはここらへん([1] http://yorozu123.seesaa.net/article/147918925.html)を参考にしました。

 

私の環境では、一行目のコマンドを実行したとたんにエラーがたくさん出てきました。

どんなエラーだったか忘れてしまったのですが、Rubyをいったんアンインストールして、下記のワンクリックRubyインストーラーを使ってインストールし直したら解決しました。

http://rubyinstaller.org/

 

あとは、下記のコードをプログラミングして実行するだけ。


require 'rubygems'
require 'twitter'

YOUR_CONSUMER_KEY = "<consumer_key>"
YOUR_CONSUMER_SECRET = "<consumer_secret>"
YOUR_OAUTH_TOKEN = "<oauth_token>"
YOUR_OAUTH_TOKEN_SECRET = "<oauth_token_secret>"

Twitter.configure do |config|
 config.consumer_key = YOUR_CONSUMER_KEY
 config.consumer_secret = YOUR_CONSUMER_SECRET
 config.oauth_token = YOUR_OAUTH_TOKEN
 config.oauth_token_secret = YOUR_OAUTH_TOKEN_SECRET
end

# Initialize your Twitter client
client = Twitter::Client.new

client.update("Rubyからこんにちわー")

コードはこのサイト([2] http://d.hatena.ne.jp/yoshidaa/20110112/1294846937)を参考にしました。

 

最初は[1]のサイトのコードで実行したのですが、次のようなエラーが出て困りました。

twitter_test.rb:8:in `<main>’: uninitialized constant Twitter::HTTPAuth (NameError)

[2]のサイトに書かれているように、APIが古かったようです。(ここも参考になりますね [7] http://sferik.github.com/twitter/

 

あと、コード内のconsumer_key等ですが、TwitterのDeveloperサイト([3] https://dev.twitter.com/)から取得してください。

取得方法は次のサイト([4] http://support.dreamone.co.jp/Pandora/dp.do?jumpTo=DreamX&variables(LPID)=162)を参考にするといいでしょう。

 

ちなみにツイートをPOSTするときには、Application Type を Read and Write にしなければなりません。

次のQ&Aが参考になりました([5] https://dev.twitter.com/discussions/12216)。

 

これも気づきにくいのですが、変更後はKeyを再発行しなければなりません。ご注意ください。

でないとこんなエラーが出ます。

Error processing your OAuth request: Read-only appllication cannot POST (Twitter::Error::Unauthorized)

 

自分のアカウントに”Rubyからこんにちはー”が表示されたら成功です。

今日はこのへんで。

 

P.S.

GMailのアカウントを使って、twitterのアカウントを大量に作ることができるそうで。参考までに([6] http://www.lifehacker.jp/2009/08/twittergmail.html)。

 

PostHeaderIcon Rubyを触ってみた : HTTP GET

ずっと気になっていたけど、触れられずにいたRubyを使ってみました。

意外と簡単に書けるものですね。普段はJava使いなのですが、コード量が圧倒的に短くかけそうです。

 

今回はopen-urlというライブラリを使ってみたのですが、多少引っかかったので、それも含めてまとめます。

 

コードは下記の通り。Windows 7環境で実行します。(コード自体はどの環境でも同じです。)

 


# コマンドラインから
# ruby open-uri.rb http://www.oreilly.co.jp
# のように実行

require 'open-uri'

# URLを実行時引数から入力
url = ARGV[0]

# URLに該当するWEBページのHTMLをダウンロードして表示
open(url){|connection|
 connection.each_line do |line|
 print line
 end
}

 

実行コマンドはソースコードの通り。

実行時引数で指定したURLに該当するHTMLファイルがダウンロードされてコンソールに表示されます。

 

まず、実行時引数ですが、Rubyの場合、ARGVという定数に入ってくるようです。

Cなどの言語では、引数はint main(char **argv)のように指定しますが、Rubyではそもそもmain関数などないので、予約された定数として入ってくるのですね。

 

Cとの違いで気をつけるべきは、配列のインデックスです。0番目からURLの引数がはいってきます。

 

もうひとつは、なぜか出て来る実行時エラーで、下のようなもの。

 

おそらく、Rubyの実行環境に入っているzlib.dllが古いのでしょう。

http://haraita9283.blog98.fc2.com/blog-entry-64.html で言及されていました。

 

そこで、zlibのサイト でzlib.dllをダウンロードしてきます。

 

一見、ソースコードしかないようですが、落ち着いて下の方までスクロールしていくと、

zlib for Windows 9x/NT/2000/XP/2003 (DLL version, plus related utilities)

のようなリンクがあると思います。この先からZIPファイルをダウンロードしてきて展開しましょう。

 

私の環境では、Windowsの32bitなので、dll32というフォルダ内のzlibwapi.dllを持ってきました。このままでは反応しないので、zlibwapi.dll => zlib.dllのように改名して、実行するディレクトリに持っていきます。

 

これでうごくかな?

 

いやー、それにしてもコードが短い。

openのあたりの構文も面白いですね。