« ソーシャルブックマーク管理ツール 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():



