[C#] AsinItemManager : アマゾンの商品情報を最も取得できるライブラリ

C#で、amazonの商品情報を簡単に取得できるライブラリを作成したので公開します。
ファイルは、1ファイルだけで、下記のソースをコピペするだけで動作します。

using System.Xml;
 
//*********************************************************************
/// <summary> amazon商品情報の取得管理クラス 
/// </summary>
//*********************************************************************
class AsinItemManager {
 
    //*********************************************************************
    /// <summary> dan.co.jpのwebapiを使用してアマゾンの書籍情報を取得する
    /// example:
    ///    System.Xml.XmlDocument itemDoc = AsinBookManager.findByAsin("4003320212");
    ///    string asin     = AsinBookManager.getNodeTextDef( itemDoc, "/opt/ASIN",     "" );
    ///    string title    = AsinBookManager.getNodeTextDef( itemDoc, "/opt/ItemAttributes/Title",     "" );
    ///    string author   = AsinBookManager.getNodeTextDef( itemDoc, "/opt/ItemAttributes/Author",     "" );
    ///    string binding  = AsinBookManager.getNodeTextDef( itemDoc, "/opt/ItemAttributes/Binding",    "" );
    ///    string label    = AsinBookManager.getNodeTextDef( itemDoc, "/opt/ItemAttributes/Label",      "" );
    ///    string newPrice = AsinBookManager.getNodeTextDef( itemDoc, "/opt/ItemAttributes/ListPrice/FormattedPrice", "" );
    ///    string imageUrl = AsinBookManager.getNodeTextDef( itemDoc, "/opt/ImageSets/SwatchImage/URL", "" );
    ///    string linkUrl  = AsinBookManager.getNodeTextDef( itemDoc, "/opt/DetailPageURL", "" );
    /// </summary>
    /// 
    /// <param name="asin">	検索キー(ASIN)</param>
    /// <returns>書籍情報</returns>
    //*********************************************************************-
    public static XmlDocument findByAsin( string asin ) {
        string url = "http://api.dan.co.jp/asin/" + asin + ".xml";
        using ( XmlReader reader = XmlReader.Create( url ) ) {
            XmlDocument doc = new XmlDocument();
            doc.Load( reader );
            return doc;
        }
    }
 
    //*********************************************************************
    /// <summary> XmlDocumentから指定されたノードの情報を取得する
    /// </summary>
    /// <param name="doc">          取得対象のxml情報</param>
    /// <param name="xpath">        取得するノードのxpath式</param>
    /// <param name="defaultValue"> 指定したノードが無かったときの値</param>
    /// <returns>ノードのテキスト(InnerXml)</returns>
    //*********************************************************************
    public static string findNodeTextDef( XmlDocument doc, string xpath, string defaultValue ) {
        XmlNode node = doc.SelectSingleNode( xpath );
        if ( node == null ) {
            return defaultValue;
        } else {
            return node.InnerText;
        }
    }
 
    //*********************************************************************
    /// <summary> プライマリの商品画像一式を取得する
    /// example:
    ///     // System.Xml.XmlDocument itemDoc = AsinBookManager.findByAsin("4003320212");
    ///     System.Xml.XmlDocument itemDoc = AsinBookManager.findByAsin("4774166138");
    ///     System.Xml.XmlNode primaryImageSet = AsinBookManager.getPrimaryImageSet( itemDoc );
    ///     string imageUrl =  primaryImageSet.SelectSingleNode( "MediumImage/URL" ).InnerText;
    /// </summary>
    /// <param name="doc">取得対象のxml情報</param>
    /// <returns>ノードのテキスト(InnerXml)</returns>
    //*********************************************************************
    public static XmlNode getPrimaryImageSet( XmlDocument doc ) {
        System.Xml.XmlNode primaryImageSet = null;
 
        // ImageSets/ImageSetがある場合は、primaryなImageSetを取得する
        System.Xml.XmlNodeList imageNodeList = doc.SelectNodes( "/opt/ImageSets/ImageSet" );
        foreach ( System.Xml.XmlNode curNode in imageNodeList ) {
            string category = curNode.SelectSingleNode( "Category" ).InnerText;
            if ( category != "primary" ) {
                continue;
            }
 
            primaryImageSet = curNode;
            break;
        }
 
        // ImageSets/ImageSetがなかった場合は、ImageSetsをprimaryとみなす
        if ( primaryImageSet == null ) {
            primaryImageSet = doc.SelectSingleNode( "/opt/ImageSets" );
        }
 
        return primaryImageSet;
    }
}




使い方は、各メソッドのコメントにも記載してありますが、以下のような感じです。

string keyAsin = "4774166138"; // "4003320212"
 
var itemDoc = AsinBookManager.findByAsin( keyAsin );
string asin     = AsinBookManager.findNodeTextDef( itemDoc, "/opt/ASIN",     "" );
string title    = AsinBookManager.findNodeTextDef( itemDoc, "/opt/ItemAttributes/Title",      "" );
string author   = AsinBookManager.findNodeTextDef( itemDoc, "/opt/ItemAttributes/Author",     "" );
string binding  = AsinBookManager.findNodeTextDef( itemDoc, "/opt/ItemAttributes/Binding",    "" );
string label    = AsinBookManager.findNodeTextDef( itemDoc, "/opt/ItemAttributes/Label",      "" );
string pubDate  = AsinBookManager.findNodeTextDef( itemDoc, "/opt/ItemAttributes/PublicationDate", "" );
string newPrice = AsinBookManager.findNodeTextDef( itemDoc, "/opt/ItemAttributes/ListPrice/FormattedPrice", "" );
string linkUrl  = AsinBookManager.findNodeTextDef( itemDoc, "/opt/DetailPageURL", "" );
 
System.Xml.XmlNode primaryImageSet = AsinBookManager.getPrimaryImageSet( itemDoc );
string imageUrl = primaryImageSet.SelectSingleNode( "MediumImage/URL" ).InnerText;




本ライブラリは、内部的にhttp://api.dan.co.jp/のAPIを使用しています。
Ajax – AWS Caching Proxy w/ Authentication Support

テストで使う場合はこのままでよいですが、本格的に使用するにはサーバ側も自前で用意してください。
サーバ側は、上記のリンク先にソースがあります。



ダウンロード:
AsinBookManager.zip

C#ではじめるWebサービスプログラミング

関連記事

コメントを残す

メールアドレスが公開されることはありません。