古い記事
ランダムジャンプ
新しい記事
Yahoo!デベロッパーネットワーク (YDN) から
また新しいAPIが出ました。
Yahoo!ショッピングWebサービスで利用できるAPIが増えました
Yahoo!ショッピングWebサービスでは商品コード検索、
キーワードランキング、コンテンツマッチアイテム、
コンテンツマッチランキングのAPIが増えました。
(http://developer.yahoo.co.jp/ - 2008年8月28日)

技術的な注目ポイントは、
「コンテンツマッチアイテム」と
「コンテンツマッチランキング」という
二つのコンテントマッチ系API。

コンテンツマッチアイテム API


まずは前者のコンテンツマッチアイテム API について
解説していきます。

- コンテンツマッチアイテム
  http://developer.yahoo.co.jp/shopping/
  contentmatchitem/V1/contentMatchItem.html


コンテンツマッチアイテム API は、
指定されたURLのウェブページのテキストを解析して、
その内容にマッチするY!ショッピング内の商品リストを返します。

このようなコンテンツマッチによる商品提示は、
「Amazonおまかせリンク」[2006-06-29-2]
「楽天ダイナミックアド」[2007-07-17-1]などがあります。

アマゾンも楽天もWebページに簡単に貼り付けられる
「ブログパーツ」が提供されています。
ヤフーはまずは API 提供からですね。

コンテンツマッチ API は、楽天のが既に存在しています。
それとヤフーのとの違いは、
(1) 出てくる商品が違う(当然ですが)、
(2) ヤフーの方が内容にあった商品が多く出てくる(現状では)、
です。

特に「2」についてはその性能の差は分かりやすいかと思います。
(まあ、こういう技術は会社の方針や資金や工数とかで
いくらでも向上できる余地があるので、
あくまでも「現状では」ということに留意してください。)

一例をあげます。
「昆虫写真の展覧会へ行った」というブログ記事
(http://chalow.net/2008-08-02-1.html) に対しての、
Y!API のコンテンツマッチ結果
楽天APIでのコンテンツマッチ結果です。
「Y!」では昆虫に関する商品が並んでいますが、
「楽」では「ん?」と思うような商品も並んでいます。

また、「Y!」でも「楽」でも、
「ちょっと違うな」という商品が出てしまうことも多々あります。
そもそもどんな商品を出したらいいか
よくわからないページではそうなりがちです。
そこらへんについては
自然言語処理技術やデータマイニング技術の
さらなる適用によって、
精度の向上がはかられていくことと思われます。

コンテンツマッチアイテム API の細かい使い方はここでは書きません。
YDN のページをご参照ください。
対象ページの URL やアフィリエイト ID を指定して投げると、
商品情報入りの XML が返ってくるというものです。

Perl で簡単なサンプル CGI を作りました。
フォームを設置したので、
適当な URL を入れてお試しください。
(サンプルなのでアフィリエイトコードは入れていません)


以下、CGI のソースコードです。

■コード:
#!/usr/bin/perl -T
use strict;
use warnings;
use CGI;
use LWP::Simple;
use XML::Simple;
use HTML::Template;
use URI::Escape;
use utf8;
binmode STDOUT, ":utf8";

my $appid = "YahooDemo";

my $q = new CGI;
my $url = $q->param('u') || "";
$url =~ s/[\"<>]//g;

my $sr_ref = yapi({url => $url});

my $template = join("", <DATA>);
my $t = HTML::Template->new(scalarref => \$template,
                            global_vars => 1,
                            die_on_bad_params => 0);
$t->param(url => $url);
$t->param(results => $sr_ref);

print $q->header(-charset => 'UTF-8'), $t->output();

sub yapi {
    my ($args_ref) = @_;
    my $u = $args_ref->{url};
    return [] unless $u;
    my $eu = URI::Escape::uri_escape($u);
    my $url = "http://shopping.yahooapis.jp/ShoppingWebService/V1/contentMatchItem?"
        ."appid=$appid&url=$eu";
    my $response = get($url);
    my $xmlsimple = XML::Simple->new(ForceArray => [ 'Hit' ]);
    my $xml = $xmlsimple->XMLin($response);
    return [] unless $xml->{Result}->{Hit};
    foreach my $r (@{$xml->{Result}->{Hit}}) { # ad hoc, bk                                                    
        $r->{ImageUrl} = $r->{Image}->{Small};
    }
    return $xml->{Result}->{Hit};
}
__DATA__
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><TMPL_VAR name=url></title>
</head>
<body>
<h1><a href="<TMPL_VAR name=url>"><TMPL_VAR name=url></a></h1>
<form>
<input type="input" name="u" size="60" value="<TMPL_VAR name=url>">
<input type="submit">
</form>
<TMPL_LOOP name=results>
<p><a href="<TMPL_VAR name=Url>"><TMPL_VAR name=Name></a><br>
<img src="<TMPL_VAR name=ImageUrl>"></p>
</TMPL_LOOP>
<hr>
<a href="http://developer.yahoo.co.jp/about">Webサービス by Yahoo! JAPAN</a>
</body>
</html>
$appid は自分で取得したものを使ってくださいね。
(http://e.developer.yahoo.co.jp/webservices/register_application)

コンテンツマッチランキング API


二つのコンテントマッチ系APIのうちの残り、
コンテンツマッチランキング API については簡単に解説。

- コンテンツマッチランキング
  http://developer.yahoo.co.jp/shopping/
  contentmatchranking/V1/contentMatchRanking.html


こちらは、指定されたURLのウェブページのテキストを解析して、
その内容にマッチするY!ショッピング内のカテゴリを推測して、
そのカテゴリの人気ランキングの商品リストを返すAPIです。
使い方はコンテンツマッチアイテム API とほぼ同じ。

コンテンツマッチランキング API を使ったサンプル CGI です。


コードは先ほどのとほぼ同じなので割愛。

おわりに


というわけで、本日公開された Y!API の中から、
コンテンツマッチ系の二つを紹介しました。
今後もいろんな Y!API が出てきそうですね。

ref.
- [を] ヤフーの日本語係り受け解析APIとサンプルプログラム
  「なんちゃって文章要約」[2008-08-21-1]
- [を] Yahoo!デベロッパーネットワークにテキスト解析APIが登場!
  [2007-06-18-1]