アマゾンの URL から ASIN を取得する関数 getASIN()

観測気球

収集物の記録書庫 a data archive of collection -- collectible toys

[要旨] 現時点でのアマゾンの商品ページの URL のバリエーション全部(といいつつ、まだ抜けがあるかもしれません)に対応する ASIN 取得処理を C で書いてみました。実際に、bookey で使用しています。
[キーワード] アマゾン,ASIN

« ソーシャルブックマーク管理ツール bookey 0.15版 | トップページ | 今週のお買い物 (2006.09.03~09.09) »

2006.09.06

アマゾンの URL から ASIN を取得する関数 getASIN()

拙作の「ソーシャルブックマーク管理ツール」用に書いたコード(C で記述)を載せておきます。先日公開した JavaScript 版では対応しきれていなかった、 /tg/任意の文字列/-/ASIN という文字列(パターン)が含まれる URL にも完全に対応しています。

ちなみに、「はてなダイアリー」の商品紹介ページ(例えば、http://d.hatena.ne.jp/asin/4883374718)にも対応しています。amazlet.com (例えば、http://www.amazlet.com/browse/ASIN/B000GRUR78/) も OK。

/*
 *  getASIN()
 *      URL に含まれる ASIN を取り出す
 *      (amazon, はてな の URL が対象)
 */
static char *
getASIN(
        const char *url,    /* (I) 解析対象 URL */
        char       *asin    /* (O) ASIN 文字列  */
    )
{
    char    *p;
    char    *q;

    asin[0] = NUL;
    p = strstr( url, "/ASIN/" );
    if ( !p )
        p = strstr( url, "/asin/" );    /*「はてな」の場合を含む */
    if ( !p ) {
        p = strstr( url, "/gp/product/" );
        if ( p ) {
            p += 6;
            if ( !strncmp( p + 6, "images/", 7 ) )
                p += 7;
        }
    }
    if ( p )
        p += 6;

    if ( !p && strstr( url, "amazon" ) ) {
        p = strstr( url, "/detail/" );
        if ( p ) {
            /* インスタントストア (このパターンの場合は必ず、直前に */
            /* associate ID が存在する)                             */
            if ( (*(p - 1) >= '0') && (*(p - 1) <= '9') )
                p += 8;
            else
                p = NULL;
        }

        if ( !p ) {
            /* 検索結果 (2006年8月24日ごろから出現し始めた形式) */
            p = strstr( url, "/dp/" );
            if ( p )
                p += 4;
        }
        if ( !p ) {
            /* 
             *  /tg/任意の文字列/-/XXX/ や
             *  /tg/任意の文字列/任意の文字列/-/XXX/ の場合
             */
            p = strstr( url, "/tg/" );
            q = strstr( url, "/-/"  );
            if ( p && q && (p < q) )
                p = q + 3;
            else
                p = NULL;
        }
    }

    if ( p ) {
        q = strchr( p, '/' );
        if ( q ) {
            strncpy( asin, p, q - p );
            asin[q - p] = NUL;
        }
        else if ( strlen( p ) > 10 ) {
            strncpy( asin, p, 10 );
            asin[10] = NUL;
        }
        else
            strcpy( asin, p );
    }

    return ( asin );
}

関連ページ

投稿者: tsupo 2006.09.06 午前 09:35 | 固定リンク | このエントリーをはてなブックマークに追加 | このエントリを del.icio.us に登録 このエントリの del.icio.us での登録状況 | このエントリを Buzzurl に追加このエントリの Buzzurl での登録状況 | このエントリをlivedoorクリップに登録 このエントリのlivedoorクリップでの登録状況 このエントリをlivedoorクリップに登録している人の数 | 酢鶏巡回中

楽天市場


品揃え豊富で安い!NTT-X Store


アマゾンわくわく探検隊

トラックバック

この記事のトラックバックURL:

この記事へのトラックバック一覧です: アマゾンの URL から ASIN を取得する関数 getASIN():

コメント

ワード

ニッセン

fujisan.co.jp

楽天市場