Deblan blog

Tag #API

API pour récupérer le contenu Open Graph d'une page web

Pour la fonctionnalité de partage de liens sur ce blog, j'ai développé un script qui récupére le contenu d'une page et analyse ses balises <meta> pour identifier ses données Open Graph.

Dans un autre contexte, j'ai rencontré un bug dans Wallabag qui l'empêche de récupérer le contenu de plusieurs pages web que je désirait lire plus tard. Avec la volonté de créer un rapport de bug, la documentation m'a amené sur la piste du projet Graby utilisé par Wallabag.

Pour comprendre et peut-être proposer un correctif, j'ai joué avec Graby et ça m'a amené à réaliser une API pour remplacer le script utilisé par le blog, en combinent Graby et fusonic/opengraph. L'objectif de l'API est donc de retourner des données générées par Graby et OpenGraph au format JSON.

Voici à quoi ressemble un retour d'appel à l'API avec les données Open Graph :

Le projet est dépendant de PHP 7.3 et c'est libre. Le code source est dispo ici.


T411 en console

Pour les addicts de t411, j'ai développé un outil en ligne de commande permettant d'accéder aux données du site. Ainsi, il est possible de faire des recherches avec critères, afficher les détails d'un torrent ou bien le télécharger. L'API du site a des bugs qui ne sont pas encore corrigés mais il est déjà possible de faire quelques trucs sympas.

Le code source et la doc sont disponibles sur Github. Tout est libre et ne vous génez pas pour forker :)


[Astuces] Wall deblan : API

Le wall de deblan est un outil que j'utilise très souvent. Pour rappel, c'est un service similaire à Pastebin qui permet de coloriser du code et de le partager facilement.

Jusqu'à présent, il existait deux méthodes pour l'utiliser. La première est la plus classique : se rendre sur le site est remplir le formulaire. La seconde consiste à passer par un script et faire une requête HTTP.

Une belle mise à jour à été faite aujourd'hui et vous pouvez envoyer un mail et recevoir l'adresse du code en réponse. Le principal intérêt est qu'il n'est plus obligatoire de se trouver sur une machine avec le script ou un navigateur.

Comment poster un code via un email ?
Cette fonctionnalité a été désactivée.

La procédure est très simple : vous devez créer un message destiné à wallapi@deblan.fr. L'objet du mail sera le langage associé à la colorisation et le corps du message sera le code à coloriser.

La personne qui envoie le message sera celle qui recevra le lien du wall en réponse.

Voici une commande type :

$ cat fichier_php | mail -s php -r foobar@deblan.fr wallapi@deblan.fr

Si vous souhaitez passer par un script, je vous invite à télécharger celui ci.

Voici trois commandes type :

$ /chemin/vers/le/script fichier.php php
$ cat fichier_php | /chemin/vers/le/script - php
$ cat fichier_php | /chemin/vers/le/script -

Dans les 3 cas, l'url du wall sera affichée.


Le cut d'url de Deblan, l'API avec Shell

Souvenez-vous, j'avais écris un article concernant l'API de mon système de cut d'url disponible sur url.deblan.fr.

Aujourd'hui je vous propose un script écrit en Shell pour utiliser cette API en ligne de commandes :

#!/bin/sh

VERSION=1.5

urlencode() {
	echo "$1" | sed 's/&/%25/g'
}

usage() {
cat << EOF

NOM
	$(basename $0) - Contact l'API de url.deblan.fr pour raccourcir une URL

SYNOPSIS	
	$0 [OPTIONS] URL

DESCRIPTION
	 Contact l'API de url.deblan.fr pour raccourcir une URL

	--help, -h                   Afficher l'aide-mémoire et quitter
	--version, -v                Afficher le nom et la version du logiciel et quitter
	--title <titre>, -t <titre>  Ajoute un titre dans l'URL de retour

	--type <type>, -r <type>     Indique le type de redirection
	 Formats autorisés
	  - http : redirection http (entête http Location)
	  - meta : direction par meta html
		Valeur par défaut : http

	--time <time>, -s <time>
		Si --type vaut 1, ce paramètre sera ignoré
		Valeurs autorisées (en secondes) : 3, 5, 10
		Valeur par défaut : 5

	--format, -f <format>        Indique le format de retour des données
		Valeur par défaut : text

	 Formats autorisés
	  - json :
		 Retour sans erreur
		  {"error":0,"values":[URL],"format":"json"}
		 Retour avec erreur(s) 
		  {"error":1,"values":[ERREURS],"format":"json"}
		
	  - xml :
		 Retour sans erreur
		  <?xml version="1.0" encoding="UTF-8"?>
		  <response>
		    <error>0</error>
		    <values>
		      <value>URL</value>
		     </values>
		  </response>
		 Retour avec erreur
		  <?xml version="1.0" encoding="UTF-8"?>
		  <response>
		    <error>1</error>
		    <values>
		      <value>ERREUR 1</value>
		      <value>ERREUR 2</value>
		      [...]
		     </values>
		  </response>
	  - text :
		 Retour sans erreur
		  URL
		 Retour avec erreur
		  error
		  ERREURS

AUTEUR
	Ecrit par Simon Vieille - http://www.deblan.fr/

SIGNALER DES BOGUES
	simon.vieille _AT_ free _POINT_ fr

LICENCE
	Ce  programme  est  un  logiciel  libre.  Vous  pouvez le modifier et le redistribuer. Il n'y a AUCUNE GARANTIE dans la mesure autorisée par la loi.

EOF
}

