Note pour plus tard - The Zen of Python | Python.org

  • Préfère :
    • la beauté à la laideur,
    • l'explicite à l'implicite,
    • le simple au complexe
    • et le complexe au compliqué,
    • le déroulé à l'imbriqué,
    • l'aéré au compact.
  • Prends en compte la lisibilité.
  • Les cas particuliers ne le sont jamais assez pour violer les règles.
  • Mais, à la pureté, privilégie l'aspect pratique.
  • Ne passe pas les erreurs sous silence,
  • ... ou bâillonne-les explicitement.
  • Face à l'ambiguïté, à deviner ne te laisse pas aller.
  • Sache qu'il ne devrait [y] avoir qu'une et une seule façon de procéder,
  • même si, de prime abord, elle n'est pas évidente, à moins d'être Néerlandais.
  • Mieux vaut maintenant que jamais.
  • Cependant jamais est souvent mieux qu'immédiatement.
  • Si l'implémentation s'explique difficilement, c'est une mauvaise idée.
  • Si l'implémentation s'explique aisément, c'est peut-être une bonne idée.
  • Les espaces de nommage ! Sacrée bonne idée ! Faisons plus de trucs comme ça.
  • Texte d'origine

  • Beautiful is better than ugly.
  • Explicit is better than implicit.
  • Simple is better than complex.
  • Complex is better than complicated.
  • Flat is better than nested.
  • Sparse is better than dense.
  • Readability counts.
  • Special cases aren't special enough to break the rules.
  • Although practicality beats purity.
  • Errors should never pass silently.
  • Unless explicitly silenced.
  • In the face of ambiguity, refuse the temptation to guess.
  • There should be one-- and preferably only one --obvious way to do it.
  • Although that way may not be obvious at first unless you're Dutch.
  • Now is better than never.
  • Although never is often better than -right- now.
  • If the implementation is hard to explain, it's a bad idea.
  • If the implementation is easy to explain, it may be a good idea.
  • BronKOBOt (@bronkobot@botsin.space) - Faire un Bot Mastodon from scratch.

    Tiens... et si je faisais un bot pour poster une citation par jour tirée des passages de romans que j'ai sélectionnés et stockés su ma Kobo ?!

    C'est par ces mots que j'ai commencé à galérer... comme quoi, il suffit d'une idée à la con pour se lancer dans tout un merdier pourtant parfaitement facultatif ...

    Le postulat de départ

    Je veux qu'un BOT mastodon poste une citation de mes bookmarks de liseuse DONC il faut récupérer ces passages bookmarkés.

    Donc, il faut trouver le fichier de base de donnée.

    Puis il faut extraire les données intéressantes.

    Puis utiliser ces données dans un BOT qui sera appelé une fois par jour.

    Étape 1: trouver et comprendre les données sur la KoBo

    En fouillant un peu, on trouve un fichier sqlite (JOIE) dont le chemin est .kobo/KoboReader.sqlite

    Comment différencier la base de   livres des autres ?!    Ben elle pèse plus de 700mo...    C'est un signe.

    Un passage par DBBrowser pour SQlite permet de jeter un oeil sur la structure des données.

    Idéalement, il me faut deux informations: la citation et le titre du bouquin dont elle est extraite.

    drame.jpeg

    En fait les titres se trouvent dans la table content et les annotations dans la table Bookmark

    deux tables

    Je pourrais utiliser Calibre et chercher un moyen de faire un export complet de ces deux données uniquement. Pas sûr que ça marche. Ou alors faire un export via le DBexplorer pis me retaper le truc à chaque export...

    Étape 2 : extraire les données et les préparer pour le Bot

    En vieux programmeur qui bricole, je vois là un prétexte pour coder une petite appli en python qui se chargera de l'extraction.

    Mon problème, c'est que je me sers des notes de la Kobo pour retenir des passages intéressants mais aussi, parfois, pour noter vite fait un mot de vocabulaire espagnol que je ne connaissais pas et dont je veux conserver la traduction. Mais ces mots de vocabulaire ne sont pas des citations: il faudrait donc les virer à la main à chaque fois. C'est chiant.

    L'appli devra donc permettre de filtrer les citations avant de générer un fichier exploitable par le bot.

    Pour faire court

    J'ai fait l'appli en question: elle permet donc de récupérer les données, filtrer en fonction de la longueur de la citation ou du fait qu'elle est ou pas accompagnée d'une note personnelle...

    Capture du 2022-12-03 15-57-22.png

    On peut formater les données selon plusieurs modèles (HTML, Json, Markdown, TXT brut, BOT) voire même créer son propre format (genre %title:«%quote» )

    Si ça intéresse quelqu'un,   contactez-moi vu que j'ai la  flemme de mettre ça là

    Voilà le ZIP : Kobone : KOBO Note Extractor

    Étape 3 : coder un bot en PHP afin de l'appeler par la suite avec un CRONJob.

    Rien d'extraordinaire ici: je fais un script qui parse le fichier obtenu à l'étape précédente, tire une citation au hasard et la poste sur le compte Masto du Bot.

    Le point le plus intéressant du bouzin est plutôt la fonction servant à poster sur un compte mastodon:

    
    define('TOKEN','letokendesécuritéquetuchopesdansmastodon');
    define('MASTODON_URL','https://botsin.space/'); // Ici, il faut coller l'url de votre serveur mastodon
    define('HEADER',"Citation du jour:");
     function post2Mastodon($data=null){
            if (!$data){return false;}
            $headers = [
              'Authorization: Bearer '. TOKEN
            ];
            $data=[
                'status'=> HEADER.$data,
                'language'=>"fr",
                'visibility' => 'public'
            ];
            $ch_status = curl_init();
            curl_setopt($ch_status, CURLOPT_URL,  MASTODON_URL.'/api/v1/statuses');
            curl_setopt($ch_status, CURLOPT_POST, 1);
            curl_setopt($ch_status, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch_status, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch_status, CURLOPT_HTTPHEADER, $headers);
            $output_status = json_decode(curl_exec($ch_status));
            curl_close ($ch_status);
            return $output_status;
        }
    

    Étape 4: Créer une appli Mastodon pour avoir un jeton d'utilisation

    Aller sur le compte mastodon en question, puis dans les préférences.

    Cliquer sur «developpement» puis «Nouvelle application».

    Remplir le formulaire simplissime puis valider. Cliquez ensuite sur le nom de votre application dans la nouvelle page et copiez votre jeton d’accès. C'est celui-ci qu'il faut coller dans le script PHP (dans la constante TOKEN)

    Étape 5 : Définir un Cronjob

    Direction le panneau de config de votre hébergement, rubrique cronjob. Sur Cpanel c'est là :

    Capture du 2022-12-03 16-11-42.png

    Définissez la fréquence (pour moi une fois par jour) et l'heure (8:00).

    Ensuite, il faut définir la commande qui va appeler le script du BOT: wget fera l'affaire...

    wget -qO /dev/null http://xxxxxxxxxxx.xx/index.php

    L'option -q pour quiet et -O /dev/null pour éviter d'avoir un fichier de sortie qui se crée à la racine.

    Capture du 2022-12-04 11-10-50.png

    Fin

    Une fois tout ça terminé, j'ai bien un bot qui poste une citation à 8:00 tous les jours.

    capture du bot

    Bon, elles ne seront pas toujours bien formatées vu que la sélection de texte sur liseuse c'est un peu touchy... mais c'était plus pour apprendre à le faire qu'autre chose...

    Pis ça m'a permis de me  remettre à Python...

    https://botsin.space/@bronkobot

    Installation - guizero gui python

    The aim of guizero is to make the process of creating simple GUIs quick, accessible and understandable for new learners.

    • Works with standard Python Tkinter GUI library (and no need to install other libraries)
    • Abstracts away details new learners find difficult to understand (such as Tkinter StringVar() objects)
    • Accessible widget naming system to help new learners to build up a mental model
    • Flexible enough to be used for projects up to A-Level standard, yet accessible to primary school children
    • Comprehensive and accessible documentation with examples
    • Generates helpful additional error messages

    Liste des widgets: https://lawsie.github.io/guizero/widgetoverview/

    Via https://jcfrog.com/shaarli41/

    GitHub - hoffstadt/DearPyGui: Dear PyGui: A fast and powerful Graphical User Interface Toolkit for Python with minimal dependencies

    ooh ! Une lib Python pour faire **facilement** des GUI **jolies** !

    Genre

    from dearpygui import core, simple
    
    def save_callback(sender, data):
        print("Save Clicked")
    
    with simple.window("Example Window"):
        core.add_text("Hello world")
        core.add_button("Save", callback=save_callback)
        core.add_input_text("string")
        core.add_slider_float("float")
    
    core.start_dearpygui()

    donne

    alt

    J'ai pas creusé mais ça me semble intéressant tant je trouve rebutant cet aspect sous python...


    Note: Partager un fichier par le réseau entre Ubuntu et Windows - Shaarli ¦ Orangina Rouge - Liens en vrac de sebsauvage

    La vache ! C'est simplissime et rapide ! Merci Seb ;-)

    (en Python 2) : python -m SimpleHTTPServer 5555
    (en Python 3) : python -m http.server 5555
    et accédez avec un simple navigateur (http://adresseip:5555)
    Fil RSS des articles