Amusons-nous un peu avec Python et Instagram
Ou, comment passer une semaine de chÎmage à apprendre comment développer le back-end d'une application web.
Il y a une semaine exactement je sortais de la douche avec une idĂ©e ; depuis jây travaille, et câest intĂ©ressant.
Un peu de contexte : depuis le mois dernier je nâai plus mon emploi de designer / graphiste / intĂ©grateur. Outre la recherche et la paperasse liĂ©e Ă mon changement dâoccupation (je fais aussi un peu de freelance Ă cĂŽtĂ©, si ça vous dit), je me consacre Ă des projets perso. Le site que jâai rĂ©cemment refait pour la chanteuse-romanciĂšre-hĂŽtesse-de-podcast Sylvia Hansel en est un exemple.
ParallĂšlement, je suis en train de supprimer mes comptes Facebook et Instagram (câest une consĂ©quence directe de mes billets de ces derniers mois sur le sujet). Supprimer Facebook câest pas trop dur, seule la messagerie mâest utile. En revanche, jâaime bien Instagram, pour voir les publications de mes contacts (beaucoup de photographes, de magazines photo, dâillustrateurs, de tatoueursâŠ), et pour poster mes photos. Je ne donne pas de lien vers mon compte, Ă©tant donnĂ© quâil va bientĂŽt disparaitre. En revanche, je teste une alternative au rĂ©seau social photo, qui est sur le mĂȘme principe de fĂ©dĂ©ration que Mastodon, et qui souhaite donner une plate-forme aux photographes, illustrateurs, amateurs ou pro. Ăa sâappelle Pixelfed, et câest plutĂŽt prometteur. Mon compte sur lâinstance principale, câest @joachim@pixelfed.social (mais je songe dĂ©jĂ Ă installer une instance perso avec un nom de domaine sympa).
Oui, mais⊠pour suivre les publications de mes contacts encore sur Instagram, je fais quoi ? Câest lĂ que la douche mâa Ă©tĂ© utile jeudi dernier : je me suis dit que je pouvais dĂ©velopper un outil, qui mâafficherait les photos.
Bref, en quelques heures jâavais un prototype du scraper, et au bout de quelques jours lâoutil est utilisable.
VoilĂ Pyctogram.

Le code est en license libre (AGPLv3), disponible pour lâinstant sur GitHub (en attendant que jâen dĂ©mĂ©nage).
Pourquoi ce nom ? Parce que câest Ă©crit dans le langage informatique Python, quâil y a des images (le latin nâavait pas de mot pour photographie, mais peinture sur dit pictura), et pour enfoncer le clou, -gram vient du grec ÎłÏÎŹÎŒÎŒÎ± qui veut dĂ©signe ce qui est dessinĂ© ou peint, on retrouve ce suffixe dans photogramme ou dansâŠÂ Instagram.

Lâoutil Pyctogram a encore peu de capacitĂ©s. On peut :
- importer des nouveaux contacts, via le fichier
connections.json
prĂ©sent dans lâexport Instagram, via un fichier texte ou en les rentrant Ă la main - voir apparaĂźtre les photos sur le feed principal
- sauver des photos dans la memory (les photos sont alors téléchargées sur le disque dur dans un dossier du programme)
- faire des listes de contacts pour les regrouper par thÚmes et voir un feed spécifique
- consulter les feeds des contacts
- et câest Ă peu prĂšs tout

Techniquement, lâimportation des contacts et des mĂ©dia marche avec un scraper : lâoutil prend la liste des contacts qui sont dans la base de donnĂ©e, puis tĂ©lĂ©charge les pages une Ă une, et regarde ce qui y a Ă©tĂ© publiĂ© depuis la derniĂšre fois.
Je ne voulais pas passer par lâAPI officielle dâInstagram, parce que ça requiert un compte sur le rĂ©seau social, et que je compte supprimer le mien.
Le problĂšme dâun scraper comme ça, câest que chaque contact nĂ©cessite une requĂȘte, et chaque requĂȘte prend du temps. Lâimportation de ma liste, soit 800 contacts, mâa pris une vingtaine de minutes. Câest loin dâĂȘtre idĂ©al.

