スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[.NET Framework] バーコードリーダーを使ってISBNから書籍情報を取得する

お久しぶりに更新デス(・ω・)
先週から今の職場が中央区に移動になりまして、先週~今週頭まで引越し作業やらで忙殺してました。
引越し作業と平行してISMS認定取得の為の資料を作成したりといろいろ大変だったり(;´Д`)

んで、そのISMSの関係で会社で購入した書籍(主に技術系の)を資産管理する事になったのですが、
(つか過去に僕が会社の本を持ち出し⇒紛失したコトがあったので(;´Д`)<弁償したけどね!)
何十冊もある本のリストを作るなんて。。。

( ゚∀゚)アハハハハ八八ノヽノヽノヽノ\/\ んな暇ねーよ!

ってコトで、ISBNから書籍情報を取得する方法を探してみました。
まず必要なもの。
バーコードリーダー♪
isbn01.jpg
モデルはSystemGear PS700-USB。会社のをちょっと拝借しました。
○ソゴさん(上司)ゴメソ。。。月曜にはちゃんと返すけん(つд∩)
これで本のカバーの後ろに付いているISBNのバーコードを読み取ります。

お次はISBNから書籍情報を取得する方法を探します。
この手の情報に真っ先にヒットするのは、やっぱり世界のAmazon
Amazonが提供しているWebサービス(SOAP)からISBNで書籍情報を取得できるコトがわかりました。

ちなみにこのサービスを利用するにはアクセスキーが必要になるのでこちらから取得します。(無料です)
登録が完了するとサイトから以下のように自分のアクセスキーを確認できます。
isbn04.png

ってコトでお次はどっかにサンプルが落ちてないかな~と色々探していたのですが、
古いソースだと2009年頃に追加されたHMAC with the SHA256ハッシュに対応したものが無く、
自前で一から署名を作成しようにも半端なく面倒くさい事も解り、
どっかにそのものズバリが落ちてないかなーと思ったら。。。
ありました(・ω・)キラッ☆

http://forums.asp.net/t/1460055.aspx

上記の中に「AmazonProductAdvtApiWcfSample.zip」というサンプルがあるのですが、
正にそのものズバリだったので、プロジェクトをそのまま流用します。
ただそのままでは使えないので、ある程度自分用にカスタムします。

ちなみにこのプロジェクトで使われているAPIの一部にはFramework3.5用が含まれている為、
VisualStudio2008以降が必要です。(無償のExpressエディションでおk)

まずテキトーにちゃちゃっとフォームを作ります。
isbn02.png

その後、Program.csとフォームのソースを改変します。
Program.cs

static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}

Form1.cs

public partial class Form1 : Form
{
private const string accessKeyId = "自分で取得したアクセスキー";
private const string secretKey = "取得したセキュリティコード";
private const string url = "https://ecs.amazonaws.jp/onca/soap?Service=AWSECommerceService";

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
binding.MaxReceivedMessageSize = int.MaxValue;

AWSECommerceServicePortTypeClient client = new AWSECommerceServicePortTypeClient(binding, new EndpointAddress(url));
client.ChannelFactory.Endpoint.Behaviors.Add(new AmazonSigningEndpointBehavior(accessKeyId, secretKey));

ItemLookupRequest request = new ItemLookupRequest();

// ISBN-13は以下を指定
request.IdType = ItemLookupRequestIdType.EAN;
request.IdTypeSpecified = true;
request.SearchIndex = "Books";
request.ItemId = new string[] { this.textBoxISBN.Text.Trim() };

// ISBN-10は以下のみ指定すればおk
//request.IdType = ItemLookupRequestIdType.ISBN;
//request.ItemId = new string[] { this.textBoxISBN.Text.Trim() };

request.Condition = Condition.All;
request.ConditionSpecified = true;
request.MerchantId = "All";
request.ResponseGroup = new string[] { "Medium" };

ItemLookup itemLookup = new ItemLookup();
itemLookup.Request = new ItemLookupRequest[] { request };
itemLookup.AWSAccessKeyId = accessKeyId;

ItemLookupResponse response = client.ItemLookup(itemLookup);
foreach (var item in response.Items[0].Item)
{
ItemAttributes attr = item.ItemAttributes;
string Title = "タイトル:" + attr.Title;
string Manufacturer = "\r\n出版社:" + attr.Manufacturer.ToString();
string ISBN = "\r\nISBN-10:" + attr.ISBN;
string EAN = "\r\nISBN-13:" + attr.EAN;
string Author = null;

if (null != attr.Author)
{
foreach (string str in attr.Author)
{
Author = (null == Author) ? "\r\n著者名:" + str : Author += "/" + str;
}
}
else
{
Author = "\r\n著者名:無し";
}

this.textBoxDetail.Text = Title + Author + Manufacturer + ISBN + EAN;
this.textBoxISBN.Clear();
this.textBoxISBN.Select();
}
}
}

以下、実行結果です(・ω・)
isbn03.png
バーコードでスキャンすると、テキストボックスにバーコードの数値が入ります。
その後「検索」ボタンを押すと、詳細欄にタイトルや著者名が表示されます。
ソースコード(VS2008Express)
関連記事
スポンサーサイト

Pagination

Trackback

Trackback URL

http://morado106.blog106.fc2.com/tb.php/32-c6e116d3

Comment

Post Your Comment

コメント登録フォーム
公開設定

Utility

プロフィール

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。