自作のRSSフィードを読み込んでTwitterでつぶやくスクリプトも動かなくなってました。出ていたエラーは以下。

[2012-07-11 12:34:29 +0900 mode=load] Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8

普通に文字結合をしていた部分で文字コードのアンマッチが問題になってしまっているようです。

p "#{feed['comment']} / #{item.title} #{short_url}"

ただこれだけのコードなんですけど、RSSで取得してきた情報の中にASCII-8BITとUTF-8が混在していて問題になっているようです。

よく対処方法がわからなかったので、とりあえず全部UTF-8にしちゃいました。

feed['comment'] = feed['comment'].force_encoding('UTF-8')
item.title = item.title.force_encoding('UTF-8')
short_url = shorten(item.link).force_encoding('UTF-8')

とりあえずこれで動きました。

ちょっとスクリプトに手を入れた。こんな感じ。

今日やった事は

  • Rubyで短縮URLを展開する。
  • InstagramのWebAPIを叩いて画像のURLを取得する
  • Twitterから取得してきたつぶやき内に該当するURLが含まれていたらimgタグを挿入する

という感じ。

参考にさせてもらったのは以下のページのあたり。

展開とInstagramからの情報取得のあたりは以下のような感じ。
{{gist ‘3060973’}}
相変わらずとりあえず動きました程度の品質ですが……。

それにしても、Twitterからの情報取得およびtdiaryへの投稿スクリプトは適当にベタで書いてしまった物だから、そろそろ拡張するのもしんどい感じになってきてしまった。ちょっと構造を作り直したりしないとだめそうだ……。

簡単なWebサービスを前から作ってみたいと思っているのですが、手ごろなものがなくて伸ばし伸ばしになってました。仕事ではASP.NET + C#で簡単なものを作ってみて感覚もつかめたのですが、趣味ではそんなライセンス料のかかりまくるソリューションを構築できるはずもなく。以前はRuby on Railsを勉強したんだけど、重すぎて消化できてませんでした。

でも、今日sinatraを知ってすごく幸せな気分です。昔の生のCGIをperlで書いていたような時代に比べると天国みたいな環境ですね。なにか簡単なものを作ってみようと思います。

twitterのつぶやきを毎日自動的にスクリプトでtdiaryに投稿するようにしてあるのですが、そのスクリプトを改良してtwitpic.comの画像はサムネイルを表示するようにしてみました。それなりにきちんと動いている模様。

以下のサイトのスクリプトをいただいて携帯メールへの通知を実装してみました。一応うまく動いてるっぽいです。途中以下のような原因不明のエラーにかなり悩まされました。結局gemのライブラリのバージョンの問題だったようだけれども・・・まだはっきりいってよくわかってません。

require 'rubygems'
require 'twitter'
require 'twitter/console'
require 'json'
require 'time'
require 'yaml'
require 'tmail'
require 'tlsmail'

色々試した結果、gem(‘twitter4r’,’0.3.1′)を上に持っていくとエラーが出なくなりました。

require 'rubygems'
gem('twitter4r','0.3.1')
require 'twitter'
require 'twitter/console'
require 'json'
require 'time'
require 'yaml'
require 'tmail'
require 'tlsmail'

うーん?gemでバージョンを指定すると、その後のrequire文もその影響を受けるんですかねぇ?

この記事すばらしいです。まじめに時間をとって勉強したい!

Rubyプログラミング勉強用のシューティングゲームはちょっとづつ進行中。

  • 自機オブジェクトの生成、移動
  • 誘導弾の生成、移動、消去
  • 当たり判定の付与

あたりまで出来ました。

Rubyの流儀もそれなりに分かってきました。久しぶりにプログラミングが楽しいです。

素材はPresys net.さんのところのものを使わせていただきました。

Ruby/SDLがインストールされていないと動かないうえに全然中身はありませんが、貼り付けておきます。shooting.rbを実行すると開始します。

{{ul_display 0}}

2件のコメント

今日はRubyの文法なり、言語の勉強を一通りしてから、ちょこちょことRubyでシューティングゲームを作ってみました。さすがにプログラミング暦だけは長いだけあって、色々と分かるようになってきた。時間さえあればきちんとひとつの作品を作れそうな感じです。

でも、OOPはC++に挫折しつつJavaで学んだので、Rubyにおいて抽象クラスは作るべきなのかとか、いまいち間隔がつかめない。でも、Rubyでかけちゃう。うごいちゃう。そんな感じでなかなか新鮮です。