人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Objective-Cの書き方がわかりません。HTMLのソースファイルを読み込んで(ここまではできました)以下のような一文を探し出し、URLの部分だけ取り出したいです。

<meta property="og:image" content="http://kokoga.hosii/address/desu.jpg" />

検索や置換、正規表現などを頑張ってみたのですが、どうにもうまく行きません。
どうぞよろしくお願いします。

●質問者: weed_7777
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● degucho
●34ポイント

ほかにもっと簡潔なやりかたがあるかもしれませんが、
こんな感じで取得できました。
正規表現で抜いたあと、「content="」と「"」の間を取り出しています

NSString *string = @"<meta property=\"og:image\" content=\"http://kokoga.hosii/address/desu.jpg\" />";
NSError *error = nil;
NSRegularExpression *regexp =
[NSRegularExpression regularExpressionWithPattern:@"content=\".+\""
 options:0
error:&error];
if (error != nil) {
NSLog(@"%@", error);
} else {
NSTextCheckingResult *match =
[regexp firstMatchInString:string options:0 range:NSMakeRange(0, string.length)];
NSRange resultRange = [match rangeAtIndex:0];
NSRange urlRange = NSMakeRange(resultRange.location + 9, resultRange.length - 9 - 1);
NSLog(@"%@", [string substringWithRange:urlRange]); 
}

weed_7777さんのコメント
あああ、ええと最初の文字列にページのHTMLを最初から最後まで入れます。その状態で正規表現でマッチさせようとすると、エラーが出てうまくいきません。対象文字列が長過ぎるんでしょうか?

deguchoさんのコメント
エラーとだけ書かれても他人にはなんのことだか分かりません。 こちらでこのページのhtml(73KB)で試したところ動作しております。

weed_7777さんのコメント
すいません、いま出先なのでエラーメッセージは書き込めないのですが、私の方は最初のMETAタグの取得がうまくいっていません。その部分を教えていただけますでしょうか?よろしくお願いします。

deguchoさんのコメント
コメントでソースが欠けてしまうので再回答させて頂きます。

2 ● degucho
●33ポイント ベストアンサー

コメントでソースが欠けてしまうので再回答させて頂きます。

NSString *string = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://q.hatena.ne.jp/1342645668"] encoding:NSUTF8StringEncoding error:nil];
NSError *error = nil;
NSRegularExpression *regexp =
[NSRegularExpression regularExpressionWithPattern:@"<meta property=\"og:image\" content=\".+\""
 options:0
error:&error];
if (error != nil) {
NSLog(@"%@", error);
} else {
NSTextCheckingResult *match =
[regexp firstMatchInString:string options:0 range:NSMakeRange(0, string.length)];
NSRange resultRange = [match rangeAtIndex:0];
NSLog(@"match=%@", [string substringWithRange:resultRange]); 
NSRange urlRange = NSMakeRange(resultRange.location + 35, resultRange.length - 35 - 1);
NSLog(@"url =%@", [string substringWithRange:urlRange]); 
}

weed_7777さんのコメント
ご丁寧にありがとうございます。あとで使わせて頂きます。取り急ぎ。

weed_7777さんのコメント
ありがとうございます。ほぼ期待通り動いていますが、ときどき下記のようなエラーを出してアプリケーションがクラッシュしてしまいます。例外処理で対応しようと思います。ありがとうございました。 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSRegularExpression enumerateMatchesInString:options:range:usingBlock:]: nil argument' *** First throw call stack: (0x140c022 0x159dcd6 0x13b4a48 0x13b49b9 0xaa6d40 0xaa796a 0x5138 0xf0c54 0xf13ce 0xdccbd 0xeb6f1 0x94d21 0x140de42 0x1dc4679 0x1dce579 0x1d534f7 0x1d553f6 0x1d54ad0 0x13e099e 0x1377640 0x13434c6 0x1342d84 0x1342c9b 0x12f57d8 0x12f588a 0x56626 0x1d5d 0x1cc5 0x1) terminate called throwing an exception

3 ● yeahnetjojo
●33ポイント

私も同じ問題が発生し、答えることを期待

---------------------------------------
miumiu 財布 通販

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