Help us understand the problem. What is going on with this article?

kindle unlimited検索を作ってみた

はじめに(なぜ作ったか?)

月額980円で対象電子書籍が読み放題になるkindle unlimited。サービスが発表された当初、私はkindle paperwhite端末しか持っておらず、あまりピンときていなかったのですが、先日iPad(2018年度版)を購入したことをきっかけに電子書籍熱が再発。なかでも感動してしまったのは「ナショナルジオグラフィック 日本版」でした。

iPadでみると写真が実に美しい。最新号の1つ前からだいたい半年分くらいの号は「kindle unlimited」マークがついていて、読み放題の対象となっていました。これはすばらしい。さっそく契約し、目についた気になる書籍をダウンロード。他にも、他にも! と思い、Amazon公式サイトで検索し、本を漁りはじめました。

そして問題にぶち当たりました。

検索しづらい!

まずは適当なワードで対象書籍を探してみます。

phpscience.png

上は検索ボックスの左で「kindkeストア」を選択し、キーワード「PHPサイエンス」として検索した結果です。検索結果の左枠に「kindle Unlimited 読み放題」チェックボックスが現れました。ここにチェックをつけると、読み放題対象の本だけに絞り込んで検索できることがわかります。

さて、この画面からキーワードを「手塚治虫」に変えてみましょう。

tezuka.png

さっきまで「読み放題」の条件で検索していたのに、読み放題対象でない本が現れてしまっています。しかも、左枠で「kindle Unlimited 読み放題」チェックボックスも消えてしまっているではないですか。なぜなのでしょうか。

検索ワードをいくつか試してみると、ワードによって左枠の「読み放題対象タイトル」チェックボックスが出たり出なかったりすることが判明しました。
どういった法則でチェックボックスが出るのか、分かりません。

とはいえ、せっかくサービスを契約したのですから、効率よく無料の本を探したいのです。
そんなわけで、作ってみることにしました。

作成の方針(どのように作るか?)

さきほどの検索ワード「PHPサイエンス」検索では無事私の欲しい情報がページに表示されていました。このときのURLは

https://www.amazon.co.jp/s/s/ref=sr_nr_p_n_feature_nineteen_0?fst=as%3Aoff&rh=n%3A2250738051%2Ck%3APHP%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%2Cp_n_feature_nineteen_browse-bin%3A3169286051&keywords=PHP%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9&ie=UTF8&qid=1541941124&rnid=3169285051

でした。
ここにはもしかしたら私が意図しない余計な情報が入っているかもしれません。
ここから「不要かもしれないパラメータ」を削ってみて、ページを確認。動作に問題がないぎりぎりの短いURLを探してみましょう。

作業記録

step1. rnid(パラメータを削る)

https://www.amazon.co.jp/s/s/ref=sr_nr_p_n_feature_nineteen_0?fst=as%3Aoff&rh=n%3A2250738051%2Ck%3APHP%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%2Cp_n_feature_nineteen_browse-bin%3A3169286051&keywords=PHP%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9&ie=UTF8&qid=1541941124

→上記URLをブラウザで開くと、さきほどの検索結果画面と変わっていません。rnidパラメータはつけなくても問題なさそうです。Amazonサイト側の都合からすれば何か不都合があるかもしれませんが、私が検索で使うぶんには問題なさそうでした。

step2. qid

https://www.amazon.co.jp/s/s/ref=sr_nr_p_n_feature_nineteen_0?fst=as%3Aoff&rh=n%3A2250738051%2Ck%3APHP%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%2Cp_n_feature_nineteen_browse-bin%3A3169286051&keywords=PHP%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9&ie=UTF8

→これもOK。問題なさそうです。

step3. ie

https://www.amazon.co.jp/s/s/ref=sr_nr_p_n_feature_nineteen_0?fst=as%3Aoff&rh=n%3A2250738051%2Ck%3APHP%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%2Cp_n_feature_nineteen_browse-bin%3A3169286051&keywords=PHP%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9

→OK。ieはおそらく "input encoding"の略でしょう。

step4. keyword

https://www.amazon.co.jp/s/s/ref=sr_nr_p_n_feature_nineteen_0?fst=as%3Aoff&rh=n%3A2250738051%2Ck%3APHP%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%2Cp_n_feature_nineteen_browse-bin%3A3169286051

→OKでした。keywordは検索キーワードを表しているはずなので、検索結果が変わるはずだと予想していましたが、問題なく検索結果が表示されました。

step5. rh

https://www.amazon.co.jp/s/s/ref=sr_nr_p_n_feature_nineteen_0?fst=as%3Aoff

→NG。検索結果が表示されず、Amazonトップページに飛ばされました。
このパラメータについては、後ほど詳しくみてみます。

step6. fst

https://www.amazon.co.jp/s/s/ref=sr_nr_p_n_feature_nineteen_0?rh=n%3A2250738051%2Ck%3APHP%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%2Cp_n_feature_nineteen_browse-bin%3A3169286051

→OK。もしかしたら画面のどこか見つけにくい部分が変わってしまっている可能性もありますが、検索結果エリアは問題なさそうです。

rhパラメータについて詳しく

さきほど諦めたrhパラメータは

n%3A2250738051%2Ck%3APHP%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%2Cp_n_feature_nineteen_browse-bin%3A3169286051

これはURLエンコードされています。デコードすると以下のような文字列になります。

n:2250738051,k:PHPサイエンス,p_n_feature_nineteen_browse-bin:3169286051

上の文字列をよくみると、[n:〜], [k:〜], [p_n_feature_nineteen_browse-bin:〜]の3つの部分に分けられそうなことが予想できます。

これをひとつづつ削ってみましょう。

step1. p_n_feature_nineteen_browse-bin

デコード後の文字列からp_n_feature_nineteen_browse-bin以降の文字列を削ると

n:2250738051,k:PHPサイエンス

これをURLエンコードすると

n%3A2250738051%2Ck%3APHP%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9

上記をrhパラメータの値と置き換えると

https://www.amazon.co.jp/s/s/ref=sr_nr_p_n_feature_nineteen_0?rh=n%3A2250738051%2Ck%3APHP%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9

一見いけそうですが、検索結果の件数が変わってしまいました。左枠の「読み放題対象タイトル」チェックボックスが表示されていません。どうやら「p_n_feature_nineteen_browse-bin:3169286051」という文字列が「読み放題対象タイトル」かどうかの制御に使われているようです。

step2. k

だめ元で k を削ってみましょう。

(デコード後)

n:2250738051,p_n_feature_nineteen_browse-bin:3169286051

URLエンコードすると

n%3A2250738051%2Cp_n_feature_nineteen_browse-bin%3A3169286051

rhの値を上記で置き換えて
https://www.amazon.co.jp/s/s/ref=sr_nr_p_n_feature_nineteen_0?rh=n%3A2250738051%2Cp_n_feature_nineteen_browse-bin%3A3169286051

やはり予想通り検索キーワード「PHPサイエンス」は消えてしまいました。k:は検索ワードとして必要な文字列のようです。

step3. n

n を削ってみましょう。デコード後の文字列は

k:PHPサイエンス,p_n_feature_nineteen_browse-bin:3169286051

URLエンコードすると

k%3APHP%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%2Cp_n_feature_nineteen_browse-bin%3A3169286051

URLに当てはめて
https://www.amazon.co.jp/s/s/ref=sr_nr_p_n_feature_nineteen_0?rh=k%3APHP%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%2Cp_n_feature_nineteen_browse-bin%3A3169286051

結果が1列の表示ではなく4列になっていますね。結果件数も変わっています。画面上の検索ワードを入力するテキストボックスの左側エリアは、「kindleストア」ではなく「すべて」に変わりました。

n:2250738051 という文字列が「kindleストアを対象とする検索」という意味を持っているようです。

その他

kindle以外の検索結果URLには s/s/ ではなく、 s/ がひとつしかありません。直感で上記URLから s/ をひとつ抜いても問題ありませんでした。

結果

以上を踏まえて、

  • kindleストアで検索
  • 「読み放題対象タイトル」にチェック
  • 検索キーワード「PHPサイエンス」を含めた検索

の3つの条件を備えた最短のURLは以下になりそうなことが分かりました。

https://www.amazon.co.jp/s/ref=sr_nr_p_n_feature_nineteen_0?rh=n%3A2250738051%2Ck%3APHP%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%2Cp_n_feature_nineteen_browse-bin%3A3169286051

成果物

https://yoshihisamurakami.github.io/kindleunlimited-search/

ソースはこちらに置いています。

https://github.com/yoshihisamurakami/kindleunlimited-search

蛇足(私のおすすめ)

  • 山田 祥寛 (javascript本を多数出版されています。お世話になります。)

  • PHPサイエンス・ワールド新書 (もう新作は出版されていないらしいく残念なのですが、サイエンス系の良書が多数出版されています。)

  • 光文社新書 (科学系、美術系の読み物に良書が埋もれています)

蛇足2(2019年12月メモ)

  • この記事を書いた2018年11月時点ではナショナル・ジオグラフィックは読み放題対象となっていましたが、2019年12月時点では数冊を残してあとは読み放題対象から外れてしまいました。残念。。

  • 2019年私が読んだ中で特に面白かったのは以下3冊。

皆さま、よきkindleライフを!

muranet
プログラマ。よく食べて、よく眠る。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away