Il y a quelques jours, après avoir acheté un livre sur Go de chez Packt Publishing, j’ai fait un petit tour sur le site de l’éditeur, et j’y ai trouvé un truc intéressant : l’éditeur offre un eBook gratuit chaque jour. Tout ce qu’il y a à faire, c’est créer un compte sur le site de l’éditeur, puis revenir chaque jour pour valider l’offre et éventuellement télécharger l’ouvrage (généralement proposé en PDF, ePub et Mobi, sans DRM).
Mais on a quand même vite fait d’oublier d’y aller un jour, et, grâce à Murphy, ça tombe forcément sur un jour où le livre était particulièrement intéressant… Ce serait donc pas mal si on pouvait automatiser tout ça, non ?
Après quelques recherches, j’ai trouvé ce petit script Python, qui permet d’aller valider l’offre du jour et de télécharger automatiquement les fichiers correspondant. Ce script a en outre le mérite d’être relativement simple, ce qui en fait un bon exemple de script allant récupérer des infos sur une page web… Voilà qui pourrait resservir !
J’ai par contre dû faire quelques petites modifications pour faire marcher correctement le script :
- le serveur de Packt Publishing bloque désormais le user-agent par défaut envoyé par Python lors de requêtes HTTP, il faut donc passer un user-argent correspondant à un vrai navigateur,
- la fonction claim_book ne faisait pas d’appel à login, donc la validation de l’offre du jour ne fonctionnait pas.
J’ai également ajouté un __main__ qui valide l’offre du jour et lance le téléchargement, pour pouvoir exécuter directement le script tel quel. La version modifiée est sur GitHubGist.
Pour l’utiliser, il suffit d’installer les modules Python dont il a besoin :
1 2 |
sudo pip install bs4 sudo pip install pathlib |
Puis de lancer le script, après avoir renseigné les variables username, password et save_path en début de fichier :
1 |
python packt_books.py |
Et voilà, il n’y a plus qu’à croner ça pour une exécution quotidienne !
Prochaine étape : ajouter un peu de traces d’exécution et gérer les offres hebdomadaires.