2009年05月30日

iPhoneSDKでソラマメRSSをHackしてみる修行中

● もっと早くから始めていたらよかった。。。

今年の春から、仕事でiPhoneのアプリを作るようになりました。
まだまだ修行中見習い中ですが、これはおもしろい! ^^/
どんどん、深みにハマりつつあります。

私のiPhoneは、会社支給の開発用機なんですけど、iPhone OS 3.0 を実装した
新機種が出たら、速攻買いの予定です。
新機種は、自分でバッテリー交換できるようになってたら嬉しいのになぁ。

それまでに、プログラムもデザインも勉強して、出遅れた分がんばります。




● 私のブログ専用のRSSリーダーです。 (あまり意味が無いですけど。。。)

ソラマメのfeedを読み込んで、RSSリーダを練習で作ってみました。

「http://pastel.slmame.com/index.xml」から、XMLノードツリーを読み込んで
UIView上に埋め込んで、スクロールできるようにしただけの、超原始的なRSSリーダーです。

標準的なパーツを使っているだけなので、とりあえずデザイン見栄えは2の次ですが。。。^^;




リストをタップすると、そのページが横から出てきます。
やっぱり文字が小さくて、読みづらいです。




iPhoneを水平にしたときの、ランドスケープモードに対応してあります。
これくらいなら、文字が少し読み易くなります。



やっぱりブログ側で、iPhone用のスタイルシートを仕込んでおくのがいいのでしょうね。




● iPhone SDK

Appleデベロッパサイトから無償で配布されている、iPhone SDKです。
iPhoneアプリをMacOSXで動かすiPhoneシミュレータが含まれていますので、iPhoneを持っていない
Macユーザもプログラミングの勉強ができますよ。  ^^V






● ソラマメのRSSフィードを、Objective-C言語でパースするところ。

写真だけではつまらないので、Objective-Cで、XMLをパースする部分をご紹介します。
といっても、殆どの方は興味ないと思いますけど。。。 ^^;

JavaやRubyなどのオブジェクト指向言語でXMLを扱った経験のある方なら、少し勉強するだけで、
すぐにコーディングできると思います。(C++と言わないところがアレで。:p)


ソラマメのRSSは、こんな風にごく基本的な形式です。
ブログ全体のタイトルやURLに続いて、各記事(item)の繰り返しです。

【http://pastel.slmame.com/index.xml】
<rss>
    <channel>
        <title>なにかつくってひまつぶし</title>
        <link>http://pastel.slmame.com</link>
        <description>お友達を増やしたくて始めたSLなのに・・・・・</description>
        <item>
            <title>Macで影付きビューアをコンパイル/ビルドしてみるテスト</title>
            <link>http://pastel.slmame.com/e618772.html</link>
            <description>本文</description>
            <pubDate>Sat, 16 May 2009 20:45:24 +0900</pubDate>
        </item>
        <item>
            <title>ブレンダーで鎖を作る(便利なスカルプ一括組立てスクリプト)</title>
            以下、記事(itemタグ)の繰り返し
        </item>
    </channel>
</rss>


Objective-Cで、XMLを処理する手順です。 Javaとか他の言語でも、大体こんな手順ですね。
コメントをしっかりつけると、自分の理解にもなります。
NSString*  str  =  @"http://pastel.slmame.com/index.xml";
//  URLの文字列を、NSStringクラスのインスタンスに設定します。
//  @"Hello World" みたいに、@をつけた文字列は、NSStringインスタンスに直接代入できます。


NSURL*  urlstr  =  [NSURL  URLWithString: str];
//  NSURLクラスのインスタンスに、URLWithString:メソッドで、URL文字列を設定します。
//  [ ] で囲まれた部分が、インスタンスを作ったりメソッド呼び出しなど、オブジェクト指向な部分です。
//  タイピング量が増えますけど、見慣れてくるとC言語の部分と区別ができて、分かり易いと思えてきます。


NSXMLDocument*  document;
document  =  [ [NSXMLDocument  alloc]  initWithContentsOfURL:urlstr  options:0  error:nil];
//  NSXMLDocumentインスタンスを作って、initWithContentsOfURL:メソッドを呼びます。
//  この1行で、指定したURLからXMLを取得できます。
//  取得したXMLを、documentから取り出せる準備ができました。



NSArray*  arr;
arr  =  [document  nodesForXPath:  @"/rss/channel/title"  error:nil];
//  NSArrayクラスの配列インスタンスを用意します。
//  ブログタイトルのパス「/rss/channel/title」を指定してnodesForXPath:メソッドでノードを取得します
//  同じノードが複数ある場合があるので、配列型で返ってきます。


