Après avoir fait goofi puis Getlib j'ai codé vite fait une petite «api» destinée à ramener en local n'importe quelle ressource distante... «quelle différence avec getlib ?» allez-vous me demander sur un ton narquois à propos de la cruauté duquel je tairais scrupuleusement tout commentaire.
J'ai eu envie de faire ça car j'en avais assez de passer par le combo
bouton droit sur une ressource ➜ télécharger ➜ envoyer sur mon site ➜ faire un lien ou une img
Du coup, il suffit d'ajouter l'adresse de l'api à l'url vers la ressource distante...
Donc http://insta.com/image.jpg devient par exemple http://api.warriordudimanche.net/fetchit?url=http://insta.com/image.jpg
Fetchit va récupérer la ressource en local et vous servir cette version au lieu de la distante. Comme d'hab' si cette ressource a déjà été récupérée elle n'est pas re téléchargée.
Le deuxième effet kiskool (paye ta réf de vieux) c'est que du coup, comme getlib, ça permet de récupérer toute lib en local et être plus RGPD friendly.
lien vers une ressource distante : <a href="http:www.distantserver.com/file.pdf"> Link to distant file</a> ➜ <a href="http://api.url.com?url=http:www.distantserver.com/pic.png"> Link to distant file</a>
utiliser une lib hébergée sur un CDN distant : <script src="http:www.distantnastyserver.com/lib.js"></script> ➜ <script src="http://api.url.com?url=http:www.distantnastyserver.com/lib.js"></script>
Con figue ?
Afin d'éviter que votre server ne se retrouve floodé par des fichiers vidéos 8K à 60 gigots l'unité, il y a une limite de taille configurée dans la constante SIZE_LIMIT, fixée par défaut à 10 Mo.
Le code ?! c'est... le code.
Ceux qui aiment farfouiller verront que cette fois, j'ai fait une classe fetchit_class.php qui se charge de tout. Son fonctionnement est tellement simple que je me fissure même pas le joufflu à vous le détailler, démerdez-vous.
License
Comme d'hab', c'est cadeau... Utilisez, partagez, modifiez... juste respectez la Dont be a dick licence
Macron se cache sur les champs elysees sauf que lui, pour se cacher, il supprime la liberté d'aller et venir de l'ensemble de la population locale... Il se cache en enfermant les autres quoi...
La liberté de circulation est le droit pour tout individu de se déplacer librement dans un pays, de quitter celui-ci et d'y revenir. Elle est garantie par l'article 13 de la Déclaration universelle des droits de l'homme depuis 1948.
... et me voilà parti à trouver un Dieu grec et une histoire le tout en seulement 15 lignes avec pour contrainte d'être à la portée de mon môme de onze ans (grand fan de l’Iliade et de l'Odyssée). YOUPI !
J'ai pensé à un Dieu qui serait l'opposé d'un dieu existant: l'amour étant représenté dans le panthéon, j'ai proposé Mîsos, le Dieu de la haine et de la colère. Lucas a adoré 😎
On a ensuite cherché des personnages, un lieu et un temps, une situation initiale, une perturbation et une résolution qui tienne dans un espace narratif aussi court... et qui ait un message à donner. Je vous en fais profiter 😬
Mîsos le perfide
Diocles préparait son bateau pour sa journée de pêche. Les premiers rayons du char d'Hélios réchauffaient son jeune corps après la colère nocturne de Zeus et de Poséidon. Le jeune homme vit soudain un paquet d'algues bouger et gémir. Il s'approcha prudemment, écarta les algues et découvrit un visage cornu qui le fixait avec un regard inquiet.
Il regarda les cornes de bouc, affreuses, les jambes et les sabots horribles.
«QUELLE LAIDEUR INHUMAINE»...«AUCUNE CRÉATURE AUSSI HIDEUSE NE DEVRAIT EXISTER!»...«IL VIENT DE L'HADES!» pensa-t-il...
━ «Je te déteste déjà, étranger...»
Il dégaina son poignard et leva le bras pour achever le monstre...
━ «Retiens ton bras, jeune pêcheur, ne laisse pas le perfide Mîsos murmurer à ton oreille !»
Diocles se retourna et vit Ulysses s'approcher.
━ «Mais Seigneur, c'est un monstre et un étranger !»
━ «Jeune Diocles , je te présente mon vieil ami Gnédias... Ce n'est plus un étranger désormais.»
━ Une voix de tonnerre retentit alors : «MAUDIT SOIS-TU ULYSSES, JE JURE PAR L'HADES DE ME VENGER DE TOI !»
Il y a quelques jours, lassé de reprendre à zéro à chaque fois que je dois faire un truc avec GD sur PHP, je me suis dit que je pouvais faire une classe pour ça. Comme, exceptionnellement, j'avais un peu moins de deux heures de tranquillité, je m'y suis collé.
Au bout du compte, une fois la classe codée, il faut bien la tester...😬
C'est le problème des codeurs : ils ont du mal à arrêter de coder 🤩. Du coup, me voilà en route pour un script exploitant pictools.php... et ce qui aurait du prendre deux heures a pris plusieurs jours de papa codeur (petit rappel: 1 h de papa codeur = 7,2 heures de codeur normal en zone de guerre, au cours actuel 💣)
Bref, j'ai donc pondu une «api» avec un frontend permettant d'appliquer des transformations à une image à partir de son URL.
😎 petite image, long discours, toussa.
Donc, on fournit l'URL de l'image puis on ajoute des actions les unes à la suite des autres. Certaines n'ont pas besoin de paramètres (emboss, sepia etc) et d'autres si (contrast, resize etc)
Quand on clique sur un bouton action, on ajoute cette action à la liste avec, le cas échéant, l'input qui va bien pour les paramètres avec un placeholder de rappel.
Ainsi, on peut resize l'image à une taille précise ou à un pourcentage de la taille normale: tous les paramètres de coordonnées et de taille peuvent être précisés en pixels ou en pourcentages.
De plus, si on veut redimensionner l'image à une largeur en conservant le ratio automatiquement, il suffit de mettre -1 à la place de la hauteur: le script se démerdera tout seul.
La config ci-dessus donne le résultat ci-dessous:
L'image d'origine
Le résultat donné par scriptopic
Mais c'est pas tout
Donc, scriptopic permet de retoucher une image automatiquement. OK.👍
Mais cette image est utilisable directement depuis son URL de génération: si on colle l'URL précisée dans le cadre résultat, ça fonctionne. Avec un peu d'habitude, on peut le faire en direct (genre pour une image d'en-tête...). Comme les images retouchées sont
sauvegardées avec un hash de l'url de requête, si on l'appelle à nouveau, elle ne sera plus générée mais simplement renvoyée (visible soulagement du serveur )
Et aussi
Comme des fois on a la flemme de faire une balise image, Scriptopic vous la donne directement: un double-clic et c'est copié prêt à coller...
Mais ce n'est toujours pas tout... (vous êtes gâtés)
Un truc rigolo, c'est que, comme pour Stamp, le front de scriptopic génère un bookmarklet en temps réel (c'est la deuxième ligne du cadre résultat): une fois satisfait de votre script, le bookmarklet généré permet de l'appliquer à l'image en cours: vous ouvrez l'image dans un onglet et clic-clac merci kodak.
Si vous voulez simplement envoyer l'image en cours pour travailler dessus, le bookmarklet de base est dispo en footer.
Atta atta, pars pas j'ai pas fini
Histoire d'ajouter encore une feature, vous pouvez stocker des scripts, à la main, dans le dossier ... scripts/ . Vous utiliserez le nom du fichier dans l'url avec ?script=[nomdefichier]
Ainsi, en sauvant le json de l'exemple (cadre «Script au format JSON») dans un fichier scripts/sepia.json vous pouvez ensuite l'appeler avec&script=sepia
Vous pouvez vous faire une bibliothèque de scripts pour tout et les appeler directement au lieu de vous taper du json dans l'URL
Je n'ai pas nettoyé le code, vu que je subis un harcèlement constant à la maison (lol), mais je le ferais, promis ! Le tout est en beta à l'arrache en licence amusez-vous avec.
Je n'ai pas encore écrit de doc pour pictools_class.php qui se trouve dans le zip, mais c'est assez simple à utiliser et chaque méthode est «documentée»
$picture=new pictool();// on peut mettre un array contenant les valeurs initiales des attributs : ['format'=>'png'] par exemple)
$picture->load('www.moncul.sur/la_commode.jpeg');
$picture->contrast(20);
$picture->sepia();
$picture->save("fichier.jpeg");
$picture->display();
Le script matrix qui alterne sketch et gaussian à plusieurs reprises puis colorise en vert
Pas flippant du tout.
Todo
Débugger, vu que ça va se dévoiler à l'usage plus intensif
ajouter le listage et l'usage des scripts sauvegardés dans le front.
Ainsi, Gilles me fait passer une adresse de métamoteur de recherche d'ebooks ( https://recherche-ebook.fr/ ) tout en notant que ce serait bien de faire une version qui soit plus propre... (pas de JS, de redirections, de pubs etc..)
écoutez Thérèse, comme la vie est savoureuse, n'est-ce pas...
Il se trouve que je m'étais fait un script dont le but était justement de charger des urls, de les parser, de récupérer et d'organiser du contenu.
Pour faire simple, on crée des «profils» correspondant à une série d'URL avec la regex de parsing et le template correspondants. Il suffit alors d'appeler le profil pour obtenir une page de résultats mise en forme.
Comment ça marche ?
on accède au script : ?p=<profil>
slurp accède au fichier de configuration du profil dans packs/<profil>.php
pour chaque url du pack, il charge la page, la parse, met en forme les données dans le template
Le pack est un array du type:
$packs['<profil>']=[
[
'url'=>'http://urltoparse.com/',
'pattern'=>'REGEX PATTERN with (?<name>..) capture',
'template'=>'<li> HTML Template where data is inserted to : use %name% '
],
[
'url'=>'http://urltoparse.com/',
'pattern'=>'REGEX PATTERN with (?<name>..) capture',
'template'=>'<li> HTML Template where data is inserted to : use %name% '
],
];
Dans le template de chaque url,
on peut utiliser %variable% pour placer les captures regex : (?<title>[^"]*?) ➜ %title%
deux variables sont toujours accessibles:
%ROOT% pour accéder à l'url du pack
%DOMAIN% pour accéder au domaine de cette url (pour compléter une URL relative par exemple)
J'ai ajouté la possibilité de créer un dossier au nom du pack contenant un header et un footer pour qu'on puisse faire un site à partir d'un profil.
packstemplates/<profil>/
J'ai ensuite créé un pack contenant les principaux sites d'epubs, cherché les patterns regex...
J'ai ajouté les icônes Lucide ( https://lucide.dev ) à iconeleon. comme pour les autres packs d'icône, on peut en changer la couleur via le select qui va bien.
Bisou !
Comme je le disais dans le billet précédent à propos de SVGBox, l'idée était bonne mais le poids était rédhibitoire.
Pourtant, ça peut être sympa d'avoir un catalogue d'icônes prêtes à servir et dont on puisse altérer la couleur, sans compter que ce serait une bonne alternative aux webfonts tout en étant plus accessible.
Donc, j'ai récupéré le pack d'icônes de fontAwesome et j'ai bidouillé une API qui permette de faire la même chose que SVGBox.net, à savoir obtenir une icône svg dans la couleur que l'on souhaite.
La version 4.2 «unban» de Googol est en phase de test et elle m'a pris le pack premium de chez MaximumEffort.
Toutefois, ça valait le coup: plutôt que de me contenter de rediriger vers duckduckgo lors du bannissement par google - ce qui arrivait de plus en plus souvent - j'ai opté pour l'utilisation temporaire d'un moteur alternatif à la place de google...
Dans la catégorie «script à la con» voici une page qui permet de transformer un texte en gros titre ascii.
J'en ai eu besoin pour que la répartition de mon code pour Bozon se voie même dans la minimap de SublimeText.
(faut dire que la classe post/get à elle seule contient 1700 lignes environ... )
En vous rendant sur la page en question, vous pouvez taper un texte et sélectionner différents paramètres. Pour l'instant, elle ne gère que les caractères alphanumériques (je n'avais besoin que de ça)...
Le script est simplissime et facilement modifiable... faites-vous plaisir et partagez vos versions
J'ai mis à jour la page unicode.warriordudimanche.net pour ajouter la quantité de caractères qui manquaient.
J'ai un peu recodé pour pouvoir faire des packs avec les listes qui ne se suivent pas (genre les maths, 4 packs ), j'ai ajouté un favicon et j'ai un peu changé le look...
Juste en passant, pour les utilisateurs de Googol, j'ai ajouté la mise en surbrillance des mots-clés, si ça intéresse quelqu'un.
De plus, je songe à créer une sorte de réseau de googol qui permettrait de renvoyer une requête vers une autre instance quand Google bloque la nôtre... Pour ça, il faudra ajouter une base des googol en ligne: avis à ceux qui veulent en être ;-)
Bon, je fais un test de «googol network» : en gros, en cas de bannissement par google, votre instance va piocher au hasard dans une base d'URLs alternatives et leur renvoyer la requête.
Cette base est contenue dans le fichier googol_db.php (auquel vous pouvez ajouter d'autres instances)
Si le fichier n'existe pas, il est récupéré sur mon serveur, ou - en cas de serveur down - sur le serveur de github. L'avantage de mon serveur, c'est que vous avez la garantie que je ne loguerai pas vos accès
J'aurais pu ajouter une fonction de mise à jour du fichier, mais bon... pas là.
Si vous voulez ajouter votre instance à la base «officielle», n'hésitez pas à commenter !
Bon, sur ce, je vais végéter un moment passsque voyez-vous, en ce moment, je passe ma vie en bagnole d'un rendez-vous à l'autre, toujours à dache, entre deux activités jardinières, potagères ou cuisinières...