.. meta:: :description lang=fr: Utiliser Wolfram|Alpha (en ligne de commande) :description lang=en: Using Wolfram|Alpha from the command line ############################################### Utiliser Wolfram|Alpha (en ligne de commande) ############################################### Wolfram|Alpha ? --------------- Si vous ne connaissez pas, allez faire un tour sur la page principale, `www.wolframalpha.com/ `_. Merci à `Romain Vernoux `_ qui m'a fait découvrir cet outil en 2012 ! * **Wolfram|Alpha** est © et ® Wolfram Research Company; * ``wolf`` (ruby cli) est © `Gabriel Horner `_; * ``wolfram`` (ruby cli) est aussi © `Gabril Horner `_. * ``ruby`` et ``nokogiri`` sont la propriétés de leurs auteurs respectifs. ------------------------------------------------------------------------------ `wa.sh`_ : un premier client pour Wolfram|Alpha, léger et en Bash ? ------------------------------------------------------------------- Avantages et inconvénients ^^^^^^^^^^^^^^^^^^^^^^^^^^ L'avantage de ce premier client est sa portabilité : il est **très léger** (47 lignes de code, *avec* les commentaires!), et ne demande **aucune dépendance**, à part ``grep``, ``curl``, ``tr`` et ``sed``, déjà installés sur n'importe quel Linux, et disponibles sur Mac OS X (avec `brew `_) and on Windows (with `cygwin `_).. Néanmoins, ce client est plus minimaliste que ``wolf`` (présenté plus bas), et il ne présente aucune option. Source ^^^^^^ La version originale est ici `wa.sh (original) `_. Ma version, sans couleur en sortie, est là `wa_nocolor.sh `_. Une version "plus à jour" se trouve ici `wa.sh `_. Obtenir une clé d'application ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Pour plus de détails, voir plus bas <#obtenir-une-cle-d-application-bis>`_. Il faut cette fois l'enregistrer dans un fichier ``~/.wolfram_api_key`` sous la forme : :: export API_KEY="3HHP2W-UUPQUT6997" Par exemple avec la commande suivante : :: mv ~/.wolfram_api_key /tmp/ # Pour ne pas écraser un fichier qui serait déjà là ! echo 'export API_KEY="3HHP2W-UUPQUT6997"' > ~/.wolfram_api_key # Assurez vous que ce fichier ait les bonnes permissions de lecture ! chmod +r ~/.wolfram_api_key Exemples ^^^^^^^^ Voici quelques exemples, qui permettent de comparer les sorties des deux clients (voir plus bas pour des exemples avec ``wolf``) : #. Un test stupide : ``0+0`` : .. runblock:: console $ wa_nocolor.sh "0+0" #. Un calcul de distance : .. runblock:: console $ wa_nocolor.sh "distance Paris Hyderabad" #. Résolution d'une équation : .. runblock:: console $ wa_nocolor.sh "x^3 - sinx = e^-x" #. Et un exemple plus drôle, un `Pokémon `_ : .. runblock:: console $ wa_nocolor.sh pikachu | sed 's/\\#/#/g' #. Allez, un dernier exemple, on demande `le cours actuel `_ de la `roupie indienne `_ : .. runblock:: console $ echo -e "Requête à Wolfram|Alpha en cours…" $ echo -e "Le $(date), 1 € valait $(wa_nocolor.sh "1 EUR in INR" | grep -o "₹.*$")." Attention ^^^^^^^^^ On pourrait se plaindre de l'**incroyable lenteur** de cette solution. Plusieurs secondes d'attente pour 4 requêtes, *c'est pas mal !* ------------------------------------------------------------------------------ ``wolf`` : un second client pour Wolfram|Alpha, en *ruby* ? ----------------------------------------------------------- La page principale est `github.com/cldwalker/wolf `_. Il s'agit aussi d'un client **en ligne de commande** pour l'outil Wolfram|Alpha. ``ruby1.9.1`` ^^^^^^^^^^^^^ Pour l'installer **sur Ubuntu 11.10** (et plus récent), il est nécessaire d'installer les paquets ``ruby1.9.1`` et ``ruby1.9.1-dev`` : .. code-block:: bash sudo apt-get install ruby1.9.1 ruby1.9.1-dev .. warning:: Ruby 1.9.1 n'est plus disponible dès Ubuntu 15.10 ! Je ne peux donc plus tester les exemples d'utilisation de ``wolf`` inclus ci-dessous, désolé. ``nokogiri`` ^^^^^^^^^^^^ Ensuite, il faut installer `Nokogiri `_. D'abord, ses dépendances (quelques paquets ``ruby``), et deux librairies : .. code-block:: bash sudo apt-get install ri1.9.1 rdoc1.9.1 irb1.9.1 sudo apt-get install libreadline-ruby1.9.1 libruby1.9.1 libopenssl-ruby1.9.1 # nokogiri requirements sudo apt-get install libxslt-dev libxml2-dev Attention, la dernière étape change du tutoriel *officiel* sur la page de l'auteur. Attention aussi, car cette installation est **très longue**, la gem ayant besoin d'une étape de compilation, apparemment très longue (plusieurs minutes à *100%* de temps ``CPU``). .. code-block:: bash # Attention : là ça change du tutoriel officiel sudo gem1.9.1 install nokogiri wolf ^^^^ Et enfin, il faut installer la gem ``wolf`` : .. code-block:: bash sudo gem1.9.1 install wolf ------------------------------------------------------------------------------ Obtenir une clé d'application (bis) ----------------------------------- Comme l'explique la page de ``wolf`` sur Github, il faut `créer un compte `_, puis obtenir une clé en cliquant sur le bouton "Get an AppID". Pour l'info, c'est une petite chaîne de caractère qui ressemble à ça : :: 3HHP2W-UUPQUT6997 .. warning:: Ceci n'est pas une clé valide ! Utilisez la votre ! Enregistrer la clé ------------------ Le plus simple est de créer un fichier ``~/.wolfrc`` contenant ça ``"Wolfram.appid=3HHP2W-UUPQUT6997"`` : :: mv ~/.wolfrc /tmp/ # Pour ne pas écraser un fichier qui serait déjà là ! echo "Wolfram.appid=3HHP2W-UUPQUT6997" > ~/.wolfrc # Assurez vous que ce fichier ait les bonnes permissions de lecture ! chmod +r ~/.wolfrc Tester le tout -------------- Un simple test ``wolf 0+0`` permet d'être sûr de la réussite ou de l'échec de l'installation. Normalement, les messages d'erreurs renvoyés par **Ruby** sont à peu près compréhensibles, donc si le premier test vous engueule, il *devrait* aussi donner les infos nécessaires pour corriger l'installation. .. warning:: Le problème le plus fréquent est une confusion entre ruby1.8 et ruby1.9.1 ! ------------------------------------------------------------------------------ Exemples : directement embarqués dans cette page web ? ------------------------------------------------------ Avec l'extension `runblock `_, il est possible d'embarquer le résultat d'un appel à ``wolf`` directement dans la page ! .. runblock:: console $ wolf 0+0 Un premier exemple ^^^^^^^^^^^^^^^^^^ .. runblock:: console $ wolf "distance Paris Hyderabad" ------------------------------------------------------------------------------ D'autres essais ? ----------------- Résoudre une équation ^^^^^^^^^^^^^^^^^^^^^ .. runblock:: console $ wolf "x^3 - sinx = e^-x" Base de données de Pokémon ^^^^^^^^^^^^^^^^^^^^^^^^^^ Un ajout drôle qui a fait pas mal parler de lui ! .. runblock:: console $ wolf pikachu | sed s/"\\\'"/""/ | sed s/"\\\%"/"%"/ D'autres exemples ^^^^^^^^^^^^^^^^^ Par exemple ``_ montre la sortie de la requette "``distance Paris Montreal``". Pour plus d'inspiration, il suffit d'aller piocher `là bas `_. ------------------------------------------------------------------------------ À propos de cette page ---------------------- Pour embarquer la commande et la sortie de ``wolf``, j'utilise le morceau de code suivant : .. code-block:: rst .. runblock:: console $ wolf "ma question" .. Faiblesse de cette méthode .. ^^^^^^^^^^^^^^^^^^^^^^^^^^ .. Une première faiblesse de l'utilisation de la `commande rST `_ .. ``.. runblock:: console`` pour exécuter ``wolf question`` est .. la limitation à des caractères ASCII imposée par l'extension `runblock `_ .. (limitation déjà signalée dans `cette page `_, où je suis forcé de changer la langue du terminal pour que ``gpg`` ne me sorte pas d'accents). Une extension ? ^^^^^^^^^^^^^^^ On pourrait envisager de faire une extension Sphinx qui, comme `greffon GNUplot `_, permettrait d'embarquer des graphiques et des tableaux produits par *Wolfram|Alpha*. J'ai la flemme de le faire moi-même ! .. (c) Lilian Besson, 2011-2021, https://bitbucket.org/lbesson/web-sphinx/