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