og:imageというのはFacebookなどでURLを入力すると表示される画像です。この画像を指定するにはHTML中に以下のように書きます。
<meta property="og:image" content="http://business.nikkeibp.co.jp/article/NBD/20120727/235043/zu1.jpg">
そこでHTMLを全文取得してog:imageの部分を抜き出すプログラムを書きました。以下のファイルの44行目から75行目です。
https://github.com/weed/p120728_GetOgImage/blob/master/GetOgImage/ViewController.m
しかし、ちゃんと取得できる場合と例外を投げる場合があります。
成功例:http://www.nicovideo.jp/watch/1343369790
失敗例:http://business.nikkeibp.co.jp/article/NBD/20120727/235043/?ST=pc
なぜ例外が発生するのか、教えて下さい。よろしくお願いします。
ニコ動には該当タグがなくて、日経には該当タグあるように見えますが、ニコ動で成功してますか?
逆ならわかるんですが
質問文の2例を見てみると、成功例はutf-8で、失敗例はeuc-jpです。
他の成功例や失敗例でも、キャラクタセットを確認してみるとよいかもしれません。
- (NSString *)encodedStringWithContentsOfURL:(NSURL *)url
{
// Get the web page HTML
NSData *data = [NSData dataWithContentsOfURL:url];
// response
int enc_arr[] = {
NSUTF8StringEncoding, // UTF-8
NSShiftJISStringEncoding, // Shift_JIS
NSJapaneseEUCStringEncoding, // EUC-JP
NSISO2022JPStringEncoding, // JIS
NSUnicodeStringEncoding, // Unicode
NSASCIIStringEncoding // ASCII
};
NSString *data_str = nil;
int max = sizeof(enc_arr) / sizeof(enc_arr[0]);
for (int i=0; i<max; i++) {
data_str = [
[NSString alloc]
initWithData : data
encoding : enc_arr[i]
];
if (data_str!=nil) {
break;
}
}
return data_str;
}
https://github.com/weed/p120728_GetOgImage