Création d'INFOJUNE

TADAM !!!
Pour plus de décentralisation, l’API REST pour Infojune est disponible sur https://infojune.fr/api

Exemples :

Le code source du plugin (CMS SPIP) est disponible sur gitlab.

1 Like

Bravo !

Moyen de rewrite l’url pour quelque chose de plus court ?

genre https://infojune.fr/api/langues ?

1 Like

C’est fait :wink: https://infojune.fr/api/

J’ai le cerveau en feu mais j’ai écrit cette regex (sans chatGPT parce qu’il m’a dit de la merde :stuck_out_tongue: ) mais avec https://regex101.com/

rewrite ^/api(\/(.*))?$ /spip.php?action=api_http&arg=ezrest/$2 last;

@ManUtopiK Maintenant y’a moyen de récupérer le contenu d’InfoJune pour le site monnaie-libre.fr :wink:

2 Likes

Génial ça !
Et est-ce qu’il y a la possibilité via l’api de soumettre une entrée ?

1 Like

Pas avec le plugin que j’utilise. Il expose une API REST limitée à la méthode GET. Mais y’aurait-il un intérêt à proposer une entrée par l’API ? Infojune dispose déjà de son propre formulaire de suggestion.

Je suis passé rapidement à une v2 qui rajoute pas mal de choses comme les logos, la liste complète des liens, les champs parents et enfants, etc. : https://infojune.fr/api/

Vous pouvez faire une recherche avec par exemple : https://infojune.fr/api/liens?search=duniter

Aujourd’hui, j’ai découvert https://swagger.io/.

Donc voici la documentation de l’API d’infojune qui vous permet de la tester en live !!!

1 Like

As-tu regardé ce framework : https://api-platform.com/ ?

J’en avais entendu parler quand je développais sous Symfony.
Il ont bien évolués et on peut générer aussi du GraphQL et des client Nuxt.js en scaffolding !

Je crois qu’il respecte la spec OpenAPI comme Swagger pour le REST.

2 Likes

En effet j’ai découvert le standard Open API seulement hier :stuck_out_tongue: C’est la première fois que code une API depuis presque 10 ans (quand j’avais repris les études en informatique).

Infojune a été réalisé avec le CMS PHP SPIP car c’était rapide à mettre en place. Au départ, je n’avais pas prévu de faire une API. Donc je cherchais un outil juste pour la doc puisque l’API est déjà codée via un plugin SPIP. Si un jour, je veux en refaire une, j’essaierai d’utiliser des outils plus “modernes”.

En tous cas, ça peut être utile merci :slight_smile:

2 Likes

Le CMS SPIP qui gère Infojune avait une faille de sécurité importante qui commençait à être largement exploitée. J’ai donc fait une MAJ ce matin vers la v4.1.9 du CMS (après une bataille acharnée avec GIT, le dépôt est à jour). Suite à une demande de @HugoTrentesaux , la pagination a été largement augmentée pour une navigation plus pratique.

3 Likes

Merci pour cette mise à jour ! J’enchaîne avec une suggestion :

Certaines personnes ont un projet de référencement des vidéos. Infojune pourrait faciliter leur travail en cherchant automatiquement des infos comme le titre ou la vignette depuis les différentes sources (youtube, peertubes, …).

2 Likes

Certains utilisateurs m’ont remonté que le input affichant une opération sur la page de suggestion était parfois trop petit. Je l’ai agrandi légèrement. Sur Firefox, ça passe bien mais si certains d’entre vous ont d’autres navigateurs et rencontrent des soucis, j’aimerais avoir votre retour (ouvrez la console de votre navigateur et remplacez l’opération par “10 + 10” pour avoir la longueur maximale).

image

Ça me paraît un peu compliqué à réaliser : Il faudrait créer un plugin SPIP en PHP qui irait chercher, via une tâche CRON, des vidéos (sur quels critères ? de quelle manière ?) pour créer dans sa base de données les articles pour chacune des vidéos (3 par videos, un dans chaque langue) tout en vérifiant si elle n’est pas déjà référencée dans la BDD pour éviter les doublons.

Non pas forcément, par exemple pour une vidéo youtube, il suffit de récupérer la vignette depuis youtube :

DNS infojune.fr relancée pour un an.

2 Likes

Après avoir développé un plugin SPIP pour faire du graphQL, je vous propose de tester le endpoint graphQL d’infojune : https://infojune.fr/spip.php?action=graphql

Il y a encore des choses à améliorer mais c’est déjà un bon début :slight_smile:

Génial ça !

1 Like

Un exemple de requête pour récupérer toute la hiérarchie du site :

query arbo {
  rubriques(where: ["profondeur=1", "lang=fr"]) {
    result {
      ...RubriqueFields
      ...RubriqueChildren
    }
  }
}

fragment RubriqueFields on Rubrique {
  ...ObjetField
  articles {
    result {
      ...ObjetField
      url_site
      createurs
      licence
      mots {
        result {
          ...ObjetField
        }
      }
    }
  }
}

fragment RubriqueChildren on Rubrique {
  rubriques {
    result {
      ...RubriqueFields
      rubriques {
        result {
          ...RubriqueFields
          rubriques {
            result {
              ...RubriqueFields
            }
          }
        }
      }
    }
  }
}

fragment ObjetField on Objet {
  id
  titre
  descriptif
  logo
  maj
  rang
}
1 Like

J’ai bien testé la requête, voici la réponse !
arbo.json (66.0 KB)

1 Like

Une autre requête pour les intéressés :

query maRecherche {
  recherche(texte: "De la Thune à la June") {
    ...RechercheFields
    ... on Article {
      rubrique {
        ...ObjetField
      }
      url_site
      createurs
      licence
      mots {
        result {
          ...ObjetField
        }
      }
    }
  }
}

fragment RechercheFields on Objet {
  id
  titre
  typeCollection
  descriptif
  logo
  maj
  points
}

fragment ObjetField on Objet {
  id
  titre
  logo
}

Cette requête ne pagine pas mais le nombre de résultats retournés n’est jamais vraiment trop élevé. Je vais bientôt modifier le format de la Pagination pour prendre en compte cette spécification recommandée.