Sébastien

Sébastien

dimanche, 19 janvier 2020 08:42

Exploitons les API de l'INSEE

Nous allons voir, au cours de ce (long) article, comment récupérer très facilement des données INSEE sur vos entreprises favorites.
ATTENTION : deux sites internet avec des API sur les données INSEE existent. Nous parlons bien ici du site api.insee.fr. Il existe (ou existait) un autre site avec des API aussi quelque peu différentes (d'après ce que j'ai vu) http://api.insee.fr qui ne fonctionne plus.

Acquérons une clef API

Je ne reviens plus sur le "à quoi cela sert", elle sert à vous authentifier et gérer les restrictions lorsque l'API en possède. JE ne vais pas m'étendre sur le sujet étant donnée qu'une documentation en français sur l'acquisition des clefs API de l'INSEE est mise en ligne et est assez détaillée. (je ne vous cacherai pas que pour comprendre comment acquérir une clef, ... j'ai lu la doc !) Ensuite, lançons-nous dans le grand bain !

Premièrement vérifions la date de la dernière mise à jour de la base INSEE

Si je vous laisse le jetons qui m'a permi de faire mes tests, c'est qu'il ne fonctionne plus. Remplacez le jeton (en bleu) par le vôtre.

curl -X GET --header 'Accept: application/json' --header 'Authorization: Bearer 1f6c905a-435c-302e-babd-6e2152bfd86f' 'https://api.insee.fr/entreprises/sirene/V3/informations'

Accès au service avec recherche de la totalité des périodes historiques par SIREN

Rappelons poor celles et ceux qui l'ignorent, ce que signififie SIREN : Système Informatique du Répertoire des Entreprises.
L'accès au SIREN s'appelle via l'API de cette forme :
https://api.insee.fr/entreprises/sirene/V3/siren/{siren}

Il est possible de définit un paramètre date
https://api.insee.fr/entreprises/sirene/V3/siren/{siren}?date={date}

Voici les parmètres pouvant être concaténés à l'URL :

  • {siren} est un numéro à 9 chiffres : paramètre obligatoire.
  • {date} est de la forme AAAA-MM-JJ : paramètre facultatif

Accès au service avec le paramètre date qui renvoie uniquement la période comprenant cette date :

On accède à cette données via la requête HTTP https://api.insee.fr/entreprises/sirene/V3/siren/{siren}?date={date}.
Bien évidemment, il faut remplacer les valeurs en bleu par les données réelles.
Les données à paser en paramètre correspondent à :

  • {siren} est un numéro à 9 chiffres : paramètre obligatoire.
  • {date} est de la forme AAAA-MM-JJ : paramètre facultatif
    • Ex. 1 : https://api.insee.fr/entreprises/sirene/V3/siren/005520135
    • Ex. 2 : https://api.insee.fr/entreprises/sirene/V3/siren/005520135?date=2019-01-01

ATTENTION : si aucune activité n'est antérieure à la date donnée, une réponse 404 est retournée car aucun élément n'est trouvé pour le Siren 005520135 passé en paramètre à la date 1950-01-01, par défaut.

URL d’accès au service avec recherche de la totalité des périodes historiques par SIRET

Il est ainsi possible de récupérer un historique des éléments connus pour un SIRET donné, via un appel de cette sorte :
https://api.insee.fr/entreprises/sirene/V3/siret/{siret}

Voici les parmètres pouvant être concaténés à l'URL :

  • {siren} est un numéro à 9 chiffres : paramètre obligatoire.
  • {date} est de la forme AAAA-MM-JJ : paramètre facultatif

Interrogation "unitaire" par Siret

En effet, et c'est le plus interessant à mon avis, quoi de plus syma de connaitre des informations sur UN siret donné ?
Recherchons sur la durée de vie du SIRET donné les informations le concernant : https://api.insee.fr/entreprises/sirene/V3/siret/{siret}
Mais remarquez qu'il est aussi possible de borner la période de recherche, en pasasnt un paramètre date https://api.insee.fr/entreprises/sirene/V3/siret/{siret}?date={date} Voici les parmètres pouvant être concaténés à l'URL :

  • {siret} est un numéro à 14 chiffres : paramètre obligatoire.
  • {date} est de la forme AAAA-MM-JJ : paramètre facultatif


Le retour est structuré en 2 parties :

  • le header (à ne pas confondre avec l'en-tête http ni l'en-tête de réponse) qui contient le code retour et le message d'erreur ;
  • l'établissement, qui comprend :
    • Toutes les variables courantes hors celles de l'adresse
    • La structure unité légale qui comprend toutes les valeurs courantes de l'unité légale,
    • La structure adresse qui comprend toutes les variables de l'adresse,
    • La liste de toutes les périodes et, pour chaque période,
    • La liste des variables historisées.

L'ensemble des éléments retournés est dans la documentation.

Pour aller + loin...

