KDP(電子出版)のメモ 急急如律令

Amazon Kindleダイレクト・パブリッシングでの電子出版や電子書籍の作成販売について、文章やイラストの作成や編集方法について書いています。

ISBNでPA-API v5を叩こう

 PA-API v5から情報を取っていろいろ試しています。前のバージョンではXMLだったが今度はJSONのようだ。情報を取る方法を模索していたので、全体的に書き直しが必要なようだ。

 

 下のサイトでどういった情報が取れるかを見れるのだけど、プログラムから大量に情報を処理しようとすると、APIを使ったプログラミングが必要な気がしている。

webservices.amazon.co.jp

 Node.js用のサンプルのsampleGetItemsApi.jsに書いてあったとおりにしてみたけどうまく行かなかった。何故かASINを指定するとerror code 500が出てしまっている。ASINを外すとうまく行ったのでよくわからないところ。ScratchpadではASINを指定していたので疑問に思うところである。

 PA-API v5ではJSONで返答が有るのでそれを見ていこうと思う。

 具体的には次のような感じである。鬼滅の刃 19巻を例に取っている。

 

{
"ItemsResult": {
"Items": [
{
"ASIN": "4088822048",
"DetailPageURL": "https://www.amazon.co.jp/dp/4088822048?tag=99hatena-22&linkCode=ogi&th=1&psc=1",
"Images": {
"Primary": {
"Large": {
"Height": 500,
"URL": "https://m.media-amazon.com/images/I/51bcIiF+o5L.jpg",
"Width": 317
}
}
},
"ItemInfo": {
"ByLineInfo": {
"Brand": {
"DisplayValue": "集英社",
"Label": "Brand",
"Locale": "ja_JP"
},
"Contributors": [
{
"Locale": "ja_JP",
"Name": "吾峠 呼世晴",
"Role": "著",
"RoleType": "author"
}
],
"Manufacturer": {
"DisplayValue": "集英社",
"Label": "Manufacturer",
"Locale": "ja_JP"
}
},
"Classifications": {
"Binding": {
"DisplayValue": "コミック",
"Label": "Binding",
"Locale": "ja_JP"
},
"ProductGroup": {
"DisplayValue": "Book",
"Label": "ProductGroup",
"Locale": "ja_JP"
}
},
"ContentInfo": {
"Languages": {
"DisplayValues": [
{
"DisplayValue": "日本語",
"Type": "発行済み"
}
],
"Label": "Language",
"Locale": "ja_JP"
},
"PagesCount": {
"DisplayValue": 192,
"Label": "NumberOfPages",
"Locale": "en_US"
},
"PublicationDate": {
"DisplayValue": "2020-02-04T00:00:01Z",
"Label": "PublicationDate",
"Locale": "en_US"
}
},
"ExternalIds": {
"EANs": {
"DisplayValues": [
"9784088822044"
],
"Label": "EAN",
"Locale": "en_US"
},
"ISBNs": {
"DisplayValues": [
"4088822048"
],
"Label": "ISBN",
"Locale": "en_US"
}
},
"ProductInfo": {
"ItemDimensions": {
"Height": {
"DisplayValue": 6.92912,
"Label": "Height",
"Locale": "ja_JP",
"Unit": "インチ"
},
"Length": {
"DisplayValue": 4.40944,
"Label": "Length",
"Locale": "ja_JP",
"Unit": "インチ"
},
"Width": {
"DisplayValue": 0.51181,
"Label": "Width",
"Locale": "ja_JP",
"Unit": "インチ"
}
},
"ReleaseDate": {
"DisplayValue": "2020-02-04T00:00:01Z",
"Label": "ReleaseDate",
"Locale": "en_US"
},
"UnitCount": {
"DisplayValue": 1,
"Label": "NumberOfItems",
"Locale": "en_US"
}
},
"Title": {
"DisplayValue": "鬼滅の刃 19 (ジャンプコミックス)",
"Label": "Title",
"Locale": "ja_JP"
}
},
"Offers": {
"Listings": [
{
"Availability": {
"Message": "在庫あり。",
"MinOrderQuantity": 1,
"Type": "Now"
},
"Condition": {
"SubCondition": {
"Value": "LikeNew"
},
"Value": "Used"
},
"DeliveryInfo": {
"IsAmazonFulfilled": false,
"IsFreeShippingEligible": false,
"IsPrimeEligible": false
},
"Id": "iABqJSOSIHbIYGPwAS2P3XKfmBxiJsIOcZfnXmqdy85GR%2B%2FisdXC7Y69mkHG%2BP4JpxWfFzMF8eX8SKm6yz8TozjsQWQVbcJGoddooMLePj0CNXhG%2FjhfshlZ6Sa7FUCvhtuLT9jNtF7Kuxkc2QRjNg%3D%3D",
"IsBuyBoxWinner": false,
"MerchantInfo": {
"DefaultShippingCountry": "JP",
"Id": "A8I6BNCH9688Q",
"Name": "slam43"
},
"Price": {
"Amount": 676,
"Currency": "JPY",
"DisplayAmount": "¥676"
},
"ProgramEligibility": {
"IsPrimeExclusive": false,
"IsPrimePantry": false
},
"ViolatesMAP": false
}
],
"Summaries": [
{
"Condition": {
"Value": "New"
},
"HighestPrice": {
"Amount": 1500,
"Currency": "JPY",
"DisplayAmount": "¥1,500"
},
"LowestPrice": {
"Amount": 484,
"Currency": "JPY",
"DisplayAmount": "¥484"
},
"OfferCount": 29
},
{
"Condition": {
"Value": "Used"
},
"HighestPrice": {
"Amount": 2978,
"Currency": "JPY",
"DisplayAmount": "¥2,978"
},
"LowestPrice": {
"Amount": 629,
"Currency": "JPY",
"DisplayAmount": "¥629"
},
"OfferCount": 13
},
{
"Condition": {
"Value": "Collectible"
},
"HighestPrice": {
"Amount": 1300,
"Currency": "JPY",
"DisplayAmount": "¥1,300"
},
"LowestPrice": {
"Amount": 1300,
"Currency": "JPY",
"DisplayAmount": "¥1,300"
},
"OfferCount": 1
}
]
}
}
]
}
}

 

