経緯
外出自粛の中、アマゾンのプライム会員を参加したが、米とドリンクなどを購入する以外ほとんど使っていません。つい先日からPrime Readingという特典を利用し始めました。でも一体どんな本を読めるのかを確かめたいと思いますが、一ページ一ページチェックするのはやはり面倒で、Scrapyを使って一覧・検索のサイトを立ち上げました。
こちらへどうぞ: https://kpr.gimo.me/
使っているもの
- Scrapy (HTMLを取得、解析など)
- DataTables (データをテーブルで格納)
- GitHub Pages (サイトの作り)
- GitHub Actions(自動化)
開発の流れ
Scrapy
Spiderを書いてどんなデータを取得、抽出などを定義できます。詳しくこちら:https://github.com/masakichi/KindleSpider/blob/master/KindleSpider/spiders/PrimeReading.py
完成すれば scrapy crawl PrimeReading -o public/output.json
というコマンドを使って一分程度すべての書目をゲットできますぞ。
最低限のindex.htmlを書きます
Scrapyで取得したデータを表現するのはHTMLに格納しなければならない、幸いDataTablesというjQuery Pluginを利用して楽です。大体に20行位のコードで完成度高いテーブルを作れます。(ソートや検索機能完備)
$('#prime-reading').DataTable({
"paging": false,
"order": [[4, 'desc']],
"ajax": { "url": "./output.json", "dataSrc": "", "cache": true },
"language": {
"url": "./Japanese.json"
},
"columns": [
{ "data": "asin", "visible": false },
{ "data": "title", "render": function (data, type, row) { return `<div><a class="title" data-image="${row.cover}" href="https://www.amazon.co.jp/dp/${row.asin}/" target="_blank">${data}</a></div>` }, "width": "40%" },
{ "data": "author" },
{ "data": "star" },
{ "data": "rating_count" },
{ "data": "price" },
{ "data": "publish_date" },
{ "data": "cover", "visible": false },
]
});
GitHub Pagesで公開
上記のindex.htmlとoutput.jsonを基づいてGitHub Pagesに公開できます。公開方法はネット上でたくさんあるため、ここは割愛します。
GitHub Actionsの力で全て自動化
以下のようにyamlの形で要件を定義すれば、コードがpushされる時と毎日UTC0時(日本時間午前9時)自動的にデータ取得、抽出とサイトの立ち上げができます。
name: publish to gh-pages
on:
push:
branches:
- master
schedule:
- cron: "0 0 * * *"
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- uses: dschep/install-pipenv-action@v1
- run: pipenv install
- run: TZ='Asia/Tokyo' date --iso-8601="minutes" > public/update_time.txt
- run: pipenv run scrapy crawl PrimeReading -o public/output.json
- name: Deploy to GitHub Pages
if: success()
uses: crazy-max/ghaction-github-pages@v2
with:
target_branch: gh-pages
build_dir: public
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
感想
- Prime Readingの中に雑誌が多いようです。
- GitHub Actionsが便利で、しかも月2000分間無料なのはめちゃいいです。
- 吉川英治の三国志はいまPrime Readingに無料で読めます。