Je ne m'étendrai pas sur ce sujet car cet article n'ap pour but que d'initier les néophyte aux API de l'INSSE, mais sachez que vous pouvez combiner des critères de recherches, afin d'affiner vos rcherches.
L'url de votre recherce multicritere se construit de la sorte (cas de recherche d'un SIREN) : https://api.insee.fr/entreprises/sirene/V3/siren?q={requête multicritère}
L'url de votre recherce multicritere se construit de la sorte (cas de recherche d'un SIRET) : https://api.insee.fr/entreprises/sirene/V3/siret?q={requête multicritère}
S'il y a d'autres paramètres à adjoindre, en plus de la requete multicritères, on peut le faire de la sorte : https://api.insee.fr/entreprises/sirene/V3/siren?q={requête multicritère}&date=
La syntaxe des critères multiples est basé sur le couple nomVariable:valeur. nomVariable doit correspondre exactement (casse comprise) à la variable de sortie de l’interrogation unitaire.
Toutes les variables peuvent être utilisées, y compris les indicatrices, avec quelques subtilités pour les variables au format date et les variables historisées.

EXEMPLES

Aller j'ai testé l'ecriture de mon article avec ces requetes http suivantes :

Recherches monocritères :

  • Récupération des données pour UN siren : https://api.insee.fr/entreprises/sirene/V3/siren/005520135
  • Récupération d'informations pour UN SIREN donné à partir d'une date : https://api.insee.fr/entreprises/sirene/V3/siren/005520135?date=2000-01-01
  • Récupération d'informations pour UN SIREN avec date précédant la première période connue de l'établissement: RETOURNE UN STATUT 404
  • Récupération par SIRET : https://api.insee.fr/entreprises/sirene/V3/siret/39860733300059
  • Récupération par SIRET à partir d'une date : https://api.insee.fr/entreprises/sirene/V3/siret/39860733300059?date=2015-08-01
  • Récupération par SIRET avec date précédant la première période connue de l'établissement: RETOURNE UN STATUT 404

Recherches multicritères

J'ai aussi testé des recherches multicritères :

  • Recherche de tous les établissements du Siren 775672272 : /siret?q=siren:775672272
  • Recherche de toutes les unités purgées : /siren?q=unitePurgeeUniteLegale:true
  • Recherche de tous les établissements des unités purgées : /siret?q=unitePurgeeUniteLegale:true
  • Recherche de tous les établissements de la commune de Malakoff (code commune=92046) : /siret?q=codeCommuneEtablissement:92046

Recherche sur des valeurs historisées

Il est aussi possible d'interroger la "base" sur l'historisation de certaines données :

  • Recherche de toutes les UL dont la dénomination contient ou a contenu le mot GAZ : /siren?q=periode(denominationUniteLegale:GAZ)
  • Recherche de toutes les UL qui ont été cessées : /siren?q=periode(etatAdministratifUniteLegale:C)
  • Recherche de tous les établissements dont le code de l’activité principale a été 33.01 : construction de cellules d’aéronef (code NAP600) : /siret?q=periode(activitePrincipaleEtablissement:33.01)

Recherches par éliminations

  • Recherche de tous les établissements dont l'unité légale est une personne morale : /siret?q=-categorieJuridiqueUniteLegale:1000
  • Recherche de tous les établissements qui n'ont jamais été fermés : /siret?q=-periode(etatAdministratifEtablissement:F)

Recherches en combinant des booléens

  • Recherche de toutes les entreprises dont l’activité principale a été au moins dans une période 84.23Z ou 86.21Z : /siren?q=periode(activitePrincipaleUniteLegale:84.23Z OR activitePrincipaleUniteLegale:86.21Z)
  • Recherche de tous les établissements qui ont au moins une période où l'établissement est à la fois Actif et a une activité principale à 84.23Z : /siret?q=periode(activitePrincipaleEtablissement:84.23Z AND etatAdministratifEtablissement:A)
  • Recherche de tous les établissements qui ont moins une période dont l’activitePrincipaleEtablissement est 84.23Z et qui n'ont jamais été fermés : /siret?q=periode(activitePrincipaleEtablissement:84.23Z) AND -periode(etatAdministratifEtablissement:F)
  • Recherche de tous les établissements sur la commune de Malakoff dont la dernière catégorie juridique de l’unité légale est 9220 (association déclarée): /siret?q=codeCommuneEtablissement:92046 AND categorieJuridiqueUniteLegale:9220

Recherches exactes

La recherche exacte se fait en utilisant les guillemets doubles.
Recherche de toutes les unités légales dont la dénomination contient exactement le terme " LE TIMBRE " : /siren?q=periode(denominationUniteLegale:"LE TIMBRE")

