PythonでAmazon Product Advertising APIを呼び出してKindle Unlimitedの情報を取得する
「英語多読用の本をレベル別に取得する(完成版)」で、
英語多読用の本のISBNリストを取得しました。
今度はこれを使用して、Amazon Product Advertising APIを呼び出してKindle Unlimitedの情報を取得するということをやります。
目的:英語多読をKindle Unlimitedでやりたい
英語力を伸ばしたいということで、英語多読をやってみたいのですが、
多読用の本を買っていては高くついてしまうというネックがあります。
英語多読研究会さんのHPに、難易度別の類型読書語数の目安が掲載されています。
それによると、各レベルごとの累計語数は以下のようになっています。
1 2 3 4 5 6 7 8 9 10 |
Level0 30,000語 Level1 120,000語 Level2 470,000語 Level3 1,020,000語 Level4 1,320,000語 Level5 1,600,000語 Level6 1,900,000語 Level7 2,000,000語 Level8 2,200,000語 Level9 2,380,000語 |
これを達成するためには、各レベルで以下の冊数が必要になります。
1 2 3 4 5 6 7 8 9 10 |
Level0 30冊 Level1 30冊 Level2 50冊 Level3 50冊 Level4 15冊 Level5 10冊 Level6 10冊 Level7 2冊 Level8 2冊 Level9 1冊 |
Level0では、3万語の読書語数が推奨されていますが、
これを満たすためには大体30冊読まなければいけないという計算になります。
Level9では、読書語数は18万語となっていますが、
読むべき冊数は1冊です。
これは、難易度があがると1冊あたりの語数が増えるため、
読む必要がある冊数は減ってくるということですね。
英語多読を始めたばかりの難易度の低い頃に読むのが
語数が少なく読みやすい本(児童向けだったりします)になりますので、
必然的に読むべき冊数が増えてしまいます。
1冊あたり500円とか600円とかなので、決して高いわけではありませんが、
Level0で30冊、Level1で30冊、Level2で50冊・・・
となると、一人で揃えるには予算的に非常に厳しいものがあります。
そこで、読み放題のKindle Unlimitedを英語多読に使えないかと考えた訳です。
英語多読研究会さんでは、多読用の洋書のリストを難易度別に公開されていますので、
ここで公開されている本のリストから、Kindle Unlimitedに登録されているものを探し出すということをやってみます。
多読用の本のリスト取得は前回までに行っていますので、
今回は取得したリストを元にAmazon Product Advertising APIを呼び出して本の情報を取得するということをやってみます。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# -*- coding: utf-8 -*- """ Created on Mon Dec 19 14:49:19 2016 @author: """ from bottlenose import api from lxml import objectify import time AMAZON_ACCESS_KEY_ID = "アクセスキー" AMAZON_SECRET_KEY = "シークレットキー" AMAZON_ASSOC_TAG = "アソシエイトタグ" KINDLE_UMLIMITED_NODE_ID = "4486610051" amazon = api.Amazon(AMAZON_ACCESS_KEY_ID, AMAZON_SECRET_KEY, AMAZON_ASSOC_TAG, Region = "JP") def file_read (file): f = open(file, 'r') data = f.read() f.close() lines = data.split('\n') return lines def loop_min(max_level): book_list = [] min_level = 0 while min_level < 1: level = max_level + min_level print('list'+str('%1.1f' % level)+'.txt') lines = file_read('list'+str('%1.1f' % level)+'.txt') for line in lines: if (len(line) > 0): print('line='+line) items = item_search(line) item_find = items.find('Item') if (item_find is not None): for item in item_find: if (item is not None): title = item.ItemAttributes.Title author = item.ItemAttributes.Author isbn = item.ItemAttributes.Isbn url = item.DetailPageURL print(("%s, %s, %s, %s, %s" % (line, title, author, isbn, url))) book_list.append(str("%s, %s, %s, %s, %s" % (line, title, author, isbn, url))) else: print ("%s : Book is None" % (line)) #print ("END %s" % (line)) time.sleep(5) # Amazon API呼び出しは1秒に1回以内に収めるためsleep min_level += 0.1 return book_list def loop_max(): max_level = 0 while max_level < 10: book_list = loop_min(max_level) write_file(book_list, max_level) max_level += 1 def write_file(book_list, max_level): f = open('amazon'+str('%1d' % max_level)+'.txt', 'w') for book in book_list: f.write(book) f.write('\n') f.close() def item_search (keywords, searchIndex="KindleStore", browseNode=KINDLE_UMLIMITED_NODE_ID): response = amazon.ItemSearch(Keywords=keywords, SearchIndex=searchIndex, BrowseNode=browseNode, ResponseGroup="Large") root = objectify.fromstring(response) return root.Items if __name__ == '__main__': loop_max() |
bottlenoseを使ってAmazon Product Advertising APIを呼び出しています。
この使い方は以前の記事を参考にしてください。
今回やっていることは、ISBNのリストファイルを開き1行ずつAmazon Product Advertising APIで
Kindle Unlimitedの情報を取得するということです。
ループの頻度ですが、Amazon Product Advertising APIには
頻繁にアクセスするとエラーを返す仕様がある(1秒間に1回以内に抑える)ので
sleepを5秒入れています。
これで実行していたのですが、
「接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。」
というエラーが返ってきて中断しましたので、sleep 10秒で再トライしてみます。
英語多読で使えるKindle Unlimitedの本のリストはまとめて公開したいと思います。
コメントを残す