[PYTHON] J'ai créé un site de liste de Kindle Prime Reading en utilisant Scrapy et GitHub Actions

Contexte

En m'abstenant de sortir, j'ai participé à un membre principal d'Amazon, mais je l'utilise rarement sauf pour acheter du riz et des boissons. L'autre jour, j'ai commencé à utiliser le privilège appelé Prime Reading. Mais j'aimerais voir quel genre de livre je peux lire, mais vérifier page par page est toujours gênant, j'ai donc lancé un site de liste / recherche en utilisant Scrapy.

Allez ici: https://kpr.gimo.me/

Ce que vous utilisez

Flux de développement

Scrapy Vous pouvez écrire Spider pour définir toute acquisition de données, extraction, etc. Cliquez ici pour plus de détails: https://github.com/masakichi/KindleSpider/blob/master/KindleSpider/spiders/PrimeReading.py

Une fois terminé, vous pouvez obtenir tous les livres pendant environ une minute en utilisant la commande scrapy crawl PrimeReading -o public / output.json.

Écrivez un index.html minimum

Il est facile d'exprimer les données acquises par Scrapy en utilisant le plugin jQuery appelé DataTables, qui doit être stocké en HTML. Vous pouvez créer un tableau très complet avec environ 20 lignes de code. (Équipé de fonctions de tri et de recherche)

$('#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 },
    ]
});

Publié sur les pages GitHub

Vous pouvez publier sur des pages GitHub en fonction des index.html et output.json ci-dessus. Il existe de nombreuses façons de le publier en ligne, je vais donc l'omettre ici.

Tout est automatisé avec la puissance des actions GitHub

Si vous définissez les exigences sous la forme de yaml comme indiqué ci-dessous, vous pouvez automatiquement acquérir, extraire et lancer le site lorsque le code est poussé et tous les jours à 0h00 UTC (9h00 heure du Japon).

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 }}

Impressions

«Il semble qu'il existe de nombreux magazines dans Prime Reading. ―― C'est génial que GitHub Actions soit pratique et gratuit pendant 2000 minutes par mois. ――Les Trois Royaumes d'Eiji Yoshikawa peuvent désormais être lus gratuitement sur Prime Reading.

Recommended Posts

J'ai créé un site de liste de Kindle Prime Reading en utilisant Scrapy et GitHub Actions
J'ai construit une roue pour Windows à l'aide d'actions Github
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
J'ai créé un site d'apprentissage C ++
J'ai fait un Line-bot avec Python!
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé d'obtenir une liste de noms AMI en utilisant Boto3
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
[Kaggle] J'ai fait une collection de problèmes en utilisant le didacticiel Titanic
Débutant: j'ai créé un lanceur à l'aide d'un dictionnaire
J'ai créé un outil pour informer Slack des événements Connpass et en ai fait Terraform
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
J'ai essayé de lire un fichier CSV en utilisant Python
Préparer un pseudo serveur API à l'aide d'actions GitHub
J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"
J'ai comparé la vitesse de la référence du python dans la liste et la référence de l'inclusion du dictionnaire faite à partir de la liste dans.
Je souhaite prendre une capture d'écran du site sur Docker en utilisant n'importe quelle police
Obtenez une liste des comptes GA, des propriétés et des vues sous forme de données verticales à l'aide de l'API
Ce que j'ai appris en lançant un site photo à l'aide de données administratives et de plusieurs API
J'ai effectué un processus de connexion / déconnexion en utilisant Python's Bottle.
J'ai créé une boîte de changement de seuil pour Pepper's Dialog
J'ai essayé de faire LINE BOT avec Python et Heroku
J'ai essayé de lire les données d'un fichier en utilisant Node.js.
J'ai créé un jeu d'introduction au festival scolaire avec Ren'py
J'ai essayé d'utiliser Python (3) au lieu d'un calculateur de fonctions
Je veux faire un changeur de voix en utilisant Python et SPTK en référence à un site célèbre