
「[言語][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
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
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
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 エラーが発生する文字はありますがとりあえず的な。