Recherches en utilisant des jokers

  • « * » permet de remplacer une chaîne de caractères de taille quelconque :
    Recherche de tous les établissements des unités légales dont l'activité principale commence par 8 : /siret?q=activitePrincipaleUniteLegale:8*
    Recherche de tous les établissements des unités légales dont le sigle n'est pas rempli : /siret?q=-sigleUniteLegale:*
  • « ? » permet de remplacer exactement un caractère.
    Recherche de tous les établissements dont l'unité légale a un sigle sur 3 positions : /siret?q=sigleUniteLegale:???
    Recherche de tous les établissements dont l'unité légale a un sigle qui commence par FC et est sur 3 positions exactement : /siret?q=sigleUniteLegale:FC?
  • Recherche avec utilisation de différences de Damerau-Levenshtein
    • Recherche de tous les établissements dont l’unité légale a pour sigle PAUL à une erreur près : /siret?q=sigleUniteLegale:PAUL~1
    • Recherche de 20 établissements dont la dénomination comporte "bleu le": /siret?q=denominationUniteLegale:"bleu le"&nombre=20&chmps=denominationUniteLegale
    • Recherche de 20 établissements dont la dénomination comporte "bleu le" AVEC UNE DISTANCE DE Levenshtein de 2 : /siret?q=denominationUniteLegale:"bleu le"~2&nombre=18&champs=denominationUniteLegale
    • Recherches de plages de valeurs
    • La syntaxe est la suivante :
      • nomVariable:[valeur1 TO valeur2] : bornes valeur1 et valeur2 sont incluses
      • nomVariable:{valeur1 TO valeur2} : bornes valeur1 et valeur2 sont excluses

Les symboles { et } doivent être échappés :%7B et%7D

      • Recherche sur des dates
      • Il est possible de faire des recherches sur les variables de type date, y compris les dates de début et de fin de période.
        • Pour les SIREN
          • Recherche de toutes les entreprises dont l’activité principale a été au moins dans une période 84.23Z ou 86.21Z : /siren?q=periode(activitePrincipaleUniteLegale:84.23Z OR activitePrincipaleUniteLegale:86.21Z)
          • Recherche de tous les établissements qui ont au moins une période où l'établissement est à la fois Actif et a une activité principale à 84.23Z : /siret?q=periode(activitePrincipaleEtablissement:84.23Z AND etatAdministratifEtablissement:A)
          • Recherche de tous les établissements qui ont moins une période dont l’activitePrincipaleEtablissement est 84.23Z et qui n'ont jamais été fermés : /siret?q=periode(activitePrincipaleEtablissement:84.23Z) AND -periode(etatAdministratifEtablissement:F)
          • Recherche de tous les établissements sur la commune de Malakoff dont la dernière catégorie juridique de l’unité légale est 9220 (association déclarée) : /siret?q=codeCommuneEtablissement:92046 AND categorieJuridiqueUniteLegale:9220
          • Recherche de toutes les unités légales dont la dénomination contient exactement le terme "LE TIMBRE" : /siren?q=periode(denominationUniteLegale:"LE TIMBRE")

Et toujours l'utilisation de jokers

      Avec le joker * :
      • nomVariable:va* => nomVariable doit commencer par "va"
      • nomVariable:*eur => nomVariable doit terminer par eur
      • nomVariable:*ale* => nomVariable doit contenir la chaîne ale
      • nomVariable:* => nomVariable doit contenir au moins une lettre
      Exemples :
      • Recherche de tous les établissements des unités légales dont l'activité principale commence par 8 : /siret?q=activitePrincipaleUniteLegale:8*
      • Recherche de tous les établissements des unités légales dont le sigle n'est pas rempli : /siret?q=-sigleUniteLegale:*

Avec le joker ? :

        • Recherche de tous les établissements dont l'unité légale a un sigle sur 3 positions : /siret?q=sigleUniteLegale:???
        • Recherche de tous les établissements dont l'unité légale a un sigle qui commence par FC et est sur 3 positions exactement : /siret?q=sigleUniteLegale:FC?

Recherche sur des approximations

        • Recherche de tous les établissements dont l'unité légale a comme prenom1UniteLegale MICKAEL à deux caractères près, mais pas MICKAEL exactement : /siret?q=prenom1UniteLegale:MICKAEL~ AND -prenom1UniteLegale:MICKAEL
        • Recherche de tous les établissements dont l’unité légale a pour sigle PAUL à une erreur près : /siret?q=sigleUniteLegale:PAUL~1
        • Recherche de toutes les UL dont le nom d’usage va de DUPONT à DURAND,
          • y compris DUPONT et DURAND : /siret?q=nomUsageUniteLegale:[DUPONT TO DURAND]
          • Non compris DUPONT et DURAND : /siret?q=nomUsageUniteLegale:{DUPONT TO DURAND}
          • Y compris DUPONT et non compris DURAND : /siret?q=nomUsageUniteLegale:[DUPONT TO DURAND]

