
「[言語][Ruby][Webサービス]mixi エコー改め mixi ボイスへ twitter ポスト」や「[言語][Ruby][Webサービス]mixi ボイスに twitter ポストが出来ない」などで、ちょいちょい記載している Ruby を使った Twitter ポストを mixi ボイスへポストするスクリプトですが、4日ほど前から急に mixi にポストされなくなったので、原因を調査してみたところ Iconv::IllegalSequence が発生していることが判明しました。といっても、2日前くらいに直したのですが、内容はハチャメチャな暫定処理。うん、これは恥ずかしい。が、一応、何かの役に立てば的な感じでメモ。
実際にその時のスクリプト実行時エラーは以下のような感じ。
user@host:~/script/mixiEchoBot> ruby mixiEchoBot.rb
Link: プログラミング言語 Go ドキュメント — golang_docjp v0.1 documentation http://tumblr.com/xkz43zuky
/…/mechanize/util.rb:40:in `iconv’: ”\342\200\224 golang_docjp”… (Iconv::IllegalSequence)
from /usr/local/lib/…/mechanize/util.rb:40:in `from_native_charset’
from /usr/local/lib/…/mechanize/form.rb:152:in `from_native_charset’
from /usr/local/lib/…/mechanize/form.rb:144:in `proc_query’
from /usr/local/lib/…/mechanize/form.rb:143:in `map’
from /usr/local/lib/…/mechanize/form.rb:143:in `proc_query’
from /usr/local/lib/…/mechanize/form.rb:166:in `build_query’
from /usr/local/lib/…/mechanize/form.rb:165:in `each’
from /usr/local/lib/…/mechanize/form.rb:165:in `build_query’
from /usr/local/lib/…/mechanize/form.rb:214:in `request_data’
from /usr/local/lib/…/mechanize.rb:401:in `post_form’
from /usr/local/lib/…/mechanize.rb:344:in `submit’
from /usr/local/lib/…/mechanize/form.rb:130:in `submit’
from /usr/local/lib/…/mechanize/form.rb:136:in `click_button’
from mixiEchoBot.rb:83
from mixiEchoBot.rb:54:in `each’
from mixiEchoBot.rb:54
原因はというと、Tumblr 経由で Twitter にポストした「プログラミング言語 Go ドキュメント — golang_docjp v0.1 documentation」こちらの「—」の部分。他と文字コードが違うため、Mechanize 内部の iconv で IllegalSequence エラーが発生してしまいました。
スクリプト中のボタンクリックアクション時にエラーが発生しているようなので、暫定的ではありますが無理矢理動くように、IllegalSequence エラーが発生した際にキャッチして置換をかまして再ポストするように修正。
f = form['body'] =tweets[i]+comment
puts tweets[i]
form.click_button
これを以下のように無理矢理な感じで修正。
begin
f = form['body'] =tweets[i]+comment
puts tweets[i]
form.click_button
rescue
tweets[i] =tweets[i].gsub!(“—”,”-”)
f = form['body'] =tweets[i]+comment
puts tweets[i]
form.click_button
end
「—」だけに限らず、他にも色々と IllegalSequence エラーが発生する文字はありますがとりあえず的な。
Filed under: Ruby, Webサービス | Comment (0)

先日「[言語][Ruby][Webサービス]mixi エコー改め mixi ボイスへ twitter ポスト」という記事を書いて実際に試してみたものの、いざ CORESERVER にて cron の設定をしてみても動作しない。
試しにローカルの Cent OS で同様のことを試してみましたが、やはり動作せず。
色々試行錯誤してみた結果、小手先の小細工が必要なことが発覚。今のところ Ruby でしか発生していないけども、今後発生しないとも限らないので覚えていて損はないかなと。
rb を実行する sh を書く
#!/bin/sh
cd /絶対パス/
/usr/local/bin/ruby /絶対パス/mixiEchoBot.rb > /dev/null 2>&1
sh を実行する crontab を書く
*/5 * * * * /絶対パス/mixiEchoBot.sh
ローカルでは上記だけで十分だったのですが、CORESERVER では更に crontab へ小手先の小細工が。
各環境変数を crontab に書く
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/usr/local/mysql/bin:/usr/local/mysql/libexec:/usr/local/pgsql/bin
RAILS_ENV=production
RUBYLIB=/usr/local/lib
GEM_HOME=/usr/local/lib/ruby/gem
各パスなど(/usr/local/bin/ など)は、適宜自身の環境に合わせて修正してください。
やっと動いた……。
official.[mixi]
Filed under: Ruby, Webサービス | Comment (0)

と言うことで「5.1さらうどん」さんがポスト用 Ruby スクリプトを公開されていたのと CORESERVER への Ruby 設定が終わったので、早速試してみました。
twitterからmixiボイスにマルチポストするRubyスクリプト書いた – 5.1さらうどん
twitterからmixiボイスにポストするスクリプト関連まとめ+修正版 – 5.1さらうどん
CORESERVER における Ruby の設定に関しては以下を参考にしてみてください。
[言語][Ruby][メモ]CORESERVER に Ruby 1.8.7 をインストール
[言語][Ruby][メモ]CORESERVER に rubygems をインストール
がしかし、CORESERVER には WWW::Mechanize と rubytter がインストールされていないので、そちらを先にインストール。
user@host:~> gem install mechanize
user@host:~> gem install rubytter
スクリプトは「twitterからmixiボイスにポストするスクリプト関連まとめ+修正版 – 5.1さらうどん」から最新版をコピペして使ってください。
尚、2行目の「require ‘Mechanize’」のままでは動作しませんので、以下のように修正してください。
require ‘Mechanize’
↓
require ‘mechanize’
後は必要な項目を設定して動作させるだけの簡単なお仕事。
それでは良い、mixi エコー改め mixi ボイスライフを!
official.[mixi]
Filed under: Ruby, Webサービス | Comments (2)

ruby - Copyright (C) 1993-2009 Yukihiro Matsumoto
CORESERVER では Ruby が1.8.5のため、1.8.7にアップデートしたいと思います。
オフィシャルの「オブジェクト指向スクリプト言語 Ruby」から安定版の ruby 1.8.7-p174 をダウンロードしてインストール。
例によって prefix でインストール先を変更。
user@host:~/src> wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p174.tar.bz2
user@host:~/src> tar xvjf ruby-1.8.7-p174.tar.bz2
user@host:~/src> cd ruby-1.8.7-p174/
user@host:~/src/ruby-1.8.7-p174> ./configure –prefix=$HOME/local –disable-install-doc
user@host:~/src/ruby-1.8.7-p174> make
user@host:~/src/ruby-1.8.7-p174> make install
環境変数の設定および永続設定を行います。
自分は過去に「[言語][Python][メモ]レンタルサーバーで Python 追加モジュールのインストール」で設定しているので、今回は行いませんでしたが初めての人はやっておく必要があります。
user@host:~/src> export PATH=$HOME/local/bin/:$PATH
user@host:~/src> cd
user@host:~> echo “export PATH=$HOME/local/bin/:$PATH” >> .bashrc
バージョンを確認して問題なければ完了。
user@host:~> ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-linux]
official.オブジェクト指向スクリプト言語 Ruby
Filed under: Ruby | Comment (0)

Copyright © 2007, Ruby Central Inc. Ruby Central, Inc. is a 501(c)(3) tax-exempt non-profit organization. Donations are tax-deductible to the extent allowed by law.
CORESERVER で rubygems を使うための備忘録。
RubyForge: RubyGems: Project Info から rubygems 最新版のダウンロードとインストール。
例によってレンタルサーバーのため、prefix でインストール先は変更。
user@host:~/src> wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
user@host:~/src> tar zxvf rubygems-1.3.5.tgz
user@host:~/src> cd rubygems-1.3.5/
user@host:~/src/rubygems-1.3.5> ruby setup.rb –prefix=$HOME/local
環境変数への設定追加と反映。
user@host:~/src/rubygems-1.3.5> export RUBYLIB=$HOME/local/lib
user@host:~/src/rubygems-1.3.5> export GEM_HOME=$HOME/local/lib/ruby/gem
user@host:~/src/rubygems-1.3.5> source ~/.bashrc
このままでは環境変数がリセットされてしまうので、dot-bashrc に記述しておきます。
user@host:~/src> cd
user@host:~> echo “export RUBYLIB=$HOME/local/lib” >> .bashrc
user@host:~> echo “export GEM_HOME=$HOME/local/lib/ruby/gem” >> .bashrc
動作確認。
user@host:~> gem -v
1.3.5
なんて簡単!
official.RubyForge: Welcome, Ruby Central
Filed under: Ruby | Comments (2)