Je ne suis pas dĂ©veloppeur back-end. Ma formation câest designer, mon dernier poste câĂ©tait de lâintĂ©gration (HTML et CSS). Pour faire simple, le dĂ©veloppement front c’est la transformation des maquettes graphiques en pages web, par opposition au dĂ©veloppement back, qui conduit toute l’action du serveur pour rĂ©pondre aux requettes : les bases de donnĂ©es, les API, etc.
Jusque lĂ je touchais un peu au Javascript pour des sites ou carrĂ©ment des extensions web, et jâai commencĂ© Ă toucher au langage Python il y a un an. Jâavais juste fait une ou deux centaines de lignes de code, pour des projets pas trĂšs sĂ©rieux, borderline inutiles, ou juste utiles pour moi.
Ce projet mâa permis de vraiment comprendre comment marche une application Web. Jâai appris Ă utiliser des bases de donnĂ©es, des classes & objets, et le framework Flask. CâĂ©tait intĂ©ressant de sortir de mon domaine de compĂ©tence pour comprendre toute la partie en amont de ma spĂ©cialitĂ©. Lors de mon expĂ©rience pro la plus rĂ©cente, mes collĂšgues du back-end utilisent PHP et Symfony ; et mĂȘme si câest pas le mĂȘme langage jâai retrouvĂ© les logiques sous-jacentes. Dans mes prochaines collaborations avec des dĂ©veloppeurs back-end je pourrai mieux saisir les tenants et les aboutissants des choix de dĂ©veloppement⊠ce qui ne peut quâamĂ©liorer ma pratique du design et de lâintĂ©gration dans une Ă©quipe de dĂ©veloppeurs back.

Lâoutil nâest pas fini. Outre quelques petites modifications cosmĂ©tiques, lâajout de commentaires dans le code et diverses petites refactorisations, je voudrais ajouter des fonctionnalitĂ©s.
Tout dâabord, il faut que lâoutil soit le plus simple possible Ă tĂ©lĂ©charger / installer / utiliser. Câest Ă dire que rien ne doit passer par la ligne de commande. Ni lâinstallation de Python 3 et ses dĂ©pendances, ni lâinitialisation de la base de donnĂ©e, ni le dĂ©marrage de lâapp web. En plus de ça, il faut un moyen de consulter lâapp web sur mobile (smartphone ou tablette), pour ça il faut que lâordinateur la serve sur le rĂ©seau local (hum) ou que lâoutil soit installĂ© sur un serveur internet (mouais). Je nâai aucune connaissance ni expĂ©rience dans ces choses-lĂ donc je vais devoir mâabstenir pour lâinstant.
Jâaimerais aussi pouvoir gĂ©rer plusieurs utilisateurs sur la mĂȘme installation. Câest pas la partie la plus facile (surtout au niveau sĂ©curitĂ©). De mĂȘme pour savoir comment concevoir le rapatriement des mĂ©dias. Le script pourrait ĂȘtre appelĂ© tous les jours (via une action automatisĂ©e, comme cron
), mais jâaimerais pouvoir dĂ©clencher le rapatriement depuis lâinterface web. Ă 800 contacts, ça met 20 minutes, câest pas jouable. Ou bien jâamĂ©liore le scraper (trois requĂȘtes Ă la fois ?) ce qui pourrait me pĂ©naliser auprĂšs dâInstagram (ce genre de requĂȘtes automatisĂ©es, câest jamais trĂšs bien vu), ou je trouve le moyen dâexĂ©cuter le rapatriement en tĂąche de fond, avec une barre de progressionâmais ça câest une partie de JS et de requĂȘtes que je ne maitrise absolument pas.
Donc la suite, câest pas pour maintenant. Je vais avancer Ă mon rythme, et tenter de rĂ©soudre mes problĂšmes un par un. Et qui sait, si des dĂ©veloppeurs Python passent par lĂ et jettent un coup dâĆil Ă mon code, quâils nâhĂ©sitent pas Ă me dire ce qui est mal pensĂ©, conçu ou implĂ©mentĂ©, et sâils ont des idĂ©es sur les problĂšmes qui se prĂ©sentent Ă moi, faut pas hĂ©siter non plus. Câest lâintĂ©rĂȘt du Logiciel Libre, ceux qui le dĂ©sirent peuvent contribuer.
Ă propos : Je suis Ă la recherche d’un emploi, accessible Ă vĂ©lo depuis l’est parisien, dans le design et/ou l’intĂ©gration (markup + styles). Je suis pour un Web de qualitĂ© et respectueux des utilisateurs, et j’ai pas de problĂšme avec le tĂ©lĂ©travail. Mon book n’est absolument pas Ă jour.
On en discute ?âŠ
Billets liés
- 09/07/2018 â đïž rewind.website et Cast Rewinder
- 11/07/2018 â đ€ RĂ©flexions sur un problĂšme de fuseaux horaires
- 19/07/2018 â đ€ Cast Rewinder â comment gĂ©rer les Ă©lĂ©ments supprimĂ©s ?
- 13/11/2017 â đ pyreNoel
- 13/12/2017 â đ€ Un ordinateur mâa gĂ©nĂ©rĂ© 6526 noms de communes françaises
- 18/08/2022 â đșïž Paper Globe : le retour !
Répondez sur votre propre site, envoyez une Webmention!