Recherche sur des variables de type date

          Pour les SIRET :
          • dateCreationEtablissement
          • dateDernierTraitementEtablissement
          • dateDebut
          • dateFin
          • dateCreationUniteLegale
          • dateDernierTraitementUniteLegale
          • dateDebut
          • dateFin
          La syntaxe pour requêter sur les variables dates est la suivante :
          • variabledate:AAAA-MM-JJ
          • variabledate:AAAA-MM recherche sur le mois correspondant
          • variabledate:AAAA recherche sur l'année correspondante
          La syntaxe pour requêter sur les périodes:
          • variabledate:[2001 TO 2004-05] cherchera du 01/01/2001 inclus au 31/05/2004 inclus
          • variabledate:[2017 TO *] cherchera à partir du 01/01/2017
          EXEMPLES :
          • Recherche de toutes les UL dont la date de création est au 01/01/2014 : /siren?q=dateCreationUniteLegale:2014-01-01
          • Recherche de toute les UL dont l’année de création est entre 1980 et 2003 : /siren?q=dateCreationUniteLegale:[1980 TO 2003]
          • Recherche de tous les établissements mis à jour au mois de février 2018 et non mis à jour depuis : /siret?q=dateDernierTraitementEtablissement:2018-02
          • Recherche de toutes les UL qui ont eu un changement de dénomination l'année 2017 : /siren?q=periode(changementDenominationUniteLegale:true AND dateDebut:2017)
          La syntaxe pour requêter avec des dates en paramètres :

 

        La syntaxe est la suivante : ?q={requête}&date=AAAA-MM-JJ
        EXEMPLES :
        • Recherche de toutes les UL actives au 18/09/2009 : /siren?q=periode(etatAdministratifUniteLegale:A)&date=2009-09-18
        • Recherche de tous les établissements de Malakoff dont l’activitePrincipaleEtablissement est 56.10A : (restauration traditionnelle) et actifs au 01/01/2018 : /siret?q=periode(etatAdministratifEtablissement:A AND activitePrincipaleEtablissement:56.10A) AND codeCommuneEtablissement:92046 &date=2018-01-01

PAGINATION DES RESULTATS :

        • {nombre} : unités légales ou établissements à afficher par page (entre 0 et 1 000). La valeur par défaut est 20 réponses par page.
      • {debut} : correspond au rang de classement du premier établissement à afficher sur la page. La valeur par défaut est 0 (attention 0 correspond au premier établissement). Le paramètre a été limité à 100 000 pour des raisons de performance.
        Attention : lorsque vous souhaitez utiliser le paramètre {debut}, il est fortement recommandé d'utiliser le paramètre {tri}.
        {tri} indique si les résultats doivent ou non être triés. Par défaut le paramètre vaut false afin de favoriser la performance de l'appel. Dans ce cas, les résultats sont triés par un score de pertinence. Si plusieurs éléments obtiennent le même score ils peuvent arriver dans n'importe quel ordre et cet ordre peut varier d'une interrogation à l'autre. En fixant le paramètre à true, les éléments obtenant le même score seront classés par siren ou siret selon la collection interrogée. Ce paramétrage à true est fortement recommandé lorsque le paramètre {debut} est utilisé.
      • CURSEURS : Si vous désirez parcourir un grand nombre de résultats, notamment pour obtenir des résultats au-delà de la limite indiquée ci-dessus, pour des raisons de performance il est fortement recommandé d’utiliser des curseurs. A votre première requête ajouter le paramètre curseur=*.
      • Première requête : /siret?q=*&curseur=*&nombre=100

 

        Retour :
        • Nombre : 100,
        • Curseur : "*" ,
        • CurseurSuivant : "AoEuMTIwMDI3MDE2MDAzNjU="
        • Requête suivante:/siret?q=*&curseur=AoEuMTIwMDI3MDE2MDAzNjU=&nombre=100
        • Retour :
        • Nombre : 100,
        • Curseur": "AoEuMTIwMDI3MDE2MDAzNjU=",
        • CurseurSuivant : "AoEuMTIwMDI3MDE2MDA1MjI="

RECHERCHES MULTICRITERES :

Je n'ai pas regardé les facettes qui ne permettent que des comptages

      Selection des champs (projections en langage de manipulations de données) :
      • Afficher le champs dateCreationEtablissement pour l'établissement ayant le siret 39860733300059 : /siret/39860733300059?champs=dateCreationEtablissement
      • Afficher plusieurs champs sur ce même établissement : /siret/39860733300059?champs=nomUniteLegale,dateCreationEtablissement ou /siret/39860733300059?champs=nomUniteLegale,dateCreationEtablissement,enseigne1Etablissement
      • Masquer les valeurs nulles : /siren/356000000?masquerValeursNulles=true&date=2019-01-01

RECHERCHES PHONETIQUES :

      En effet, il est possible de faire des recherches sur la phonétique des mots.

 

      La syntaxe est la suivante, au choix :
      • /siren?q=periode(nomVariable.phonetisation:{recherche}) pour les variables historisées
      • /siren?q=nomVariable.phonetisation:{recherche} pour les variables non historisées
      • /siret?q=periode(nomVariable.phonetisation:{recherche}) pour les variables historisées
      • /siret?q= nomVariable.phonetisation:{recherche} pour les variables non historisées
        • Recherche des entreprises (personnes physiques) dont le nom correspond phonétiquement à mairau : siren?q=periode(nomUniteLegale.phonetisation:mairau)&champs=nomUniteLegale&nombre=20
        • Recherche des établissements dont la dénomination courante de l’entreprise contient un mot correspondant phonétiquement à oto : siret?q=denominationUniteLegale.phonetisation:oto&champs=denominationUniteLegale&nombre=10