version() {
	cat << EOF
$0, version $VERSION
EOF
}

URL=
TITLE=
TYPE=1
TIME=5
FORMAT=text

for p in "$@"; do
	case "$p" in
		--help|-h) 
			usage | less 
			exit 0;;

		--version|-v) 
			version 
			exit 0;;

		--title|-t)
			shift
			TITLE=$(urlencode "$1")
			shift;;

		--format|-f)
			shift
			FORMAT="$1"
			
			case $FORMAT in
				xml|text|json) ;;
				*) 
					echo "Erreur de paramètre (FORMAT) - $0 --help pour plus d'informations"
					exit 1;;
			esac
			shift;;

		--time|-s)
			shift
			TIME="$1"

			case $TIME in
				3|5|10);;
				*) 
					echo "Erreur de paramètre (TIME) - $0 --help pour plus d'informations"
					exit 1;;
			esac
			shift;;

		--type|-r)
			shift
			TYPE="$1"
			case $TYPE in
				http) TYPE=1;;
				meta) TYPE=2;;
				*) 
					echo "Erreur de paramètre (TYPE) - $0 --help pour plus d'informations"
					exit 1;;
			esac
			shift;;
	esac
done

if [ -z "$URL" ]; then
	URL=$(urlencode "$1")
	if [ -z "$URL" ]; then
		echo "Erreur de paramètre (URL) - $0 --help pour plus d'informations"
		exit 1
	fi
fi

TMP=/tmp/cut$(date '+%N')

wget "http://url.deblan.fr/gestion/api.php?url=$URL&title=$TITLE&type=$TYPE&format=$FORMAT&time=$TIME" -O $TMP >/dev/null 2>&1

echo "`cat $TMP`"
rm -f $TMP

exit 0

Enjoy :) !


Le cut d'url de Deblan a son API

J'ai développé aujourd'hui l'API de mon service qui raccourcis les URL.

L'API est disponible à cette URL : http://url.deblan.fr/gestion/api.php

Tout ce fait via des requêtes HTTP avec des paramètres passés en GET. Voici la liste des paramètres :
  • url (requis) : adresse web à raccourcir
  • title : titre à insérer dans le lien
  • type : type de redirection (1 pour http, 2 pour une redirection par meta html)
  • time : si type=2, alors time correspond au nombre de secondes avant la redirection (3, 5, 10 autorisés)
  • format : format de retour des informations (json, xml, text autorisés)

Si vous demandez le format json, la valeur de retour est un objet. Il contient :

  • error : attribut (int) qui prendra 0 si aucune erreur n'est détectée sinon 1
  • values : attribut (array) qui contient soit l'url, soit l'ensemble des erreurs

Si c'est spécifiez xml, vous aurez un noeud "response" qui contient :

  • un noeud error : entier qui prendra 0 si aucune erreur n'est détectée sinon 1
  • un noeud values qui contient un ou plusieurs noeuds value qui seront soit l'url générée, soit l'ensemble des erreurs

Par contre, si vous indiquez un format text :

  • Si le retour contient une ligne alors ça sera l'url
  • Si le retour est composée de plusieurs lignes, alors la première contient "error" et les autres contiendront les erreurs
Exemple :

Requête :

http://url.deblan.fr/gestion/api.php?url=https://www.deblan.io/&title=Mon%20blog&format=xml&type=2&time=5

Réponse :

<response>
  <error>0</error>
  <values>
    <value>http://url.deblan.fr/11527/Mon-blog</value>
  </values>
</response>