ISBN10とASIN

Amazon Product Advertising APIでISBNで叩こうとしたが、ISBN13では反応しなかったので、ISBN10に変換する必要があった。どうもチェックディジットのあるなしの違いのようなので、変換自体はできそうである。

dqn.sakusakutto.jp

gist.github.com

-を削除するのに正規表現で置換した。

 isbn.replace(/\-/g, '')

 

 

apacの設定

 もう少し絞り込んだほうが扱いやすいかも。

{
"ItemIds": [
"4088822048"
],
"Resources": [
"Images.Primary.Large",
"ItemInfo.ByLineInfo",
"ItemInfo.ContentInfo",
"ItemInfo.ContentRating",
"ItemInfo.Classifications",
"ItemInfo.ExternalIds",
"ItemInfo.Features",
"ItemInfo.ManufactureInfo",
"ItemInfo.ProductInfo",
"ItemInfo.TechnicalInfo",
"ItemInfo.Title",
"ItemInfo.TradeInInfo",
"Offers.Listings.Availability.MaxOrderQuantity",
"Offers.Listings.Availability.Message",
"Offers.Listings.Availability.MinOrderQuantity",
"Offers.Listings.Availability.Type",
"Offers.Listings.Condition",
"Offers.Listings.Condition.SubCondition",
"Offers.Listings.DeliveryInfo.IsAmazonFulfilled",
"Offers.Listings.DeliveryInfo.IsFreeShippingEligible",
"Offers.Listings.DeliveryInfo.IsPrimeEligible",
"Offers.Listings.DeliveryInfo.ShippingCharges",
"Offers.Listings.IsBuyBoxWinner",
"Offers.Listings.LoyaltyPoints.Points",
"Offers.Listings.MerchantInfo",
"Offers.Listings.Price",
"Offers.Listings.ProgramEligibility.IsPrimeExclusive",
"Offers.Listings.ProgramEligibility.IsPrimePantry",
"Offers.Listings.Promotions",
"Offers.Listings.SavingBasis",
"Offers.Summaries.HighestPrice",
"Offers.Summaries.LowestPrice",
"Offers.Summaries.OfferCount"
],
"ItemIdType": "ASIN",
"PartnerTag": "99hatena-22",
"PartnerType": "Associates",
"Marketplace": "www.amazon.co.jp",
"Operation": "GetItems"
}