mixiアプリを作成中…

とうとう関西も梅雨入り。

せっかくの週末なのに、外出をためらってしまうような天候。そこで、iPhoneアプリを作ってみることにした。もっとも、実際のところ、iPhoneアプリを作成するために使用する開発環境“Xcode”までは手がまわらなかったのだが。

iPhoneアプリの題材としては何でも良かったのだが、どうせならよく使うモノを作ろうということで、mixiを自分好みのレイアウトでブラウズするソフトにした。素人が作ることを考慮しても敷居の低い題材と思っています。

端的にいえば、mixiから出力されるHTMLをiPhoneが提供している部品に流し込めば良い。いくつか若干難易度が高そうな処理があるけど、まあ、なんとかなるだろう。全体的におおむね難易度が高くないということは、やる気が持続するということ。

mixiが度々問題になるのは、mixiは度々レイアウトを変更するということ。これにより、ユーザの使い勝手が良くなっていくのかもしれないけれども、アプリは特定のレイアウトを期待した実装になっているので、レイアウトが変われば正しく表示されなくなります。そこで“OpenSocial”という技術でなんとかならないかなと調べていたけど、どうも私の用途には合わないようだ。ごく簡単に言えば、欲しい情報をJavaで記述すれば良く、HTMLのように扱う情報にレイアウトが含まれているわけではないのでアプリ作成の視点では楽なのです。

しかしながら、mixiにおいては“OpenSocial”は“mixiアプリ”で使用することを前提にしているようで、mixiアプリを配置するためのサーバを配置しなければならなかったりで、ちょっと用途に合わないことが分かりました。そこで、泣く泣くレイアウト変更の影響を受けるHTMLを扱うことにしました。

HTMLを扱う上で重要なのは、必要な情報を見つけ出す処理。HTMLはレイアウト情報と実際に必要となる情報とが渾然一体となっているので、後者だけ収集しなければなりません。そこで正規表現なるものを使用することにします。詳細は [http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE 正規表現 – Wikipedia] を確認していただきたい。

正規表現にも方言があるようです。後々に理由は記述しますが、[http://limechat.net/cocoaoniguruma/index_ja.html CocoaOniguruma] を使用することにしました。

一般的にはiPhoneで [http://regexkit.sourceforge.net/RegexKitLite/index.html RegexKitLite] を使うみたいです。でも私の場合はいきなり、iPhoneアプリで正規表現を使ったアプリを記述するのは効率が悪いので、使い慣れた“Ruby”でテキストを抽出することに。

Rubyは正規表現として“Oniguruma”を使っているので、Rubyで確認した正規表現をそのまま使うにはiPhoneで動くOnigurumaがあれば良いのですが…探したらあったのです。それが前述の [http://limechat.net/cocoaoniguruma/index_ja.html CocoaOniguruma] だったのです。素晴らしい。

で、早速ニュースやら最新日記のなどのタイトルや投稿日時などを抽出する正規表現を書いてみたところで一日が終わりました【汗】

つたないソースですが、ニュースの一覧を表示するRubyスクリプトを貼付けておきます。


#!/usr/bin/ruby
# -*- coding: utf-8 -*-

require ‘kconv’
require “jcode”

$KCODE = ‘utf-8’

f = open(ARGV[0])
s = f.read
s = s.toutf8
s.gsub!(/\n/,”)
f.close

while s =~ /

.*?(.*?)<\/a>(?:)?<\/p><\/td>.*?

(.*?)<\/a><\/td>.*?

(\d{2}).*?(\d{2}).*?(\d{2}).*?(\d{2})<\/td>.*?<\/tr>(.*)/m do
date = $5 + ‘/’ + $6 + ‘ ‘ + $7 + ‘:’ + $8
puts “date=#{date}”

id= $1
media_id = $2
title = $3
news = $4
s = $9
puts “id=#{id}”
puts “media_id=#{media_id}”
puts “title=#{title}”
puts “news=#{news}”
puts ‘———————‘
end

引数に予めmixiから取得したニュース一覧を指定します。
例えば、“注目のピックアップ”なら http://news.mixi.jp/list_news_category.pl?id=pickup&type=bn をブラウザ等でダウンロードしておき、それを指定するのです。

結果は以下のようになります。

date=06/13 20:11
id=1241489
media_id=20
title=「はやぶさ」カプセル分離に成功、大気圏突入へ
news=読売新聞
———————
date=06/13 19:44
id=1241470
media_id=88
title=北陸地方が梅雨入り〜気象庁
news=日テレNEWS24
———————
date=06/13 19:03
id=1241446
media_id=4
title=SFCGから手数料3%徴収=買い戻しで出資法抵触の疑いも−振興銀検査妨害
news=時事通信社
———————
: 《もっと続くのですが省略》

上述のRubyスクリプトにてwhile文で使用している正規表現文字列を、iPhoneアプリでは [http://limechat.net/cocoaoniguruma/index_ja.html CocoaOniguruma] に渡してあげれば良いはず。

まだまだ時間がかかりそうだけれども、梅雨が終わるまでにはなんとか形にしてみようかと思います。