gikoha’s blog

個人的メモがわり

HTML parse for iPhone

dataWithContentsOfURLを使うと簡単にURLを取ってこれます
タイムアウトとか気にするならNSURLConnectionなんぞを使ってダウンロードをしないといけないのですが、ただ取ってくるだけならxxxWithContentsOfURLで十分。
ただ取ってきた内容を解析するのが面倒でした。
Google codeのTouchXMLはHTMLって明記されてなかったから Cocoa with loveのやつを使いました
下のコードは someTextFieldのテキストの内容を cgiに渡すためにエンコードして渡し戻ってきたHTMLからbodyの部分だけ切り出すものです (要:XPathQuery.m/h ; 参考URLへ. header search pathにlibxml2を加えるのを忘れずに)

	NSString *moji = [someTextField text];
	NSString *encoded = CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef) moji, NULL, CFSTR (";,/?:@&=+$#"), kCFStringEncodingUTF8);
	NSString *reqstr = [NSString stringWithFormat:@"http://xxx.org/test.cgi?mode=value&ID=%@", encoded];
	NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:reqstr]];
	NSArray *arr = PerformHTMLXPathQuery(data, @"//body");		// get body portion in the HTML doc.
	NSString *content = [[[[arr objectAtIndex:0] objectForKey:@"nodeChildArray"] objectAtIndex:0]
		objectForKey:@"nodeContent"];	// get first "body" content


参考
Using libxml2 for XML parsing and XPath queries in Cocoa
XPath : wikipedia

これでcontentに〜の内容が入る

それと対になるperl cgi codeとしては.. (要perl5)

#!/usr/bin/perl

use CGI qw(:standard);
use strict 'refs';
use lib '..';
use CGI::Carp qw/fatalsToBrowser/;
print  header(-expires=>'now',-charset=>'utf8'), 
     start_html( 
      -lang =>'ja', 
      -head=>meta( 
 {'http-equiv' => 'Content-Type', 
   -content    => 'text/html; charset=utf8' 
 }) 
    );
if(param('mode') eq "test")	# eq compares string
{
print   "てすと.";
}
else
{
print   "paramID:",param('ID');
}
 print       end_html;
exit 0;

こんなもんですかなー
これ使うといわゆるデータベースには劣るけれどサーバにデータを保存したりデータを取ってきたりが非常に簡単になります