« ソーシャルブックマーク管理ツール 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
| 固定リンク
|
|
|
|
|
アマゾンわくわく探検隊
トラックバック
この記事のトラックバックURL:
この記事へのトラックバック一覧です: アマゾンの URL から ASIN を取得する関数 getASIN():