Archive for 11月, 2012
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)。
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のあたりの構文も面白いですね。