SCORE

      Pour chacun des résultats obtenus, selon la valeur jugée plus ou moins fiable, un score est affecté, permettant ainsi un tri à l'affichage. Cependant, ce sore doit être demandé dans la requête. Icin nous obtenons une recherche sur les 8 premiers résultats dont la dénominationUnitéLégale=auto :
      • /siret?q=denominationUniteLegale:auto&champs=score,denominationUniteLegale&nombre=8
      • Dans le cadre de score, il est possible de pondérer les valeurs de retour. Ex : R
      • Recherche sur le sigle et la dénomination en privilégiant la dénomination : /siret?q=ponderation(denominationUniteLegale*2sigleUniteLegale*1:unimer)&champs=score,denominationUniteLegale,sigleUniteLegale
      • Recherche de plusieurs mots dans la denominationUniteLegale en privilégiant un mot :/siren?q=ponderation(denominationUniteLegale*4:hotel) OR ponderation(denominationUniteLegale*2:mer) &champs=score,denominationUniteLegale&nombre=5

Connaitre l'état du service interrogé

      Il faut avoir à l'esprit que ce système n'est pas mis à jour en temps réel, mais suite au lancement de batch à intervalle (réguliers ?). Aussi, est il important de connaitre ces dernières dates de mises à jour. C'est grace à cette commande

