From fc7c5bfbf6b5554612a8c1c4da56e2569dc92b52 Mon Sep 17 00:00:00 2001 From: YoannNumericite <85347776+YoannNumericite@users.noreply.github.com> Date: Tue, 26 Jul 2022 13:18:58 +0200 Subject: [PATCH] fix: update ressources (#87) --- _data/api/API Convention collectives.md | 10 +++ _data/api/API Entreprise.md | 52 +++++++++++- _data/api/API recherche-entreprise.md | 75 +++++++++++++++++- _data/api/Ressourcerie.md | 45 ++++++++++- _data/api/apigouvfr.md | 65 +++++++++++++++ .../guides/API_recherche-entreprise_1.jpeg | Bin 0 -> 25189 bytes public/images/guides/apigouvfr_1.svg | 35 ++++++++ public/images/guides/apigouvfr_2.svg | 35 ++++++++ utils/notion_connector.tsx | 6 +- 9 files changed, 315 insertions(+), 8 deletions(-) create mode 100644 public/images/guides/API_recherche-entreprise_1.jpeg create mode 100644 public/images/guides/apigouvfr_1.svg create mode 100644 public/images/guides/apigouvfr_2.svg diff --git a/_data/api/API Convention collectives.md b/_data/api/API Convention collectives.md index 8c610b8f..37044656 100644 --- a/_data/api/API Convention collectives.md +++ b/_data/api/API Convention collectives.md @@ -24,3 +24,13 @@ L'API Conventions collectives permet de rechercher les conventions collectives d Chaque entreprise applique des [conventions collectives propres à son secteur d'activité](https://www.service-public.fr/particuliers/vosdroits/F78) (contrat de travail, congés, salaires, hygiène, licenciement, etc...). Conclues par les organisations syndicales et les groupements d'employeurs, elles varient selon le secteur d'activité et donc selon les entreprises. Cette API permet d'associer une entreprise à des conventions collectives. **Quelles sont les données contenues dans l'API Conventions collectives ?** + +Donnée : [siret2idcc ](https://www.data.gouv.fr/fr/datasets/liste-des-conventions-collectives-par-entreprise-siret/#_) + +### Source de donnéees ouvertes + +Cette API se base sur plusieurs jeux de données ouverts, accessibles via [data.gouv.fr ](https://data.gouv.fr/) : + +[Liste des conventions collectives par entreprise](https://data.gouv.fr/fr/datasets/5e7201d522f2a43e9f736a9a) + +[Base Sirene des entreprises et de leurs établissements(SIREN,SIRET)](https://data.gouv.fr/fr/datasets/5b7ffc618b4c4169d30727e0) diff --git a/_data/api/API Entreprise.md b/_data/api/API Entreprise.md index 567f3812..68abdfde 100644 --- a/_data/api/API Entreprise.md +++ b/_data/api/API Entreprise.md @@ -17,4 +17,54 @@ keywords: - associations --- -Vous n’avez **plus besoin de demander certains justificatifs** aux entreprises et associations ; Vous n’avez pas de vérification supplémentaire à réaliser car les **informations sont certifiées** ; Vous accédez avec un seul compte aux données de **différents fournisseurs** tels que l’INSEE, la DGFIP, l’URSSAF, etc +## Description + +API Entreprise permet aux entités administratives d'accéder aux données et aux documents administratifs des entreprises et des associations, afin de simplifier leurs démarches. + +### À quoi sert l’API Entreprise ? + +En intégrant la brique API Entreprise dans votre système d’information ou votre site internet : + +- Vous n’avez **plus besoin de demander certains justificatifs** aux entreprises et associations ; +- Vous n’avez pas de vérification supplémentaire à réaliser car les **informations sont certifiées** ; +- Vous accédez avec un seul compte aux données de **différents fournisseurs** tels que l’INSEE, la DGFIP, l’URSSAF, etc. + +Au delà de la simplification apportée aux agents habilités des administrations, l'API Entreprise rend service aux entreprises et associations en leur évitant de chercher leurs documents administratifs et en permettant le pré-remplissage automatique de leurs formulaires. + +L’API permet notamment de simplifier le dépôt et l'instruction des candidatures aux [marchés publics ](https://entreprise.api.gouv.fr/cas_usage/marches_publics/) et des demandes d'[aides et subventions publiques ](https://entreprise.api.gouv.fr/cas_usage/aides_publiques/). [Découvrir tous les cas d'usage](https://entreprise.api.gouv.fr/cas_usage/) + +### API accessibles depuis l'API Entreprise + +Pour avoir la liste à jour des API disponibles, n'hésitez pas à consulter le [catalogue des données de l’API Entreprise ](https://entreprise.api.gouv.fr/catalogue/). Le catalogue vous permet également de découvrir la liste précise des données disponibles pour chacune des API. + +### Quelles sont les conditions d'éligibilité à l'API Entreprise ? + +L’API Entreprise est réservée : + +- aux **acteurs publics investis d’une mission de service public** ✅ : les administrations, leurs opérateurs et les collectivités, les acteurs de santé, etc. +- à **leurs prestataires privés** qui peuvent être destinataires des informations techniques permettant l’usage de l’API mais en aucun cas des données elles-même. + +Même si elle a pour objectif de simplifier leurs démarches, l’API Entreprise ne s’adresse pas aux particuliers ❌, aux associations ❌ et aux entreprises ❌. + +Il faut également être [techniquement en mesure d'intégrer l'API Entreprise ](https://entreprise.api.gouv.fr/doc/#fondamentaux), c'est à dire : + +- avoir une équipe technique qui peut intégrer des API ; +- travailler ou s'apprêter à travailler avec un prestataire ou un éditeur de logiciel, qui soit en mesure d’intégrer API Entreprise. + +L’[API Entreprise ](https://entreprise.api.gouv.fr/) est une composante de l’État plateforme, l’accès à l’API Entreprise est modéré et régulé par la DINUM, qui attribue des autorisations de récupération d’informations selon la nature des démarches à traiter (marchés publics, aides publiques,…). + +### Alternatives en accès libre + +Vous n'êtes pas éligible à l'API Entreprise ? Il existe d'autres alternatives, en accès libre : + +**Pour trouver une information sur une entreprise/association en particulier**, consultez [l'annuaire des entreprises ](https://annuaire-entreprises.data.gouv.fr/) . + +**Vous avez reperé une erreur dans la base de donnée Sirene sur votre entreprise/association ?** Le lien suivant vous permet de la signaler directement à l'INSEE : [https://www.sirene.fr/sirene/public/nous-contacter](https://www.sirene.fr/sirene/public/nous-contacter) . + +**Certaines données proposées par l'API Entreprise sont accessibles, par API, en open data** : + +- l'[API Sirene, produite par l'INSEE](https://api.gouv.fr/les-api/sirene_v3), donnant accès aux données du répertoire Sirene de l’INSEE, à l’exception des entreprises [non-diffusibles ](https://www.insee.fr/fr/information/4127417) ; +- l'[API RNCS, produite par l'INPI](https://api.gouv.fr/les-api/api-rncs), donnant accès aux informations publiques détenues par les greffes sur les sociétés françaises ; +- l'[API RNA, produite par la DINUM](https://api.gouv.fr/les-api/api_rna), interrogeant le répertoire des associations françaises ; +- l'[API RNM, produite par CMA France](https://api.gouv.fr/les-api/api_rnm), interrogeant le répertoire des entreprises artisanales françaises. +- l'[API Professionnels RGE, produite par l'ADEME](https://api.gouv.fr/les-api/api_professionnels_rge), recensant les professionnels Reconnus Garants de l'Environnement. diff --git a/_data/api/API recherche-entreprise.md b/_data/api/API recherche-entreprise.md index e841cd2e..4c20a740 100644 --- a/_data/api/API recherche-entreprise.md +++ b/_data/api/API recherche-entreprise.md @@ -18,10 +18,77 @@ keywords: - données --- -API de recherche d'entreprise basée sur ElasticSearch et exploitant les données de la base SIRENE de l'INSEE, de plusieurs jeux de données data.gouv.fr et de kali-data pour les conventions collectives. +API de recherche d'entreprise basée sur ElasticSearch et exploitant les données de la base SIRENE de l'INSEE, de plusieurs jeux de données [data.gouv.fr](http://data.gouv.fr/) et de kali-data pour les conventions collectives. -Un frontend de démo est disponible ici : https://recherche-entreprises.fabrique.social.gouv.fr +Un frontend de démo est disponible ici : [https://recherche-entreprises.fabrique.social.gouv.fr](https://recherche-entreprises.fabrique.social.gouv.fr/) -Une API de démo est disponible sur https://api.recherche-entreprises.fabrique.social.gouv.fr +Une API de démo est disponible sur [https://api.recherche-entreprises.fabrique.social.gouv.fr](https://api.recherche-entreprises.fabrique.social.gouv.fr/) -https://github.com/socialgouv/recherche-entreprises +[https://github.com/socialgouv/recherche-entreprises](https://github.com/socialgouv/recherche-entreprises) + +## Composants + +Le dépôt de code contient plusieurs composants utilisables indépendamment : + +L'étape d'indexation peut être automatisée pour maintenir les données à jour en continu (ex: hebdomadaire). + +## Fonctionnement + +![Image](/images/guides/API_recherche-entreprise_1.jpeg) + +## Données : + +## Développement + +### Pré-requis + +Pour lancer les différentes parties du projet, un certain nombre d'outil doivent être présent sur la machine: + +- node +- yarn +- docker et docker-compose +- wget +- sqlite3 + +### Assemblage des données + +Le script index/sqlite/build.sh permet de permet de télécharger les CSV puis aggréger les données pour les re-exporter dans CSV "plat". Le fichier ./data/assembly.csv généré fait +6Go avec plus de 30 millions de lignes. + +Cette opération peut durer ~45 minutes selon votre setup + +### Indexation dans Elastic Search + +Cette étape permet de mettre à jour les données dans l'index Elasticsearch à partir du fichier assembly.csv généré à l'étape précédente. + +La mise à jour exploite la fonctionnalité [alias](https://www.elastic.co/guide/en/elasticsearch/reference/7.16/aliases.html) d'Elasticsearch pour éviter les downtimes. + +Pour lancer une indexation : + +yarn +ELASTICSEARCH_URL=https://elastic_url:9200 ELASTICSEARCH_API_KEY=key_with_writing_rights ASSEMBLY_FILE=./data/assembly.csv yarn start + +Le script scripts/create-es-keys.sh permet de créer des tokens pour lire/écrire sur ces index. **Cette étape n'est pas nécessaire pour le développement local.** + +### Lancement de l'API + +Cette étape permet de lancer l'API de démo qui va servir les requêtes jusqu'à Elasticsearch. + +# En partant de la racine du projet + +cd api + +yarn install +yarn build + +ELASTICSEARCH_URL=http://localhost:9200 yarn start + +Le temps d'indexation est d'environ 1h. + +### Wokflows GitHub + +Des workflows GitHub permettent de mettre à jour les index et sont lancés manuellement + +### Projets relatifs + +- Annuaire-entreprises : [https://annuaire-entreprises.data.gouv.fr](https://annuaire-entreprises.data.gouv.fr/) +- API Entreprise : [https://entreprise.api.gouv.fr/catalogue/](https://entreprise.api.gouv.fr/catalogue/) diff --git a/_data/api/Ressourcerie.md b/_data/api/Ressourcerie.md index b7ec3d02..7c5e1c5f 100644 --- a/_data/api/Ressourcerie.md +++ b/_data/api/Ressourcerie.md @@ -9,7 +9,6 @@ producer: ministere-travail is_open: 1 themes: - Autre - keywords: - catalogue - sphere travail @@ -18,3 +17,47 @@ keywords: La Ressourcerie catalogue les communs produits par et pour la sphère travail. Chaque ressource est associée à une courte description fonctionnelle, une documentation technique, les modalités d'accès, d'éventuelles ressources supplémentaires et surtout des liens vers les services qui l'utilisent. Elle propose également des articles qui présentent des projets ou des portraits au sein de la sphère travail. + +### Prérequis + +[Node.js](https://nodejs.org/en/) >= 16 + +### Serveur de développement + +Cette application utilise [Next.js](https://github.com/zeit/next.js). + +1.Installer les dépendances + +npm i + +1.Variables d’environnement + +Afin de configurer le projet correctement, il est conseillé de créer un fichier .env avec les variables d’environnement nécessaires à l’application. + +.env permet de persister les variables d’environnement de développement dans un fichier plutôt que de les définir dans le shell, mais les deux fonctionnent. Cela fonctionne avec [dotenv](https://github.com/motdotla/dotenv) et [next-runtime-dotenv](https://github.com/tusbar/next-runtime-dotenv). + +Copier le fichier de configuration + +cp .env.sample .env + +1.Lancer le serveur de développement + +npm run dev + +Par défaut, il écoutera sur le port 3000, pour changer, utiliser npm run dev -p 4242. + +### Build de production + +Cette application utilise [Next.js](https://github.com/zeit/next.js). + +1.Installer les dépendances + +npm i + +1.Générer les bundles de production + +npm run build + +1.Lancer le serveur de production + +PORT=3000 npm run start diff --git a/_data/api/apigouvfr.md b/_data/api/apigouvfr.md index 867105e5..0a810c3b 100644 --- a/_data/api/apigouvfr.md +++ b/_data/api/apigouvfr.md @@ -18,3 +18,68 @@ keywords: Api.gouv.fr est le catalogue des API produites par les administrations centrales, les collectivités territoriales, les établissements publics… Chaque API est associée à une courte description fonctionnelle, une documentation technique, les modalités d'accès, d'éventuelles ressources supplémentaires et surtout des liens vers les services qui l'utilisent. + +## Derniers déploiements + +![Image](/images/guides/apigouvfr_1.png) +![Image](/images/guides/apigouvfr_2.png) + +## Public visé + +api.gouv.fr s'adresse avant tout aux créateurs de services, les consommateurs d'API. Pour cela, nous facilitons la découverte, la compréhension et l'accès aux API et à leurs producteurs. + +Les fournisseurs, de leur côté, ont avec ce catalogue un moyen simple de faire connaître leurs API. + +## Fournisseur d'API ? Envie de référencer une nouvelle API ? + +[👉 Ajoutez votre API](https://api.gouv.fr/nouvelle-api) ! + +## Comment ça marche ? + +### Prérequis + +[Node.js](https://nodejs.org/en/) >= 16 + +### Serveur de développement + +Cette application utilise [Next.js](https://github.com/zeit/next.js). + +1.Installer les dépendances + +npm i + +1.Variables d’environnement + +Afin de configurer le projet correctement, il est conseillé de créer un fichier .env avec les variables d’environnement nécessaires à l’application. + +.env permet de persister les variables d’environnement de développement dans un fichier plutôt que de les définir dans le shell, mais les deux fonctionnent. Cela fonctionne avec [dotenv](https://github.com/motdotla/dotenv) et [next-runtime-dotenv](https://github.com/tusbar/next-runtime-dotenv). + +Copier le fichier de configuration + +cp .env.sample .env + +1.Lancer le serveur de développement + +npm run dev + +Par défaut, il écoutera sur le port 3000, pour changer, utiliser npm run dev -p 4242. + +### Build de production + +Cette application utilise [Next.js](https://github.com/zeit/next.js). + +1.Installer les dépendances + +npm i + +1.Générer les bundles de production + +npm run build + +1.Lancer le serveur de production + +PORT=3000 npm run start + +### Preview apps + +Chaque pull request est déployé dans des [review app](https://devcenter.heroku.com/articles/github-integration-review-apps) sur [Heroku](https://dashboard.heroku.com/) diff --git a/public/images/guides/API_recherche-entreprise_1.jpeg b/public/images/guides/API_recherche-entreprise_1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..09e07e4f5ae9714566d960ebbb3d5319c25a7566 GIT binary patch literal 25189 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

QKzviAF^#}&M*VKx| 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 literal 0 HcmV?d00001 diff --git a/public/images/guides/apigouvfr_1.svg b/public/images/guides/apigouvfr_1.svg new file mode 100644 index 00000000..32839a8b --- /dev/null +++ b/public/images/guides/apigouvfr_1.svg @@ -0,0 +1,35 @@ + + Deploy - Staging - passing + + + + + + + + + + + + + + + + + + Deploy - Staging + + + + + + + passing + + + + + + diff --git a/public/images/guides/apigouvfr_2.svg b/public/images/guides/apigouvfr_2.svg new file mode 100644 index 00000000..b321e656 --- /dev/null +++ b/public/images/guides/apigouvfr_2.svg @@ -0,0 +1,35 @@ + + Deploy - Production - failing + + + + + + + + + + + + + + + + + + Deploy - Production + + + + + + + failing + + + + + + diff --git a/utils/notion_connector.tsx b/utils/notion_connector.tsx index 6f647708..6df9c67e 100644 --- a/utils/notion_connector.tsx +++ b/utils/notion_connector.tsx @@ -278,10 +278,12 @@ export class RessourcesCms extends NotionCms { }).toString().replace(/,/g, '') + '\n', `--- \n\n` ) + let numberImage = 0 for(let block of this.itemsToUpdate.items[index].contents || []) { - if("type" in block) + if("type" in block && block.type === 'image')numberImage++ + if("type" in block && "title" in result.properties?.Name && "text" in result.properties?.Name.title[0]) this.itemsToUpdate.items[index].fileMD = this.itemsToUpdate.items[index].fileMD?.concat( - await this.format_blocks(block.type || '', block) || '' + await this.format_blocks(block.type || '', block, numberImage, result.properties?.Name.title[0].text.content.replace(/ /g,"_")) || '' ) } await this.write_file(`${''.concat(... map(result.properties?.Name.title, 'text.content'))}.md`.replace('/', '_'), this.itemsToUpdate.items[index].fileMD || '', '_data/api')