「英語多読用の本をレベル別に取得する(完成版)」で、
英語多読用の本の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の本のリストはまとめて公開したいと思います。