https://api.insee.fr/entreprises/sirene/V3/informations

      Trois dates sont importantes :
      • dateDerniereMiseADisposition : Les données sont mises à jour quotidiennement et intègrent les modifications enregistrées au répertoire Sirene la veille. Une fois par jour, les données consultées basculent de J-2 à J-1. En pratique quelques milliers d'unités voient leur situation évoluer, la grande majorité des unités restent inchangées.
      • dateDernierTraitementMaximum : Toutes les données enregistrées dans le répertoire Sirene jusqu'à cette date sont accessibles par le service API Sirene. Cette date intéresse un utilisateur cherchant à mettre à jour une copie des données.
      • dateDernierTraitementDeMasse : Entre 1 et 3 fois dans l'année, des traitements de gestion peuvent impacter un très grand nombre d'unités (par exemple la mise à jour annuelle des effectifs peut concerner plus de 3 millions d'unités légales en une seule fois)

Nomenclatures

Passons désormais à la deuxième partie de l'API : les Nimenclatures.
Les nomenclatures donne accès aux métadonnées statistiques de la statistique publique (dixit INSEE). . Vous pouez retrouver, si vous etes plus amplement interessé sur le contenu, toutes les explications sur https://api.insee.fr/catalogue/site/themes/wso2/subthemes/insee/pages/item-info.jag?name=Nomenclatures&version=v1&provider=insee, notamment la limitation du requetage, edicté à 30 interrogations par minute. Voyons les entrailles de l'API.

 

Informations sur une classe de la NAF rév.2 identifiée par son code

      Commençons pa rappeler, sauf erreur de ma part, qque le code NAF et le code APE sont la meme chose. Je ne suis pas spécialiste en la matière, si vous avez des précisions à apporter sur ce sujet, n'hésitez pas à me contacter avec les corrections à apporter sur le sujet.
      La demande d'information est très simple : il suffit de concaténer à l'uURL https://api.insee.fr/metadonnees/nomenclatures/v1/codes/nafr2/classe/ le code naf. On obtient donc, pour le code NAF 27.40, l'url suivante à lancer : https://api.insee.fr/metadonnees/nomenclatures/v1/codes/nafr2/classe/27.40

Information sur une sous classe

      Après avoir vu comment récupérer l'information sur une classe, nous allons interroger une sous classe. . Le principe est exactement le meme que celui décrit dans le paragraphe précédent, a l'unique différence que l'on asse en apramètre la sous-classe accolée à la classe. Si aucune réponse n'est recupérable, ils nous renvoie un message 404.

Géographie

L'INSEE nous permet aussi, bien entendu, d'interroger sa base afin de récupérer des données géographiques. Ce sont les denières interrogations possibles, amis non des moindres. Nous allons voir dans ce paragraphe comment obtenir des informations sur une commune française identifiée par son code INSEE évidemment, sur une région de frances, elle aussi identifiée par son code INSEE et enfin les information d'un pays identifié par son code à 5 chiffres commencant par 99

Informations sur une commune française identifiée par son code (cinq caractères)

Sans faire mon chauvin, autant utiliser ma plus grosse commune près de chez moi, la superbe ville de Nancy (sa place stanislas, ses macarons, ses bergamottes...) sous le code 54395 !
Trois informations nous sont retournées :

  • Le code INSEE que nous avons saisi
  • l'URL INSEE de la commune
  • L'intitulé exacte de la commune

Ce dernier retour peut d'ailleurs etre interessant pour les recherche de nom de commune associé à des soundex.

Informations sur une région française identifiée par son code (deux chiffres)

Continuons du coup sur notre lancée en utilisant le 41 comme région. Vous pouvez retrouver ces codes sur Wikipédia. Pour préparer la requete http, l'URL se présente donc sous la forme https://api.insee.fr/metadonnees/nomenclatures/v1/geo/region/54. En lançant la commande cURL (curl -X GET --header 'Accept: text/html' --header 'Authorization: Bearer [VOTRE BEARER]' 'https://api.insee.fr/metadonnees/nomenclatures/v1/geo/region/)fournie par le site de l'API, on obtient un retour JSON de la forme : {"code":"54395","uri":"http://id.insee.fr/geo/commune/54395","intitule":"Nancy"}. Il ne reste plus qu'éventuellement à le parser.

Information sur une région francaise

Il en va du meme principe pour récupérer les données officielles d'une région française. En passant la région drans l'url de la sorte : https://api.insee.fr/metadonnees/nomenclatures/v1/geo/region/27, ici le code région choisi est le code de la bourgogne, un json est retourné avec toutes les données officielles de la région. On y retrouve notamment le code de la réion, l'URL vers le site de l'INSEE de cette région et sa dénomination exacte.

Information sur un pays

Enfin, nous erminon cet article sur la récupération de données concernant des pays (notons d'ailleurs ici que c'est in institut officiel francais qui détient des informations sur d'autres pays) en lançant une requete http du type https://api.insee.fr/metadonnees/nomenclatures/v1/geo/pays/99223, la données en rouge étant le code officiel de l'INSEE du pays. Dans ce cas présent, c'est l'Inde.

La requete http nous retourne quatres informations :

      • Le code INSEE du pays
      • l'uri INSEE du pays
      • son intitulé exact
      • Son intitulé en entier exact.

Désormais, plus de prétexte pour appeler l'Inde par son nom exacte : République de l'inde.

Conclusion

Encore une fois, nous pouvons voir qu'au traver des API, il est for interessant de retrouver des données uniformisée. Cela peut etre interessant, dans un exemple que je connais bien, la gestion d'un agenda culturel, pour uniformiser les noms des communes. En effet, associés aux soundex 2 prenant en compte la francisation des termes, on peut monter des systèmes d'autocomplétions assez précis. Have fun

ffmpeg -y -i tumblr_pi4xunYpgT1v1wvcuo1_1280.jpg -i tumblr_pi4xunYpgT1v1wvcuo1_1280.jpg -i tumblr_pi4xunYpgT1v1wvcuo1_1280.jpg -filter_complex "[0:v]zoompan=z='zoom+0.0000':d=50[img1];[1:v]zoompan=z='if(lte(zoom,1.0),1.1,max(1.001,zoom-0.0030))':d=200[img2];[img1][img2]blend=all_expr='if(lte((H/2-sqrt((Y-H/2)*(Y-H/2)))+N*8*SH,H/2),A,B)'[img1img2];[1:v]zoompan=z='zoom+0.0000':d=50[img2];[2:v]zoompan=z='if(lte(zoom,1.0),1.1,max(1.001,zoom-0.0030))':d=200[img3];[img2][img3]blend=all_expr='if(lte((H/2-sqrt((Y-H/2)*(Y-H/2)))+N*8*SH,H/2),A,B)'[img2img3];[img1img2][img2img3]concat=n=2[final]" -map "[final]" out.mp4

Ceci permet d'apposer un bandeau horizontal, entre deux time code, suur fond transparent coloré, avec un texte à l'intérieur :

ffmpeg -y -i 1.mp4 -vf "drawbox=enable='between(t,2,6)':y=ih-ih/4:color=black@0.5:width=iw:height=56:t=max", "drawtext=enable='between(t,8,16)':fontfile=roboto.ttf:y=h-h/4+10:x=20:text='Test Heading':fontcolor=white:fontsize=16,drawtext=enable='between(t,2,6)':fontfile=roboto.ttf:y=h-h/4+30:x=20:text='Test sub heading':fontcolor=white:fontsize=12" -acodec copy output.mp4

On retrouve : 

  • -i 1.mp4 : fichier d'entrée 
  • -vf : format de sortie
  • drawdox : dessin du bandeau
  • between(t,2,6) : affichage entre la seconde 2 et la seconde 6
  • color : couleur de fond, ainsi que le taux de transparence derriere l'arobase
  • width : largeur (iw = largeur de la video)
  • height : hauteur du bandeau
  • t=max : ?
  • fontfile : nom de la police de caractères
  • y et x : Position de la zone
  • text : Texte à afficher
  • fontcolor : couleur du texte
  • fontsize : taille de la police

Comme on peut le voir sur cet exemple, il est possible de "cumuler" ces affichages tout au long de la video.  Comme on peut le voir ici, il y a affichage de deux bandeau (le premier au timecode 2 à 6 secondes et le deuxieme du timecode 8 à 16

dans la partie drawtext : 

  • fontfile : nom de la police à utiliser
  • text : Texte à afficher
  • fontcolor : couleur du texte
  • fontsize : taille de la police
  • format : formay de sortie
  • -c:v libx264 : encodage
  • -c:a copye : on reprend l'audio
  • -movflags + faststart : Déplace quelques données au début du fichier, permettant à la video d'être jouée avant son téléchargement complet
  • output789.mp4 : Fichier de sortie

ffmpeg -y -i output.mp4 -vf "drawtext=fontfile=/usr/share/fonts/truetype/ubuntu-font-family/UbuntuMono-B.ttf: fontsize=36:fontcolor=yellow: text='%{pts\:gmtime\:1507046400\:%d-%m-%Y %T}'" outputTEMPS.mp4

 

  • -y : permet de ne pas à avoir a répondre "oui" aux demandes effectuées par le traitement
  • -i : nom du chier à traiter
  • -vf : Cette commande drawtext=fontfile=/usr/share/fonts/truetype/ubuntu-font-family/UbuntuMono-B.ttf: fontsize=36:fontcolor=yellow: text='%{pts\:gmtime\:1507046400\:%d-%m-%Y %T}' permet d'éfficher le temps, dans le format spécifié ( jour - mois - année heures:minutes:secondes)

ffmpeg -framerate 0.3 -pattern_type glob -i "*.jpg" -c:v libx264 -crf 0 output.mp4

  • framerate : donne la vitesse entre deux images. Plus c'est élevé, plus le défilement est rapide
  • -pattern_type glob -i "*.jpg" : sélectionne tous les fichiers du répertoire

ffmpeg -i music.mp3 -i 1.jpg -filter_complex "[0:a]showwaves=s=1280x720:mode=line,colorkey=0x000000:0.01:0.1,format=yuva420p[v];[1:v]scale=1280:720[bg];[bg][v]overlay[outv]" -map "[outv]" -map 0:a -c:v libx264 -c:a copy mix_photo_video.avi

  • -i music.mp3 : musique en entrée
  • -i 1.jpg : image fixe en fond
  • -filter_complex : définition du filtre de création du bargraph
    • [0:a]showwaves=s=1280x720 : définition du type de filtre avec sa taille
    • mode=line : Graphique de type lignes. Cette valeur line peut etre modifiée par point, p2p ou cline
    • mode=line : bargraph en ligne
    • colorkey : couleurs du bargraph
    • format : format de sortie de la video
    • scale : taille de la vidéo
    • overlay : ?

 

jeudi, 09 janvier 2020 17:39

Générer des barcode à partir d'un MP3

ffmpeg -y -i "input.mp3" -filter_complex "[0:a]showcqt=s=1920x1080[v]" -map '[v]' -map '0:a' -c:a copy "out.mp4"

Exemple

samedi, 04 janvier 2020 13:01

Friends+Me : la gestion des grosses queues

Aujourd'hui nous allons voir une version de démonstration du site friendsplus.me, un gestionnaire de publications sociales, permettant d'empiler des posts à diffuser sur les réseaux sociaux tels que Twitter ou encore Facebook.

Je rappelle le principe de queue : on "empile" dans une pile virtuelle des publications à diffuser sur vos réseaux sociaux, chacune d'entre elle sera distillée à une date et une heure précise, définie par vos soins, sur votre mur de votre réseau social. Attention, je parle de mur au sens large c'est-à-dire que nous pouvons inclure Facebook mais aussi Twitter !

Des outils comme celui que j'ai cité, propose une version de démonstration de 15 jours dans sa version gratuite et ne permet de gérer que deux queues virtuelles. Au-delà, si vous avez besoin de plusieurs queues, rendez vous sur la page adéquat https://app.friendsplus.me/teams/5e107f3a51fc4c0018acacaa/billing

Mais pourquoi tant de queues?

Si vous suivez mon blog, depuis quelques temps dans sa partie réseaux sociaux, vous pouvez vous rendre compte tous les outils que je vous présente sont souvent à destination des personnes qui gèrent des réseaux sociaux. En général, ces dernières ne gèrent pas qu'un seul compte, mais plusieurs, c'est le travail d'ailleurs d'un community manager !
Ainsi les outils que je vous présente comme celui-ci, ont la faculté de pouvoir gérer plusieurs comptes sur différents réseaux sociaux. Le plan gratuit ne vous propose que deux queues, mais si vous êtes un community manager expérimenté, vous avez sûrement plusieurs comptes, plusieurs profils à gérer. Ainsi, avec cette outil, vous pouvez gérer une large diffusion les informations de l'ensemble de votre clientèle vous employant.

Principe de fonctionnement

Le principe de gestion de queues est simple. Il faut empiler des posts à diffuser en définissant des moments précis de la journée ou du/des jour(s) à venir. L'outil publiera sur le réseau social, les posts au moment où vous l'avez indiqué.

Après avoir créer un compte sur Friendsplus, vous allez rajouter l'ensemble des réseaux sociaux sur lesquels vous travaillez. De Google Plus (et oui!!) à Pinterest, en passant par Twitter, Facebook, Tumblr et LinkedIn, nous voyons au premier abord que le service n'est pas géré de manière optimale, dans la mesure où le premier réseau social Google Plus n'existe plus !

Si vous êtes connecté à vos différents réseaux sociaux, il vous suffit de les ajouter un à un en vous authentifiant au réseau social et éventuellement pour Facebook, ajouter une page que vous gérez. Si vous n'êtes pas connecté à vos réseaux sociaux (cookie absent), il vous suffit d'effectuer cette connexion.

Une fois la relation effectuée entre vos réseaux sociaux dans l'outil Friendsplus, vous allez pouvoir créer dans votre que un nouveau post. Ce dernier peut être enregistré en tant que brouillon (et donc non publié), ou être directement ajouté dans la queue de publication.

Bien entendu, pour chacun des posts que vous créez dans la queue, vous avez la possibilité d'interagir dessus au travers de l'interface du site web avant publication.

Lorsque vous ajoutez un post dans la queue, vous pouvez le publier immédiatement, le publier plus tard ou lui définir une date et une heure de publication. Ceci est très intéressant même si les publications sont à définir à 5 minutes près par heure. (Sur la tranche d'exemple 10:00 - 11:00, vous ne pouvez publier qu'à 10:00, 10:05 , 10:10,...10:55. Toutes les 5 minutes, pas moins)

Une fois le post créé et programmé, vous avez la possibilité de le visualiser, de le supprimer, de l'enregistrer en tant que brouillon, de définir un horaire de publication ou éventuellement le publier directement sur votre réseau social (auquel cas l'outil perd de son utilité).

Sur l'interface, si nous cliquons sur Edit, nous nous retrouvons directement sur l'édition du post avec son contenu. En sauvegardant en tant que brouillon, comme son nom l'indique, le brouillon reste un brouillon que vous pourrez "reprendre" ultérieurement. Vous pouvez redéfinir ou modifier la date et l'heure de publication, et, comme je le disais, faire une publication directe.

Lorsque tous vos posts sont définis dans votre queue, vous pouvez interagir dessus (en haut de la page). Le premier onglet vous permet de lister les posts de la queue.

Le deuxième onglet vous permettra de voir votre queue et de créer un post. Ainsi votre poste sera dans la liste que vous pouvez visualiser dans l'onglet queue.

Le troisième onglet s'intitule Schedule. vous l'aurez compris si vous êtes anglophone, c'est l'onglet où vous pourrez programmer des posts à des horaires prédéfinis. Le service vous propose même la possibilité de définir des récurrences, (mais pour un même post à priori) !

Mais ce même on vous propose aussi de publier un post avec un retard ou un délai. Ainsi vous pouvez définir pour les posts que vous créez avec un certain nombre de minutes prédéfinis avant qu'il soit publié. Ce retard peut varier d'une minute à 3 semaines. Il va de soi que vous avez la possibilité de choisir votre fuseau horaire dans lequel vous vous trouvez, l'application prenant par défaut votre géolocalisation de votre ordinateur.

Certains réseaux sociaux limitent le nombre de caractères d'un post, vous pouvez utiliser un raccourcisseur d'URL. L'outil vous propose 3 solutions : ne rien utiliser (donc pas d'URL raccourcies), utiliser bit.ly, ou encore utiliser goo.gl. A vous de choisir.

Vous avez la possibilité d'importer un ensemble de posts à enfiler dans la queue, au travers d'un fichier texte. Dans ce cas une fonctionnalité bulk schedule vous permet de télécharger un fichier CSV. Le fichier CSV devant répondre à un format très particulier, le site vous propose à la fois le type de CSV à créer mais en plus vous met à votre disposition un petit exemple très complet.

BulkScheule

Très pratique, ce petit outil reste très intéressant dans la mesure où il ne gère que le timing de vos posts, aucun autre fonctionnalité n'est prévue par l'outil, ce qu'il en fait un outil simple et efficace.

Cerise sur le gâteau, l'éditeur vous propose la possibilité de télécharger une petite extension pour le navigateur Firefox, qui permet d'empiler vos posts à créer sans passer par le site web.

Enfin, pour parfaire l'outil, une FAQ est proposée au sein de laquelle vous retrouverez les questions les plus courantes des internautes.

Simple et efficace je trouve cette outil plutôt bien fait

ffmpeg -f lavfi -i "sine=frequency=1000:duration=60" -f lavfi -i "sine=frequency=600:duration=60" -filter_complex amerge "binaural.wav"

Les paramètres:

  • -f lavfi : entrée virtuelle
  • sine : création d''une onde sinusoïdale
    • avec une fréquence de 600 hertz
    • durant 60 secondes
  • -filter_complex amerge : on supperpose les deux fréquences
  • binaural.wav : fichier de sortie
dimanche, 29 décembre 2019 14:22

Positionner 4 videos côte-à-côte en une seule

ffmpeg -i out.mp4 -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.mp4 -filter_complex " nullsrc=size=640x480 [base];[0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft];[1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright];[2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft];[3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright];[base][upperleft] overlay=shortest=1 [tmp1];[tmp1][upperright] overlay=shortest=1:x=320 [tmp2];[tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3];[tmp3][lowerright] overlay=shortest=1:x=320:y=240" -c:v libx264 output.mkv

Cette video aura une taille file de 640*480 Chacune des vidéos aura comme taille 320*240

Page 1 sur 22