str  =  [ [arr  objectAtIndex:0]  stringValue];
NSLog(@"(ブログタイトル)%@",  str);
//  配列の先頭(0番目)に入っている、ブログのタイトルを、文字列型で取り出します。
//  ブログのタイトルをデバッグ用コンソールに表示します。 「%@」は文字列インスタンスをあらわす書式


arr  =  [document  nodesForXPath:@"/rss/channel/link"  error:nil];
str  =  [ [arr  objectAtIndex:0]  stringValue];
NSLog(@"(ブログURL)%@",  str);
//  同じように、URLのパス「/rss/channel/link」を指定して、URLを取り出します。

arr  =  [document  nodesForXPath:@"/rss/channel/description"  error:nil];
str  = [ [arr  objectAtIndex:0]  stringValue];
NSLog(@"(ブログ説明)%@",  str);
// ブログ説明文のパス「/rss/channel/description」を指定して、説明文を取り出します。


arr  =  [document  nodesForXPath:@"/rss/channel/item"  error:nil];
//  ブログの記事「/rss/channel/item」を取り出します。
//  記事の数だけ、配列arrに返ってきます。


NSXMLNode*  node;
//  ノード格納用のインスタンスを用意します。

for  (int  i=0;  i<[arr  count];  i++) {
//  記事の数[arr  count] だけ、ループさせます。

    node  =  [ [ [arr objectAtIndex:i]  nodesForXPath:@"title"  error:nil]  objectAtIndex:0];
    NSLog(@"(タイトル)%@",  [node  stringValue]);
    //  i 番目の記事の、タイトル(title)を取り出します。

    node  =  [ [ [arr  objectAtIndex:i]  nodesForXPath:@"link"  error:nil]  objectAtIndex:0];
    NSLog(@"(URL)%@",  [node  stringValue]);
    //  i 番目の記事の、URL(link)を取り出します。

    node  =  [ [ [arr  objectAtIndex:i]  nodesForXPath:@"pubDate"  error:nil]  objectAtIndex:0];
    NSLog(@"(Date)%@",  [node  stringValue]);
    //  i 番目の記事の、投稿日付(pubDate)を取り出します。
}



NSLogの出力結果は、デバックコンソールに表示されます。
これで、XMLから必要なノードが自由に取り出せるようになりました。





● 夢だけは、好き勝手に大きく。。。 (^^ゞ

1本100円くらいの収入でもいいですから、大勢の人がダウンロードしてくれるようなiPhoneアプリが
作れたらいいですね~。

iPhoneで動くSLビューアも試してみましたが、あっという間にバッテリが切れます。
ただ単に移植すればいい、という単純発想だけでは駄目なのでしょうね。

iPhoneはWebサーバにもなりますし、SQLiteデータベースも動きます。
アイデア次第では、インワールドと連携するおもしろいアプリが作れそうです。
(だけど、無料でもダウンロードしてくれるかどうか。。。:D)




同じカテゴリー(iPhone)の記事
 SIO2とシティエンジンでiPhoneの中に街を作るテスト中 (2009-07-19 01:48)
 ブレンダーからiPhoneへ(SIO2エクスポータの実験) (2009-06-27 00:36)

Posted by ぱすてる at 22:23│Comments(5)iPhone
この記事へのコメント
あの~~
以前から、拝見させてもらってます^^

唐突に質問なんですが・・・
ブレンダーを使ってるのですが、
スカルプの中心軸ってブレンダーには変えられるボタンが、あるんでしょうか・・・
もう少し勉強して来いと思われると思いますがw英語表記難しくて・・・
勝手な、質問申し訳ありません。
Posted by Qyasvaru at 2009年06月02日 03:39
(^^) Qyasvaruさん、初めまして。

具体的に何がしたいのかよくわからないのですが、たとえば、
 1)キューブでスカルプメッシュを包む。
 2)キューブの6面全てのフェイスを削除する。
 3)キューブとスカルプをJOINする。
 4)スカルプをBakeしてインワールドにアップする。
こんな風にすると、キューブのZ軸の位置が、インワールドでの回転の中心軸にする事が出来ます。
スカルプの回転軸をキューブのZ軸に合わせておくといいです。
いちど試してみてください。
Posted by ぱすてるぱすてる at 2009年06月03日 22:02
じゃあ、まずは「モーさん追跡アプリ」などを。。。^^v
Posted by uggs nederland at 2011年09月15日 16:54
Great!This article is creative,there are a lot of new idea,it gives me inspiration.I think I will also inspired by you and think about more new ideas
Posted by burberry sale at 2011年09月16日 16:25
Thank you for the good writeup.ありがと
Posted by tiffany and co at 2011年10月12日 15:31
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。