Contents
Kindle Unlimitedって検索しずらい
Kindle Unlimitedを利用しているのですが、いまいち検索しずらいので
該当の本がKindle Unlimitedで読めるのかを取得するプログラムを作ってみます。
PythonからAmazon Product Advertising APIを呼び出すプログラムを実装してみます。
環境は、「AnacondaでWindows上にPython環境を構築」で構築したものを使用します。
Windows上でインストールしたAnacondaで一緒に入っているSyderを使用します。
Syderを立ち上げて、まずはプロジェクトを作成します。
メニューのProjectsから「New Project…」をクリックします。
プロジェクト名とプロジェクトで使用するフォルダを指定します。
作成したいPythonプログラム
作成したいプログラムは、書名で検索してその本がKindle Unlimitedに
登録されているかを返すというものです。
現在、Kindle Unlimitedを利用中なのですが、
Kindle Unlimitedだけを対象とした検索って
いまいちやりずらいんです。
そこで、書名から検索してそれがKindle Unlimitedの対象になっているかを
調べるプログラムを作ろうと思った次第です。
書名は1冊ではなく複数調べたいので、
入力はテキストファイルにリストで書いておいて
それを読み込むようにしたいと思います。
出力は、書名とそれがKindle Unlimitedに存在するかの真偽値を
記載するようにすればよいでしょう。
Amazon Product Advertising API用のライブラリを利用する
Pythonには、Amazon Product Advertising API用のライブラリがあるようなので、それを利用させてもらいます。
まずはbottlenoseというライブラリをインストールします。
コマンドプロンプトを立ち上げる際に右クリックして、
「その他」から「管理者として実行」をクリックします。
以下のコマンドを実行します。
1 |
pip install bottlenose
|
これでインストールできました。
pipのバージョンが古いというメッセージが出ましたので、
ついでにpipのバージョンも上げておきます。
1 |
python -m pip install --upgrade pip
|
Pythonプログラムのコーディング
準備ができたので、さっそくPythonプログラムを実装します。
今度はSpyderのエディタでコーディングを行います。
まずは簡単に、キーワードを指定して該当する書籍の 書名、著者名、URLを返すプログラムを書きます。
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
|
# -*- coding: utf-8 -*-
"""
Created on Mon Dec 19 14:49:19 2016
@author:
"""
from bottlenose import api
from lxml import objectify
AMAZON_ACCESS_KEY_ID = "アクセスキー"
AMAZON_SECRET_KEY = "シークレットキー"
AMAZON_ASSOC_TAG = "アソシエイトタグ"
amazon = api.Amazon(AMAZON_ACCESS_KEY_ID, AMAZON_SECRET_KEY, AMAZON_ASSOC_TAG, Region = "JP")
def item_search (keywords, searchIndex="Books"):
response = amazon.ItemSearch(Keywords=keywords, SearchIndex=searchIndex, ResponseGroup="Large")
root = objectify.fromstring(response)
return root.Items.Item
if __name__ == '__main__':
for item in item_search('python'):
title = item.ItemAttributes.Title
author = item.ItemAttributes.Author
url = item.DetailPageURL
print ("%s\n%s\n%s\n\n" % (title, author, url))
|
lxmlはAnacondaに含まれていましたので、インストールする必要はありませんでした。
これで、「python」というキーワードに該当する本の
タイトル、著者名、URLを取得することができました。
Kindle Unlimitedを対象に検索する
上記では、「searchIndex=”Books”」として、本のカテゴリから検索しましたが、
次はKindle Unlimitedカテゴリ内を検索するようにします。
すでに実装されている方がいらっしゃったので、参考にさせていただきます。
RubyでAmazonのAPIを使ってKindle Unlimited本の一覧を取得する。
こちらの方の記事によると、searchIndexを「KindleStore」にして
browseNodeを追加してKindle UnlimitedのノードID「4486610051」を指定してやればよいようです。
で、実装してみました。
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
|
# -*- coding: utf-8 -*-
"""
Created on Mon Dec 19 14:49:19 2016
@author:
"""
from bottlenose import api
from lxml import objectify
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 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.Item
if __name__ == '__main__':
for item in item_search('python'):
title = item.ItemAttributes.Title
author = item.ItemAttributes.Author
url = item.DetailPageURL
print ("%s\n%s\n%s\n\n" % (title, author, url))
|
変更した個所は、item_searchでsearchIndexを「KindleStore」に変更して
browseNodeを追加しただけです。
これを実行してみたところ、きちんとKindle Unlimited対象商品がリストに上がってきます。
これで、Amazon Product Advertising APIからKindle Unlimitedの電子書籍を取得することができました。
次回からは、いよいよ書名のリストからそれがKindle Unlimitedにあるかを取得するプログラムに進みます。