1343458145 Objective-Cの質問です。HTMLを取得してog:imageを取得するプログラムを書いてみました。GitHubに上げています。ところが、例外が発生します。


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

なぜ例外が発生するのか、教えて下さい。よろしくお願いします。

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

回答1件)

id:x2x2tone No.1

回答回数5ベストアンサー獲得回数0スマートフォンから投稿

ニコ動には該当タグがなくて、日経には該当タグあるように見えますが、ニコ動で成功してますか?

id:weed_7777

成功しています・・・なんで???

2012/07/28 16:50:29
  • id:standard_one
    細かいことはよくわかりませんが、成功例に og:image がなくて、失敗例には存在するんですね。
    逆ならわかるんですが
  • id:windofjuly
    うぃんど 2012/07/28 17:55:09
    実験環境が無いのでコメントにしておきますが、
    質問文の2例を見てみると、成功例はutf-8で、失敗例はeuc-jpです。
    他の成功例や失敗例でも、キャラクタセットを確認してみるとよいかもしれません。
  • id:weed_7777
    なんと!早速試してみます。
  • id:weed_7777
    文字コードを判別させたらいけました!ありがとうございます!
  • id:weed_7777
    こんな関数を作りました。

    - (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;
    }
  • id:weed_7777
    正常に動作するバージョンをGitHubに上げました。

    https://github.com/weed/p120728_GetOgImage

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

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

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

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