mixi echo 用 Pragger プラグインを作ってみた
「RubyやってるのにPraggerやってないなんてありえないよねー(笑)」で評判のPraggerですが、まだ触ったこともなかったので練習がてらmixiエコー(をget/にpost)するようなPraggerプラグインを作ってみた。コードを書くにあたっては、boumankan Pragger用プラグインをおおいに参考にさせて頂きました。感謝。
要件
mechanize を使用して実装しているので、mechanizeが必須です。
gem install mechanize
などとして、mechanizeをrubygems経由で落としてきてください。mechanizeはlibxml-devとlibxslt-devに依存していますから、それらも必要に応じてインストールしてください。
インストール方法
HowToMakePluginに、Praggerプラグインのインストール方法が書いてありますから、こちらを参照してください($PRAGGER_ROOT/pluginにコピーするだけですが・・・)。以下、以下のようなディレクトリ構成で動作させていると仮定します。
$PRAGGER_ROOT |-- plugin | |-- Mixi | | |-- mixi_get_echo.rb | | `-- mixi_post_echo.rb |-- config.yaml |-- mixi_auth.yaml `-- pragger.rb
mixi_get_echoの使い方
praggerのルートディレクトリにおいて、config.yamlを編集します。
- module: const_list config: - 1000000000 # <-ここに 取得したい人のidを記入する - module: Mixi::mixi_get_echo config: authfile: ./mixi_auth.yaml - module: RSS::save config: filename: mixi_get_result.rdf title: mixi
などとしてください。次に、mixi_auth.yamlを編集します。email、password、idの3つの要素を編集する必要があります。
email: xxxx@xxxxxx.com # <-自分のmixiアカウントのemailアドレス password: xxxxxxxxxxxx # <-自分のmixiアカウントのパスワード id: xxxxxxxx # <-自分のid
コロンの後に半角スペースが入ることに注意してください。この状態で、
./pragger.rb
とすると、に指定した id のmixiエコーをフィードにまとめた、mixi_get_result.rdf が吐き出されます。
mixi_post_echo使い方
praggerのルートディレクトリにおいて、config.yamlを編集します。
- module: const_list config: - test_dayo - module: Mixi::mixi_post_echo config: authfile: ./mixi_auth.yaml
などとして、mixi.auth.yamlをmixi_get_echoと同様にセットアップした上で、
./pragger.rb
とすると、にmixiエコーにtest_dayoと書き込まれます。
ソースファイル
長いので、わけます。
#!/usr/local/bin # mixi_post_echo.rb begin require 'kconv' require 'rubygems' require 'mechanize' require 'logger' rescue LoadError end def mixi_post_echo( config, data ) auth = YAML.load( File.read( config['authfile'] ) ) agent = WWW::Mechanize.new page = agent.get( 'http://mixi.jp/' ) form = page.forms[0] form.fields.find { |f| f.name == 'email' }.value = auth["email"] form.fields.find { |f| f.name == 'password' }.value = auth["password"] form.fields.find { |f| f.name == 'next_url' }.value = "/home.pl" page = agent.submit( form, form.buttons.first ) page = agent.get( 'http://mixi.jp/recent_echo.pl?id=' + @id.to_s ) # add _echo.pl form = page.forms[1] form.fields.find { |f| f.name == 'body' }.value = data page = agent.submit( form,form.buttons.first ) end
#!/usr/local/bin # mixi_get_echo.rb begin require 'kconv' require 'rubygems' require 'mechanize' require 'logger' rescue LoadError end def mixi_get_echo( config, data ) auth = YAML.load( File.read( config['authfile'] ) ) agent = WWW::Mechanize.new page = agent.get( 'http://mixi.jp/' ) form = page.forms[0] form.fields.find { |f| f.name == 'email' }.value = auth["email"] form.fields.find { |f| f.name == 'password' }.value = auth["password"] form.fields.find { |f| f.name == 'next_url' }.value = "/home.pl" page = agent.submit( form, form.buttons.first ) contents = [] data.each{ |id| contents << agent.get( 'http://mixi.jp/recent_echo.pl?id=' + id.to_s ).root.search('td.comment') puts "fetching #{id}'s mixiecho..." sleep 2.1 } echo = [] contents.to_s.each { |line| #puts line #for debug if ( !(line =~ /^(\s|\<|\()/) ) echo << line end } return echo end