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】
Objective-Cで、XMLを処理する手順です。 Javaとか他の言語でも、大体こんな手順ですね。
コメントをしっかりつけると、自分の理解にもなります。
NSLogの出力結果は、デバックコンソールに表示されます。
これで、XMLから必要なノードが自由に取り出せるようになりました。
● 夢だけは、好き勝手に大きく。。。 (^^ゞ
1本100円くらいの収入でもいいですから、大勢の人がダウンロードしてくれるようなiPhoneアプリが
作れたらいいですね~。
iPhoneで動くSLビューアも試してみましたが、あっという間にバッテリが切れます。
ただ単に移植すればいい、という単純発想だけでは駄目なのでしょうね。
iPhoneはWebサーバにもなりますし、SQLiteデータベースも動きます。
アイデア次第では、インワールドと連携するおもしろいアプリが作れそうです。
(だけど、無料でもダウンロードしてくれるかどうか。。。:D)
今年の春から、仕事で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>
<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)を取り出します。
}
// 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)
Posted by ぱすてる at 22:23│Comments(5)
│iPhone
この記事へのコメント
あの~~
以前から、拝見させてもらってます^^
唐突に質問なんですが・・・
ブレンダーを使ってるのですが、
スカルプの中心軸ってブレンダーには変えられるボタンが、あるんでしょうか・・・
もう少し勉強して来いと思われると思いますがw英語表記難しくて・・・
勝手な、質問申し訳ありません。
以前から、拝見させてもらってます^^
唐突に質問なんですが・・・
ブレンダーを使ってるのですが、
スカルプの中心軸ってブレンダーには変えられるボタンが、あるんでしょうか・・・
もう少し勉強して来いと思われると思いますがw英語表記難しくて・・・
勝手な、質問申し訳ありません。
Posted by Qyasvaru at 2009年06月02日 03:39
(^^) Qyasvaruさん、初めまして。
具体的に何がしたいのかよくわからないのですが、たとえば、
1)キューブでスカルプメッシュを包む。
2)キューブの6面全てのフェイスを削除する。
3)キューブとスカルプをJOINする。
4)スカルプをBakeしてインワールドにアップする。
こんな風にすると、キューブのZ軸の位置が、インワールドでの回転の中心軸にする事が出来ます。
スカルプの回転軸をキューブのZ軸に合わせておくといいです。
いちど試してみてください。
具体的に何がしたいのかよくわからないのですが、たとえば、
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