読者です 読者をやめる 読者になる 読者になる

c4se記:さっちゃんですよ☆

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

.。oO(此のblogは、主に音樂考察Programmingに分類されますよ。ヾ(〃l _ l)ノ゙♬♪♡

音樂はSoundCloud等バラバラの場所に公開中です。申し訳ないがlinkをたどるなどして探してください。

考察は現在は主に此のblogで公表中です。

programmingは、ひろくみせるものはGitHubで、個人的なものはBitBucketで開発中です。

c4se

OperaWatirでOperaをTwitter botに!

Programming Opera Ruby

ダメ!絶対。
[.。oO(さっちゃん Advent Calendar) http://atnd.org/events/22829 ]9日目
2日休んでしまった…orz
明日はOpera忘年会です。
Opera 11.6が出ましたね。関係有りませんが。

What's OperaDriver?

[Selenium http://seleniumhq.org/ ][Watir http://watir.com/ ]と云うツールが有ります。これらはWebのテスティングツールで、喩えばPadrinoでWebサービスを作ったとして、ですね。ユーザがwebブラウザでこういう動作をしたら、サーバは期待した値を返すか、ブラウザでも動作で、JavaScriptは期待した動作をするか、等をテストしたいわけです。また、webブラウザを作っている人でしたら、ブラウザがあちこちのwebサイトでちゃんと動くかテストしたいわけです、楽に。
[Opera Driver http://www.opera.com/developer/tools/operadriver/ ]は、そんなSelenium/WebDriverのOpera版です。Opera DriverはSeleniumに同梱されているそうです。テストし放題ですね!
OperaWatirというのは、Javaで動くOperaDriverを、JRubyから操作できるようにしたラッパーです。RSpecし放題ですね>ω<!
まぁそんな事に今回興味はありませんが。。
ちぢめて言えば、OperaDriverは、Operaを外から操作でき、OperaWatirは、その操作をRubyで書けるんです。Operaの操作は、Opera Dragonflyが使っているのと同じ、ScopeプロトコルでOperaやOperaMobileと通信しているそうです。

OperaWatirの準備

  1. Operaをインストール
  2. JRuby 1.5.5をインストール
  3. OperaWatir gemをインストール


Operaは入ってますね。Opera使え。


Windowsでしたら、Rubyはきっと[pik http://rubyinstaller.org/add-ons/pik/ ]で管理していますね。pikはJRuby 1.5.6以上にしか対応していないので、手動でインストールして、pikに組み込まなければなりません。OperaWatirをJRuby1.6で使うとOperaDriver側のエラー続出でまともに動きませんでした。1.5.5にした途端動く様になって発狂しそうになりました。
JRuby 1.5.5を[ http://jruby.org/files/downloads/1.5.5/index.html ]からダウンロードしましょう。それをpikのrubiesにインストールします。Windows7ならC:\Users\yourusername\.pik\rubies\jruby-1.5.5だと思います。
pikの設定ファイルに追記します。.pikのconfig.yaml

"155: jruby 1.5.5 (ruby-1.8-7-p249) (2010-11-10 4bd4200) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_26) [Windows 7-amd64-java]":
  :path: !ruby/object:Pathname 
    path: C:/Users/yourusername/.pik/rubies/jruby-1.5.5/bin

等と適当な事を追記しましょう。此れでJRuby 1.5.5のインストールは終わりです。

pik use jruby 1.5.5

で、jrubyコマンドが使えます。


OperaWatirのインストールは直ぐです。

jruby -S gem install operawatir

です。OperaDriverは同梱されていて、一緒にインストールされます。

OperaWatirの実行手順

RSpecしないでいいなら

require 'rubygems'
require 'operawatir'

して、

jruby *.rb

でいいそうですが、Operaのエラーが出て動きません。知りません。
operawatirコマンドがインストールれているので、それを使いましょう。

require 'rubygems'
require 'operawatir'

browser = OperaWatir::Browser.new
browser.goto 'http://c4se.tk'

これを適当なファイルに保存して。opera.rbにしましょうか。Operaを立ち上げておいて、

operawatir -m opera.rb

を実行します。Operaopera:debugを開いて、コンソール側にReady to accept connections on port 7001の記述が出力されたら、Connectをクリックします。
サイトが開きましたね!

ついったーbot

以下のコードをoperawatir -mで実行しましょう。

require 'rubygems'
require 'operawatir'

messages = ['.。oO(OperaWatirヾ(〃l _ l)ノ゙)',
  '.。oO(人生は30000日しかない)',
  '.。oO(Opera使え)',
  '.。oO(生姜ももんがはいかが?)',
  '.。oO(またサソリました)',
  '.。oO(虫たちの弟子です)',
  '.。oO(おぺらわふー>ω<)',
  '.。oO(, - ,---- (U(    ) | |∨T∨ (__)_))',
  '.。oO(もふり✖╹◡╹✖)',
  '.。oO(( ╹ヮ╹)ノ)',
  '.。oO(踊り狂って死ぬ)',
  '.。oO(12人のももんが(〃l ω l))']
messages.shuffle!

browser = OperaWatir::Browser.new
browser.goto 'http://favstar.fm/me'
messages.each do |message|
  browser.link(:class, 'newTweet').click
  sleep 1
  script = <<"SCRIPT"
document.querySelector('.tweet_text').innerHTML = '#{message}';
send_tweet();
hide_tweet_dialog();
SCRIPT
  browser.execute_script script
  sleep 30
end

sleep 30でエラーですね! はぁ……