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.yamlmixi_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