漫ろで行こう

自由気まま過ぎる、ギークになりたい男の子の話

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

Related Posts

  1. [言語][Ruby][Webサービス]mixi エコー改め mixi ボイスへ twitter ポスト
  2. [言語][Ruby][Webサービス]mixi ボイスに twitter ポストが出来ない
  3. [言語][Ruby][メモ]CORESERVER に Ruby 1.8.7 をインストール
  4. [言語][Ruby][メモ]CORESERVER に rubygems をインストール
  5. [Webサービス][言語][Javascript]mixi アプリを追加
このエントリーをはてなブックマーク この記事をクリップ! このエントリーをdel.icio.usに追加

Leave a Reply

Get Adobe Flash playerPlugin by wpburn.com wordpress themes
Proudly powered by WordPress. Theme developed with WordPress Theme Generator.
Copyright © 漫ろで行こう. All rights reserved.