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


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

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/07/26 06:10:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:degucho No.2

回答回数281ベストアンサー獲得回数75

ポイント33pt

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

	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]); 
	}	
id:weed_7777

ご丁寧にありがとうございます。あとで使わせて頂きます。取り急ぎ。

2012/07/19 14:01:32
id: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

2012/07/20 17:01:38

その他の回答2件)

id:degucho No.1

回答回数281ベストアンサー獲得回数75

ポイント34pt

ほかにもっと簡潔なやりかたがあるかもしれませんが、
こんな感じで取得できました。
正規表現で抜いたあと、「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]); 
	}
他2件のコメントを見る
id:weed_7777

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

2012/07/19 13:24:30
id:degucho

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

2012/07/19 13:46:24
id:degucho No.2

回答回数281ベストアンサー獲得回数75ここでベストアンサー

ポイント33pt

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

	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]); 
	}	
id:weed_7777

ご丁寧にありがとうございます。あとで使わせて頂きます。取り急ぎ。

2012/07/19 14:01:32
id: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

2012/07/20 17:01:38
id:yeahnetjojo No.3

回答回数5ベストアンサー獲得回数0

ポイント33pt

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

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません