Amazon PA-APIの代わりにスクレイピング
ウチのサイトで売上がなく、AmazonのPA-APIの利用制限に引っかかって使えなくなったのが前号までのあらすじ。
充実した本のデータベースとしてありがたく使わせてもらってたんだけど、Amazonも営利企業だ、売上に貢献できてないのだからやむを得ない。
しかたがないので、Amazonのページをスクレイピング(クロール)、ページを解析して必要な情報を取得することにした。
Amazonが公式に提供してくれるAPIは仕様も明らかにされていて使い勝手がいいし、変更も予告されるので事前準備ができる。
その点スクレイピングは自力でhtmlを解析しなきゃいけないし、サイトのちょっとしたリニューアルのたびに解析のやり直しとなる。て、そのちょっとしたリニューアルなんて頻繁なので追随するのが大変。
APIを使わず、サイトをスクレイピングするメリットなどない。
売上がたってAPIの利用制限を回避できるようになるまでの暫定手段…て、現状、まるで期待できんけど。
とりあえず目先必要なモジュールを書き換え・置き換えたので、忘れないうちにメモ。
わたしが公開しているサイトのほとんど、Amazonから取得する本の情報が使われている。
馬鹿のひとつ覚えで、どれもisbnをキーに本のデータを取得してその中から、タイトル、著者名、レビュー、書影をサイト表示に使っている。また、検索結果を表示させているページもある。
今回APIからスクレイピングに変えることで、検索は止めることにした。
最初はAmazonの検索URLの検索結果からデータを取得しようと思ったんだけど、アマゾンのページを見ればわかるように、検索対象以外の本が、ベストセラーだのオススメだのと入り混んでくる、雑音が多いページなので却下。APIだと雑音はなかったんで、それなりに有意だったのに、このありさまじゃわざわざ実装する意味がない。
てことで、ISBNをキーにして、タイトル、著者名、書影、レビューが取得できればそれでOKとした。
…と、なんだか小難しいことをおおげさに言ってるけど、そんなことは全然なくてAmazonのページURLを見ればなるほど簡単の種明かしだ。
たとえば。
https://www.amazon.co.jp/dp/4575513393
↑『アレルヤ』桜井鈴茂の商品詳細ページ
ページのURLにASIN(4575513393の部分)が使われている。ISBNさえわかればASINに変換してURLにしてリクエストしてやればページのHTMLが取得できる。
あとはHTMLを解析して必要なデータを取ってくればいいだけだ。
13桁のISBNを、Amazonの10桁のASINに変換するネタが2006年の雑記帖に。
「来年からのISBNの13桁に」
https://t2aki.doncha.net/?id=1167061487
この時作ったモジュールが今も現役。
Amazon商品ページのHTMLのどのタグ、どの文章を正規表現で切り取ってるか、など具体的な詳細をここで今書いたところで上記したように明日にも構造が変わってしまうことがありうるんであまり意味がない。
スクレイピングする時のわたしなりの定石というかポイントだけ。
クロールする対象はPCサイトではなくて、スマホ版。
スマホ版の方がHTMLが素直なので解析しやすいから。PC版だとテーブルが邪魔になることが多い。HTML解析のモジュールもあるのでそれを利用すればいいんだろうけど、汎用的なモジュールは、結局は対象サイトに合わせてカスタマイズが必要となる。だったら、最初から解析が比較的ラクなスマホ版を対象にすればいい。
何はなくてもタイトルタグ。
SEOのこともあるので、大きなサイトは、タイトルタグの内容に関しては安直に変更したりしないので信用できる。
Amazonの商品ページで言うと、書名・著者が必ず入っている。ウチ場合、ISBNをキーに欲しいデータはこれだけといってもいいほど。ページ本文(HTML)の解析なんて必要がない。
とはいえ、書影のURLやレビューはHTMLを解析する必要がある。
それには、HTMLの中にあるhタグとページで一意(ユニーク)なidをチェックするだけでほとんどことは足りる。
perlなら欲しいところを
@buf = $contents =~ m!tag(.+)tag!g
で一網打尽
くどいようだけど、スクレイピングはamazonが公式にサポートしてくれるAPIと違う。
APIだと変更などはアナウンスされるのでそれを待ってればいい。でも、スクレイピングしてデータを取ってるとHTMLの変更を検知、追随する必要がある。
ヘルスチェックのスクリプトを書いてクローンで走らせる必要があるなあ。
来月、2019年4月から国立国会図書館で書誌情報の提供、APIでの提供が始まるらしいので、そちらに乗り換えることも考えておこう。
https://www.ndl.go.jp/jp/news/fy2018/190219_01.html
[2019/03/12 04:18:29]
てことなので良い子はマネしないように。
そりゃそだな。公開されているとはいえ、スクレイピングって、他人の著作物から勝手にデータを抜き出して使うわけだから、あまり行儀のよいことじゃない。
解散。
国立国会図書館のAPIに期待…だけど、電子書籍とか書影とか対応してるのか気になるところ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
WINDOWSでバックアップ
何を今さらバッチファイルてことなんだけど。
WINDOWSであるディレクトリのバックアップをとりたい、という時にエクスプローラーを二つ開いてコピーするのがだるい。
mac(unix)ならrsync一発なのにと思ってたら、WINDOWSにもrsyncのようにディレクトリ、ファイルを同期してコピーできるコマンドがあった。
robocopy FROM TO /MIR
FROM(元のディレクトリ)をTO(バックアップ先のディレクトリ)に/MIR(同期して)コピーする
そこで、このコマンドを使って、USBにバックアップを取るバッチファイルを急遽でっちあげ。
EドライブのworkディレクトリをUSBにバックアップする。
USBが刺さっていたら=Fドライブのworkディレクトリが存在していたら、robocopyをミラーリング指定で実行。
robocopyはいろんなオプションがあって、ログを取ったりすることもできてけっこう便利。いちいちエクスプーラーでコピーするよりコマンドプロンプトでrobocopyを使った方が1024倍早い。
バカにしていたWINDOWS先輩、ごめんなさい。
…にしても、バッチファイルなんて何年ぶりだろう。
日本酒を堪能してきた!
末広町「魚や 藤海」
https://tabelog.com/tokyo/A1311/A131101/13188420/
↑日本酒が好きなら全力でおススメ
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
前後5分、身の回り5m
時間的には前後5分。
5分以上前の自分はアカの他人だし、5分以上先のことなどわかるわけがない。
空間的にはだいたい半径5m。
それ以上先には何があるのか把握する必要もなかろう。
というのが基本。
人間、歳くうとシュリンクしていくもんで。
なもんで、自分で作ったサイトのコードを久しぶりに眺めると「誰やこれ書いたの」という新鮮な驚きがある。いや、良い方悪い方、両方向に。
AmazonのAPIが使えなくなったんで、WEB本棚のコードを修正しようとデータベースの構成なんかも覗いてみたら、これがすげーシンプルでびっくり。2006年に作ったものだから、5分前どころじゃなく13年前のアカの他人だ。13年前の誰かに感心してしまった。
Amazonにリクエストを送って書誌情報をがっつり持ってきてるもんだとばかり思ってたら、データベースに入れてるのはISBNとタイトル、作者だけ。書影は表示の都度、アマゾンの画像URLを取得して表示させている。
本棚のその他の機能は独自のもので、つけ足すのも取り外すのも簡単にできるようになっていた。
SQLも単純なものばかり(って、当時はSQLの知識も今ほどなかったし)でわかりやすい。
ただ、酷いのはWEBまわりというか表示系。
呆れたことに、パラメータなんかがベタベタにハードコーディングされている。ちょっと修正したら、たぶんあちこち整合性が取れなくて、表示が崩壊する。
javascriptでやってることも今っぽくない。今だとCSSでやるところだ。
ボケ防止のためにも公開しているサイトは手入れしていかんとなあ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
アナログ仕事
たとえば。
たかだか100行程度のCSV。エクセル上でフィルタを使いながら手順通り目で確認して15分程度。
とはいえ、毎日15分かかるとして、これが10日だと150分、一年だと90時間ぐらいになる作業。おまけにひとのやることだ。チェック漏れ、間違いは必ず起こる。
面倒なので、perlでチェックツールを作ってそれを使って5分以内の作業に短縮。今まで漏らしていたところも間違いなく確認できるようになった。もちろんすべてをカバーするわけではないので、漏れもあるが、クリティカルなところは潰してあるので、漏れても問題のないところだ。
…んだけど、それはいけないらしい。
「手順通りではない」からダメで、さらには「楽をするな」と。
いやもうなんというか。アナログというか昭和の悪しき風習というか。
機械のように手順通りにやれ、ということなら、機械にやらせるのが正しい。なぜなら、ひとは間違うから。
楽をするなというけど、楽をしようがしんどい思いをしようが、結果同じなら楽にできた方がストレスもなく効率的。
無職初老のフリーターなもんで、複数掛け持ちしてるけども、なかには変な職場もあるんでハゲの進行が止まらないぞ。
こういうところは、割に合わなくなったらとっとと逃げてしまおう。そのための複数掛け持ちだしね。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
Amazon Product Advertising API利用制限
AmazonのAPIが2019年からポリシー変更となった。
ひらたく言うと「売上のないサイトやアカウントはAPIを利用できなくなる」
さらにひらたく言うと、わたしのアカウントは売り上げがないので利用できなくなった。
Product Advertising API (PA-API) の利用ガイドライン
https://affiliate.amazon.co.jp/help/topic/t32/
[重要] Product Advertising API 利用ポリシーの変更について
https://affiliate.amazon.co.jp/help/topic/t52/
Amazonの商品データベースを利用できるAPIはかなり便利で、また使い勝手もよかったので残念。
もちろんアフィリエイトで小遣い稼ぎになるならありがたい話だけど、うちのような辺境にそれは見込めないので、もともと「充実した本のデータベース」として重宝していた。
ISBNさえあれば、ほとんどの本の情報が揃ってるから。
わたしが利用しているのは
・書名
・著者(作者、翻訳者、挿絵など)
・書影
の3点。価格については変動してるのでおまけ程度。
なので、その3点に絞ってamazonのサイトをクロールして情報を取得するように順次変更する。
とりあえず、まずはお問い合わせ(本が登録できんぞ!)をいただいている
「趣味は読書2」https://doncha.net/
をあわてて修正。
これはWEB本棚で、本が登録できないなど論外だ。
amazonの検索結果からも登録できるようにしてあったんだけど、これはちょっと無理。サービスレベルが落ちるがしかたなく諦め。
また、やはりサイトをクロールするより、APIの方がレスポンスが断然早いなあ。クロールだとひと呼吸待つ感じになってしまった。
わたしが公開しているサイトのほとんどはamazonを利用しているので全部の修正は時間がかかりそうだ。とほほ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
arrows m3からzenfone4に機種変更
突然、arrows m3から、zenfone4へケータイの機種変をすることとなった。
arrows m3は、スペック的にはちょっと貧弱だったけど、特に文句もなく使ってほぼ1年。なのに、今回機種変更となったのは、家人のzenfone4の調子が悪くて、iphoneへの機種変更となり、その調子の悪いzenfone4は赤坂見附のASUS直営店に持ち込んで基盤交換、ほぼ新品となり、ところてん式にわたしのところにやってきたという、風が吹いたら桶屋が、といったところだ。
zenfone4になったことで、おサイフケータイ、生活防水、ストラップホールがなくなったのは痛いんだけど、引き換えにスペックが格段に上がってポケモンGOもストレスフリーとなったんで、オッケー。
また、ケータイを持ち始めて、ずーっとauだったけど、今回の機種変でdocomoとなった。docomoの方がシムフリーのバリエーションが多いので、今後の機種変に際してそれもアドバンテージかな。
デフォルト以外でインストールしたアプリは今までどおり。
twitter LINE Instagram facebook
Y!ファイルマネージャー Dropbox AndFTP Jota+
Kinoppy Kindle shuttle
PokemonGO
ぐらい、かな。
CPUもランクが上になり、メモリも増えて、全体的に動作・レスポンスはきびきびと指についてくるようになった。
これで、わたしの使ってるガジェットを眺めると、
ケータイ:zenfone4
タブレット:Zenpad8.0
ノートパソコン:vivobook
と、すべてASUS謹製。
ASUSの回し者じゃないけど、どれも満足度は高い。
特にタブレットは、今まで無駄になっていた時間を使えるようになって校正の修正や確認作業に使える時間が増えて大助かり、だ。
初期不良のハズレ個体だったzenfone4のために出かけた赤坂見附の直営店も好感度の高い対応でおススメ。預ける期間、手元にケータイがなくなるわけだけど、その間、代替機を出します、って初めて聞いた(うちは間に合ってるんでお断りしたけども)
https://gc.digitalriver.com/store/asusjp/html/pbPage.akasaka/
さらについでに赤坂見附・赤坂に行ったら、しろたえのチーズケーキ、シュークリームは必須。
https://tabelog.com/tokyo/A1308/A130801/13002850/
レアチーズケーキもシュークリームも濃厚なのに後味すっきり。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」