あ、そうだ。
せっかくUIWebView使ってる事だし「iPhoneアプリ開発、その(140)」のURLをhttp://localhost/test.phpからhttp://localhost/bbs.phpに変えてアクセスしてみよ~、ってやったんですよ。やるよね、普通。
![$テン・シー・シー-1](https://stat.ameba.jp/user_images/20091017/22/xcc/e9/13/j/o0329022310279211072.jpg?caw=800)
げええええ、文字化けしてるううう。
どうも、connection:didReceiveDataメソッドでの処理がまずかったみたいです。だいたい
なんてしなくても、htmlstringをNSMutableStringからNSMutableDataに変えて
で十分だったんすよ。よく考えろよ俺、み・た・い・な~。
あとは、connectionDidFinishLoadingメソッド側で
て文字列に変えてUIWebViewに渡す。ついでにコンソールの出力もここで一気におこなうようにしました。
![$テン・シー・シー-2](https://stat.ameba.jp/user_images/20091017/23/xcc/a3/6b/j/o0330022410279223159.jpg?caw=800)
ほらね、バッチリざんしょ
ちゃんと文字列も入力できる。
ていうか「書き込み/更新」ボタンでちゃんと更新されるでやんの。
すごいわUIWebView。
![$テン・シー・シー-4](https://stat.ameba.jp/user_images/20091017/23/xcc/ea/6a/j/o0330023110279238930.jpg?caw=800)
行の高さが狭いんで下の文字は見えないけど、MacBook側ではちゃんと更新できてるのを確認
ていうことはUIWebViewにまかせて後はOK~、今までの自前POST処理の苦労はorz...
でもいいんですが、私はもうちょっと掘り下げます。
どういう風に掘り下げるかというと、掲示板の項目をUITableViewの行に対応させ、名前は自動入力、コメントだけ書き込むっていうGUIにしたいわけです。
ちょっと貧弱なSMS/MMSアプリちゅう感じで。
![$テン・シー・シー-5](https://stat.ameba.jp/user_images/20091017/23/xcc/fa/d2/j/o0201037010279292227.jpg?caw=800)
それと、iPhoneでアメブロ更新しようとして写真がアップできない事に気づいた人も何人かいると思います。iPhoneはFORMでファイルのアップロードは許可しないだよね~。
なので最終形態の写真付き掲示板に対応させるには、どうしても自前のPOST処理が必要になるわけですね。
というわけで、受け取ったHTML文をパースするために何使えば楽かな~と木下誠さんの
実践! iPhoneアプリ開発: RSSリーダの作り方 (3) - XMLをパースする
を読んでます。
ですな。こいつ使います。
で、libxml2が何をしてくれるかというと、HTML文(正確にはXML記述法になったHTML文、XHTML文)を読み込ませるとタグを発見するごとに、登録した関数を呼び出してくれます。
以下の関数(名前は自由)をそれぞれ登録しておくと
startElementHandler
タグ(<title>とかいうやつ)発見時に呼ばれる。この時点でタグが開かれた状態。
charactersFoundHandler
startElementHandlerに知らせたタグに対応する閉タグ(この場合</title>)が来るまでの文字列を渡すために呼ばれる。
endElementHandler
閉タグ発見時に呼ばれる。この時点でタグが閉じられた状態。
というように繰り返し呼び出してくれます。
![テン・シー・シー-6](https://stat.ameba.jp/user_images/20091018/00/xcc/ba/ca/j/o0450042910279321359.jpg?caw=800)
![テン・シー・シー-7](https://stat.ameba.jp/user_images/20091018/00/xcc/69/5b/j/o0450042910279321360.jpg?caw=800)
で、あれば、今回なら<p>タグを見張れば名前が、<font>タグを見張れば時間が、<blockquote>タグを見張ればコメントが取り出せる事になるわけですな。
組み込み方は、その次の回「RSSリーダの作り方 (4) - libxmlでパースする」で説明されてます。
レポートは次回!
とりあえず、URLをhttp://localhost/bbs.phpにして、文字化け直しと、行の高さを広くした奴をアップだ。
------------
サンプルプロジェクト:rss4.zip
せっかくUIWebView使ってる事だし「iPhoneアプリ開発、その(140)」のURLをhttp://localhost/test.phpからhttp://localhost/bbs.phpに変えてアクセスしてみよ~、ってやったんですよ。やるよね、普通。
![$テン・シー・シー-1](https://stat.ameba.jp/user_images/20091017/22/xcc/e9/13/j/o0329022310279211072.jpg?caw=800)
げええええ、文字化けしてるううう。
どうも、connection:didReceiveDataメソッドでの処理がまずかったみたいです。だいたい
len = [data length];
char* str = (char*)malloc(len + 1);
memcpy(str, [data bytes], len);
str[len] = 0;
[htmlstring appendString:[NSString stringWithCString:str
encoding:NSASCIIStringEncoding]];
free(str);
なんてしなくても、htmlstringをNSMutableStringからNSMutableDataに変えて
[htmlstring appendData:data];
で十分だったんすよ。よく考えろよ俺、み・た・い・な~。
あとは、connectionDidFinishLoadingメソッド側で
NSString* str = [[NSString alloc] initWithData:htmlstring
encoding:NSUTF8StringEncoding];
て文字列に変えてUIWebViewに渡す。ついでにコンソールの出力もここで一気におこなうようにしました。
printf([str UTF8String]);
![$テン・シー・シー-2](https://stat.ameba.jp/user_images/20091017/23/xcc/a3/6b/j/o0330022410279223159.jpg?caw=800)
ほらね、バッチリざんしょ
ちゃんと文字列も入力できる。
![$テン・シー・シー-3](https://stat.ameba.jp/user_images/20091017/23/xcc/ee/2e/j/o0299055510279230094.jpg?caw=800)
ていうか「書き込み/更新」ボタンでちゃんと更新されるでやんの。
すごいわUIWebView。
![$テン・シー・シー-4](https://stat.ameba.jp/user_images/20091017/23/xcc/ea/6a/j/o0330023110279238930.jpg?caw=800)
行の高さが狭いんで下の文字は見えないけど、MacBook側ではちゃんと更新できてるのを確認
ていうことはUIWebViewにまかせて後はOK~、今までの自前POST処理の苦労はorz...
でもいいんですが、私はもうちょっと掘り下げます。
どういう風に掘り下げるかというと、掲示板の項目をUITableViewの行に対応させ、名前は自動入力、コメントだけ書き込むっていうGUIにしたいわけです。
ちょっと貧弱なSMS/MMSアプリちゅう感じで。
![$テン・シー・シー-5](https://stat.ameba.jp/user_images/20091017/23/xcc/fa/d2/j/o0201037010279292227.jpg?caw=800)
それと、iPhoneでアメブロ更新しようとして写真がアップできない事に気づいた人も何人かいると思います。iPhoneはFORMでファイルのアップロードは許可しないだよね~。
なので最終形態の写真付き掲示板に対応させるには、どうしても自前のPOST処理が必要になるわけですね。
というわけで、受け取ったHTML文をパースするために何使えば楽かな~と木下誠さんの
実践! iPhoneアプリ開発: RSSリーダの作り方 (3) - XMLをパースする
を読んでます。
libxml2
ですな。こいつ使います。
で、libxml2が何をしてくれるかというと、HTML文(正確にはXML記述法になったHTML文、XHTML文)を読み込ませるとタグを発見するごとに、登録した関数を呼び出してくれます。
以下の関数(名前は自由)をそれぞれ登録しておくと
startElementHandler
タグ(<title>とかいうやつ)発見時に呼ばれる。この時点でタグが開かれた状態。
charactersFoundHandler
startElementHandlerに知らせたタグに対応する閉タグ(この場合</title>)が来るまでの文字列を渡すために呼ばれる。
endElementHandler
閉タグ発見時に呼ばれる。この時点でタグが閉じられた状態。
というように繰り返し呼び出してくれます。
![テン・シー・シー-6](https://stat.ameba.jp/user_images/20091018/00/xcc/ba/ca/j/o0450042910279321359.jpg?caw=800)
![テン・シー・シー-7](https://stat.ameba.jp/user_images/20091018/00/xcc/69/5b/j/o0450042910279321360.jpg?caw=800)
で、あれば、今回なら<p>タグを見張れば名前が、<font>タグを見張れば時間が、<blockquote>タグを見張ればコメントが取り出せる事になるわけですな。
組み込み方は、その次の回「RSSリーダの作り方 (4) - libxmlでパースする」で説明されてます。
レポートは次回!
とりあえず、URLをhttp://localhost/bbs.phpにして、文字化け直しと、行の高さを広くした奴をアップだ。
------------
サンプルプロジェクト:rss4.zip