{"id":21862715,"url":"https://github.com/etalab/sirene_as_api","last_synced_at":"2025-07-14T05:36:04.534Z","repository":{"id":19761168,"uuid":"86320824","full_name":"etalab/sirene_as_api","owner":"etalab","description":"Une API pour le fichier sirene","archived":false,"fork":false,"pushed_at":"2023-06-12T15:38:11.000Z","size":8827,"stargazers_count":102,"open_issues_count":48,"forks_count":29,"subscribers_count":12,"default_branch":"develop","last_synced_at":"2025-04-14T19:50:43.526Z","etag":null,"topics":["api","etalab","opengouv","sirene"],"latest_commit_sha":null,"homepage":"https://entreprise.data.gouv.fr","language":"Ruby","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/etalab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2017-03-27T10:11:09.000Z","updated_at":"2025-03-10T18:28:39.000Z","dependencies_parsed_at":"2023-02-10T23:01:11.817Z","dependency_job_id":"52b7110b-d154-4c62-8c03-aab136d85803","html_url":"https://github.com/etalab/sirene_as_api","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/etalab/sirene_as_api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etalab%2Fsirene_as_api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etalab%2Fsirene_as_api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etalab%2Fsirene_as_api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etalab%2Fsirene_as_api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/etalab","download_url":"https://codeload.github.com/etalab/sirene_as_api/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etalab%2Fsirene_as_api/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265246023,"owners_count":23734109,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","etalab","opengouv","sirene"],"created_at":"2024-11-28T03:17:00.077Z","updated_at":"2025-07-14T05:36:04.511Z","avatar_url":"https://github.com/etalab.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"## ⚠ Déprécation de l'API \u0026 Avertissement concernant la sécurité ⚠\n\nLes développements de la DINUM ont cessé sur cette API.\n\nLa version actuelle ne sera donc plus mise à jour et peut présenter d'importantes failles de sécurité.\n\n## ⚠ Changements importants ⚠\n\nLes endpoints V3 sont disponibles en béta. Les endpoints V1 et V2 ainsi que l'import des fichiers ancien format sont considérés dépréciés et ne recevront plus de développement futur.\n\n### Comment me tenir au courant des prochains changements ?\n\nNotre site frontend présente dorénavant la possibilité de s'inscrire sur [une mailing-list](https://entreprise.data.gouv.fr/api_doc). Si vous utilisez notre API régulièrement, nous vous conseillons de vous inscrire.\n\nVous pouvez également nous contacter au travers des issues de ce repo GitHub.\n\n# SIRENE_as_api\n\nDans le cadre du SPD, (Service Public de la Donnée), certains jeux de données\ndont le fichier SIRENE sont devenus publics.\n\nLe projet SIRENE_as_api a pour vocation de mettre en valeur la donnée brute en\nla servant sous forme d'API.\n\nLe projet se découpe en trois sous-projets :\n\n- Une API Ruby on Rails qui importe les fichiers de données mis à disposition par l'INSEE : [sirene_as_api](https://github.com/etalab/sirene_as_api)\n\n- Un script capable de déployer l'API automatiquement : [sirene_as_api_ansible](https://github.com/etalab/sirene_as_api_ansible)\n\n- Une interface web de recherche exploitant l'API en Vue.js : [entreprise.data.gouv.fr](https://github.com/etalab/entreprise.data.gouv.fr)\n\n- l'[API RNA](https://github.com/etalab/rna_as_api) est aussi disponible\n\n## Essayez l'API\n\nVous pouvez interroger l'API en ligne: https://entreprise.data.gouv.fr/api/sirene/v1/full_text/ + Nom de l'entreprise recherchée (cf. plus bas pour d'autres usages).\n\nOu bien par le site front-end : https://entreprise.data.gouv.fr/\n\n## Qualification des fichiers mis à disposition par l'INSEE\n\nL'ensemble des fichiers mis à disposition pour le SIRENE se trouvent sur\n[data.gouv.fr](https://www.data.gouv.fr/fr/datasets/base-sirene-des-entreprises-et-de-leurs-etablissements-siren-siret/).\nOn y trouve chaque début de mois un fichier dit stock qui recense toutes\nles entreprises et leurs établissements.\nCes fichiers stocks mensuels sont accompagnés de fichiers de mises à jour\nquotidiennes (tous les jours ouvrés), ainsi que de fichiers de mises à jour\nmensuelles dites \"de recalage\".\n\n### Fichiers stocks mensuels\n\nLes données sont découpés en deux fichiers :\n- les unités légales\n- les établissements\n-\nIl s'agit de fichiers mensuels contenant toute la base de donnée, incluant donc aussi l'historique contenant les unités légales et établissements fermés.\n\nP.S: le fichier des établissements n'est pas téléchargé depuis data.gouv.fr mais depuis data.cquest.org qui fournit des fichiers géo-codés.\n\n# Requêtes V1\n\nTrois endpoints principaux sont disponibles sur l'API :\n\n## Recherche FullText\n\nIl s'agit de l'endpoint principal. Vous pouvez faire des requêtes avec Curl :\n\n    curl 'localhost:3000/v1/full_text/MA_RECHERCHE'\n\nou simplement en copiant l'adresse ´localhost:3000/v1/full_text/MA_RECHERCHE´\ndans votre navigateur favori.\n\n### Format de réponse\n\nL'API renvoie les réponses au format JSON avec les attributs suivant :\n\n| Attribut      | Valeur                       |\n|---------------|------------------------------|\n| total_results | Total résultats              |\n| total_pages   | Total de pages               |\n| per_page      | Nombre de résultats par page |\n| page          | Page actuelle                |\n| etablissement | Résultats                    |\n| spellcheck    | Correction orthographique suggérée |\n| suggestions   | Suggestions de recherche |\n\n### Suggestions de recherche\n\nLes suggestions de recherche sont utiles pour obtenir une complétion sur une requête utilisateur incomplète.\nVous pouvez n'obtenir que les suggestions par la commande suivante :\n\n    curl 'localhost:3000/v1/suggest/MA_RECHERCHE'\n\n**Attention : La construction du dictionnaire de suggestions est une tache lourde.**\nUne allocation de memoire vive de minimum 4G est actuellement conseillée. L'opération prend environ 30 minutes.\nUne fois le dictionnaire construit, une allocation de 2G est suffisante pour utiliser les suggestions. En dessous, les suggestions seront desactivées, mais vous pourrez toujours utiliser toutes les autres fonctionnalités de l'API.\n\nL'allocation de mémoire de la Machine Virtuelle Java peut être modifié dans le fichier config/sunspot.yml.\n\n### Pagination\n\nLa page par défaut est la première. L'API renvoie par défaut 10 résultats par page.\nCes attributs peuvents être modifiés en passant en paramètres `page` et `per_page`.\n\n### Filtrage par faceting\n\nLes options suivantes de filtrage sont disponibles :\n\n| Filtrage désiré                                           | Requête GET               | Valeur                                              |\n|-----------------------------------------------------------|---------------------------|-----------------------------------------------------|\n| Activité principale de l'entreprise (code NAF)            | activite_principale       | Le code `activité principale` (code NAF)            |\n| Code postal                                               | code_postal               | Le code postal désiré                               |\n| Code commune INSEE                                        | code_commune              | Le code INSEE de la commune                         |\n| Departement                                               | departement               | Le departement désiré                               |\n| Appartenance au champs de l'économie sociale et solidaire | is_ess                    | `O` pour Oui, `N` pour Non, `I` pour Invalide       |\n| Entreprises individuelles                                 | is_entrepreneur_individuel| `yes` pour Oui, `no` pour Non                       |\n| Tranche effectif salarié de l'entreprise                  | tranche_effectif_salarie_entreprise | le code INSEE pour cette tranche d'effectif salarié |\n\nD'autres facettes pourront être implémentées en fonction des retours utilisateurs.\n\nRéférence rapide pour les codes INSEE de tranches d'effectifs salariés :\n\n| Code à renseigner| Signification |\n|----|-----------------------------|\n| NN | Unités non employeuses |\n| 00 | 0 salarié |\n| 01 | 1 ou 2 salariés |\n| 02 | 3 à 5 salariés |\n| 03 | 6 à 9 salariés |\n| 11 | 10 à 19 salariés |\n| 12 | 20 à 49 salariés |\n| 21 | 50 à 99 salariés |\n| 22 | 100 à 199 salariés |\n| 31 | 200 à 249 salariés |\n| 32 | 250 à 499 salariés |\n| 41 | 500 à 999 salariés |\n| 42 | 1 000 à 1 999 salariés |\n| 51 | 2 000 à 4 999 salariés |\n| 52 | 5 000 à 9 999 salariés |\n| 53 | 10 000 salariés et plus |\n\n### Exemple\n\nJe souhaite les entreprises individuelles avec \"foobar\" dans le nom, je désire 15\nrésultats par page et afficher la deuxième page (soit les résultats 15 à 30) :\n\n    curl 'localhost:3000/v1/full_text/foobar?page=2\u0026per_page=15\u0026is_entrepreneur_individuel=yes'\n\n## Recherche par Numéro SIRET\n\nLa requête se fait par :\n\n    curl 'localhost:3000/v1/siret/MON_SIRET'\n\nL'API renvoie un JSON de l'établissement correspondant.\n\n## Recherche par Numéro SIREN (établissements enfants)\n\nLa requête se fait par :\n\n    curl 'localhost:3000/v1/siren/MON_SIREN'\n\nl'API renvoie :\n\n- Le nombre total de sirets existants à partir de ce siren.\n- Les données de l'établissement siège correspondant à ce siren.\n- La liste des sirets enfants (sirets correspondants à ce siren \u0026 qui ne sont pas le siège de l'établissement)\n- Le numéro de TVA intracommunautaire.\n\n## Autres endpoints\n\nUn endpoint spécial \"suggestions de recherche\" est disponible :\n\n    curl 'localhost:3000/v1/suggest/MA_RECHERCHE'\n\n# Recherche par géolocalisation\n\nL'API intègre dorénavant la géolocalisation des établissements.\n\n## Établissements autour d'un point\n\nLa requête se fait par :\n\n    curl 'localhost:3000/v1/near_point/?lat=LATITUDE\u0026long=LONGITUDE'\n\nOú LATITUDE et LONGITUDE sont un point autour duquel vous désirez chercher des établissements. Vous pouvez également préciser le radius de recherche (défaut: 5km). Les résultats sont paginés de la même façon que précedemment.\n\nLes options de filtrage suivantes sont disponibles :\n\n| Filtrage désiré                                           | Requête GET               | Valeur                                              |\n|-----------------------------------------------------------|---------------------------|-----------------------------------------------------|\n| Filtrage par activité principale (code NAF) | activite_principale               | Code NAF desiré |\n| Filtrage par code NAF approximé | approximate_activity               | 2 premiers chars du code NAF (Ex: 62 pour 620Z) |\n| Radius de recherche | radius               | Entier ou flottant |\n\n## Établissements autour d'un autre établissement\n\nLa requête se fait par :\n\n    curl 'localhost:3000/v1/near_etablissement/SIRET'\n\navec SIRET le siret de l'établissement autour duquel chercher.\n\n| Filtrage désiré                                           | Requête GET               | Valeur                                              |\n|-----------------------------------------------------------|---------------------------|-----------------------------------------------------|\n| Seulement les établissements avec la même activité principale (code NAF) | only_same_activity               | true / false (défaut: false) |\n| Seulement les établissements avec une activité principale proche | approximate_activity               | true / false (défaut: false) |\n| Radius de recherche | radius               | Entier ou flottant |\n\nLe système de pagination étant toujours là, les paramètres `page` ou `per_page` sont disponibles.\n\n## Établissements autout d'un autre établissement, format GeoJSON\n\nSi vous désirez l'endpoint précedent au format GeoJSON, la requête se fait par :\n\n    curl 'localhost:3000/v1/near_etablissement_geojson/SIRET'\n\nLes résultats ne sont pas paginés.\n\nAfin d'éviter une surcharge du serveur, seuls les 500 établissements les plus proches sont retournés. Cette option est modifiable dans le controller /app/controllers/api/v1/near_etablissement_geojson_controller.rb si vous désirez installer votre propre version de l'API.\n\nLes mêmes filtres que /near_etablissement/ sont disponibles.\n\n# Requêtes V2\n\nDes endpoints sont en reconstruction en V2 ajoutant des informations supplémentaires. Les endpoints V1 ne sont pas discontinués.\n\n## Endpoint SIREN V2\n\nL'endpoint SIREN V2 ajoute des métadonnées, et un lien vers la requête RNM (Répertoire National des Métiers) correspondante pour ce SIREN.\n\nLa requête se fait par :\n\n    curl 'localhost:3000/v2/siren/:SIREN'\n\nLe format de réponse se divise entre :\n\n- Sirene : Données et métadonnées\n- Repertoire National des Métiers : Lien vers la requête et métadonnées\n- Computed : Informations calculées automatiquement (Numéro TVA introcommunautaire, Géocodage...). Les métadonnées précisent les calculs. ⚠ Attention ⚠ De par leur nature, les données calculées peuvent être érronnées.\n\nOn peut également requêter des informations supplémentaires sur les établissements liés à un SIREN :\n\n    curl 'localhost:3000/v2/siren/:SIREN/etablissements'\n\nOn peut également demander ce retour au format GeoJSON :\n\n    curl 'localhost:3000/v2/siren/:SIREN/etablissements_geojson'\n\n# Requêtes v3\n\nL'INSEE fournit depuis le 1er janvier 2019 des fichiers dans un nouveau format, l'API v3 reflète le contenu de ces nouveaux fichiers.\nIl y a donc deux ressources distinctes : les unités légales (SIREN) et les établissements physiques (SIRET).\n\nSont uniquement fournit des fichiers de stocks mensuels, afin de rester à jour l'API récupère les modifications quotidiennes via [l'API de l'INSEE](api.insee.fr).\n\nVous devez ouvrir un compte afin d'obtenir un token pour que l'API se mette à jour toute seule. [À voir ici](#token-de-lapi-insee).\n\n## Recherche directe par SIREN ou SIRET\n\nLa requête directe pour une unité légale se fait ainsi :\n\n    curl 'localhost:3000/v3/unites_legales/:siren'\n\nLa requête directe pour un établissement se fait ainsi :\n\n    curl 'localhost:3000/v3/etablissements/:siret'\n\n## Recherche plus large\n\nPour ces endpoints, vous pouvez filtrer les résultats par n'importe lequel des champs des ressources demandées en passant les paramètres dans la requête. Exemple :\n\n    # recherche de tous les établissments ouverts pour un siren donné\n    curl 'localhost:3000/v3/etablissements/?etat_administratif=A\u0026siren=345184428'\n\n    # recherche de toutes les unité légales ouvertes du code postal 59 380\n    curl 'localhost:3000/v3/unites_legales/?etat_administratif=A\u0026code_postal=59380'\n\nLa pagination est controlée par les paramètres `page` et `per_page`.\nLes options Solr telles que le full-text ou la géolocalisation ne sont pas encore disponibles sur ces endpoints.\n\n# Installation et configuration\n\nPour installer rapidement \u0026 efficacement l'API en environnement de production,\nvous pouvez vous referer a la documentation sur [sirene_as_api_ansible](https://github.com/etalab/sirene_as_api_ansible)\net utiliser les scripts de déploiement automatiques.\n\n## Token de l'API INSEE\n\nAfin de récupérer automatiquement les mises à jours quotidiennes de l'API SIRENE de l'INSEE il est nécessaire de renseigner `insee_credentials` dans `config/secrets.yml`.\n\nPour obtenir un token rendez-vous sur https://api.insee.fr/ dans : \"Mes Applications\"-\u003esélectionnez ou créer une application-\u003e\"Clefs et Jetons d'accès\"-\u003ecopiez la chaine de charactère sous \"Génération des jetons d'accès\" (dans l'exemple de code)\n\n_Attention_, il ne s'agit ni de la _Clef du consommateur_, ni du _Secret du consommateur_, ni du _Jeton d'accès_.\n\nSi vous ne souhaitez pas avoir les mises à jours via l'API commentez ou supprimer le bloc de code indiqué dans `config/schedule.yml`.\n\n## Nouveau : Installation avec Docker\n\nSi vous disposez de docker et de docker-compose, vous pouvez lancer le serveur en local avec les commandes suivantes :\n\nUne fois cloné ce répertoire à l'aide de\n\n    git clone git@github.com:etalab/sirene_as_api.git \u0026\u0026 cd sirene_as_api\n\nConstruisez le container avec `docker-compose build` et lancez-le avec `docker-compose up`.\n\nPour faciliter l'interaction avec le container du serveur, il est conseillé d'utiliser le mode interactif (à partir d'un autre terminal) :\n\n    docker exec -it \u003cnom_container\u003e bash\n\nVous pourrez ainsi exécuter, de manière transparente, toutes les tâches d'administration et de mises à jour présentées dans les sections suivantes. Sinon vous pouvez prendre exemple sur les commandes ci-dessous dans cette même section.\n\nVous pouvez effectuer les migrations (nécessaire seulement au premier lancement) à l'aide de :\n\n    docker-compose run sirene bundle exec rails db:create\n    docker-compose run sirene bundle exec rails db:migrate\n\nLa base de donnée sera persistée dans le dossier `/var/lib/postgresql` par défaut. Il est possible  de changer l'emplacement d'installation des données ou d'indiquer un emplacement d'installation existante en modifiant la variable d'environnement `POSTGRES_DATA` dans le fichier `.env`.\n\nLa base de donnée Postgres de docker se link sur le port 5432, donc assurez vous de ne pas avoir postgres qui tourne déjà sur ce port, ou bien modifiez `docker-compose.yml`\n\nSi votre machine comprend déjà une base installée sur `/var/lib/postgresql`, libre à vous de modifier le fichier `.env` :\n```yml\nPOSTGRES_DATA=/path/to/other/data_folder\n```\n\nLancez les imports à l'aide des commandes rake (Cf plus bas, partie Mises à jour / Administration) précédées par `docker-compose run sirene`. Par exemple :\n\n    docker-compose run sirene rake sirene_as_api:populate_database\n\nVous pouvez d'ors et déjà interroger l'API sur `http://localhost:3000/v1/siren/552032534`.\n\nLa recherche fulltext devrait fonctionner après avoir executé `docker-compose run sirene rake sunspot:solr:reindex`. Les index solr sont persistés egalement.\n\nAttention : pour faciliter les modifications par nos utilisateurs, le docker est lancé en environnement de développement. N'oubliez pas de changer le mot de passe postgres dans /config/docker/init.sql, /config/docker/database.yml et docker-compose.yml.\n\nIl peut y avoir une erreur 500 Solr au premier lancement, dans ce cas un simple `docker-compose down` puis `docker-compose up` peut suffir à relancer le server correctement.\n\n## Installation manuelle en environnement dev\n\nPour une installation manuelle, vous aurez besoin de :\n\n- postgresql en version supérieure a 9.5, la dernière version stable de\n  préférence\n- ruby en version 2.4.2\n- git installé\n- bundler installé\n- un runtime java pour solr\n\n Pour vous simplifier la tâche, nous vous conseillons d'utiliser le script Ansible mis a disposition pour déployer votre\n architecture. Une tâche [Mina](https://github.com/mina-deploy/mina) est également disponible (fichier config/deploy.rb). Vous pouvez la modifier pour entrer vos propres valeurs.\n\nUne fois cloné ce répertoire à l'aide de\n\n    git clone git@github.com:etalab/sirene_as_api.git \u0026\u0026 cd sirene_as_api\n\nLancez bundle install pour récupérer les gems nécessaires, ceci peut prendre un\npeu de temps en fonction de votre installation. Vous pouvez omettre l'installation de\nbundler s'il est déjà présent sur la machine\n\n    gem install bundler \u0026\u0026 bundle install\n\n### Preparation de la base de donnée\n\nIl faut maintenant préparer la base de données postgres :\n\n    sudo -u postgres -i\n    cd /path/vers/dossier/sirene_as_api\n    psql -f postgresql_setup.txt\n\nAssurez vous que tout s'est bien passé :\n\n    bundle exec rails db:create\n\nPuis éxécutez les migrations :\n\n    bundle exec rails db:migrate\n\nSi vous souhaitez utiliser les tests :\n\n    RAILS_ENV=test bundle exec rails db:migrate\n\nVous pouvez maintenant lancer Solr :\n\n    RAILS_ENV=production bundle exec rake sunspot:solr:start\n\nPeuplez la base de données : Cette commande importe le dernier fichier stock mensuel\nainsi que les mises à jour quotidiennes. Attention, cette commande s'éxécute sur\nune base vide.\n\n    bundle exec rake sirene_as_api:populate_database\n\nSi la commande précédente échoue en cours de route ou si la base n'est pas vide,\néxecutez plutôt :\n\n    bundle exec rake sirene_as_api:update_database\n\nC'est prêt ! vous pouvez lancer le serveur :\n\n    bundle exec rails server\n\n## Mises à jour / Administration\n\nLes données ayant changé de format en 2019, nous assurons une continuité de service en convertissant les fichiers du nouveau format vers l'ancien. Il est donc pour le moment toujours possible d'utiliser les endpoints V1 et V2, bien qu'ils soient dépréciés.\n\n### Fichiers ancien format (Endpoints V1 et V2)\n\nTâches disponibles : `rake -T`, ou spécifiques sirene_as_api : `bundle exec rake -T sirene_as_api`\n\nRemplissage base (dernier stock + mises a jour) : ~ 3 heures, patching variable\n(Attention : Cette commande est à lancer sur base vide)\n\n    bundle exec rake sirene_as_api:populate_database\n\nRemplissage base dernier stock seulement : ~ 3 heures\n(Attention : Cette commande est à lancer sur base vide)\n\n    bundle exec rake sirene_as_api:import_last_monthly_stock\n\nMise a jour et applications des patches idoines : ~ 2 minutes par patch\n\n    bundle exec rake sirene_as_api:update_database\n\nAttention ! En début de mois / à chaque nouveau fichier stock, la base de donnée est supprimée puis ré-importée\nentièrement. L'opération prend ~ 3 heures. Cette commande vous demandera confirmation.\n\nSuppression des fichiers temporaires stocks et mises à jour quotidiennes :\n\n    bundle exec rake sirene_as_api:delete_temporary_files\n\nMise à jour et application des patches idoines (sans prompt) + Suppression des fichiers temporaires :\n\n    bundle exec rake sirene_as_api:automatic_update_database\n\nSuppression database, en cas de problèmes :\n\n    bundle exec rake sirene_as_api:delete_database\n\nIl est conseillé de rajouter RAILS_ENV=production au début des commandes en environnement de production.\n\n#### Mises à jour automatiques\n\nIl y a deux processus de mises à jour:\n\n- pour la v1\n- pour le reste\n\n##### Base de données v1\n\n    bundle exec rake sirene_as_api:automatic_update_database\n\n##### Base de données v2/V3\n\n    bundle exec rake sirene:update_database\n\n##### Modifier la fréquence des mises à jour\n\nPour modifier la fréquence des mises à jour, modifiez config/schedule.yml\npuis exécutez la commande :\n\n    bundle exec rake sidekiq_cron:load\n\nLa gem [Sidekiq-cron](https://github.com/ondrejbartas/sidekiq-cron) gère les tâches indépendament de cron. Par défaut la mise à jour se fait à 0h30 du matin.\n\nL'API reste disponible sans interruptions pendant ce process, excepté ~ 3 à 4 heures lors de la\nsuppression / réimportation du fichier stock au début de chaque mois.\n\n#### Sunspot / Solr\n\n  Le serveur Solr doit être actif pour toute requête ou changement sur la\n  base de donnée.\n  Il est nécessaire de précéder ces commandes de `RAILS_ENV=MonEnvironnement`.\n  Attention, avoir plus d'un seul serveur Solr actif peut être source de\n  problèmes, il est par exemple conseillé de désactiver le serveur `test`\n  si vous souhaiter effectuer des opérations en `development`.\n\n#### Demarrer le serveur\n\n    bundle exec rake sunspot:solr:start\n\n#### Arreter le serveur\n\n    bundle exec rake sunspot:solr:stop\n\n#### Réindexation\n\nLa réindexation est automatique après un changement appliqué à la base de\ndonnée, mais il est également possible de réindexer manuellement :\n\n    bundle exec rake sunspot:reindex\n\n#### Construction du dictionnaire de suggestions\n\nLe dictionnaire se reconstruit automatiquement après un changement dans la base de donnée,\nou avec la commande suivante :\n\n    bundle exec rake sirene_as_api:build_dictionary\n\n#### Problèmes fréquents\n\nSi l'API ne renvoie aucun résultat sur la recherche `fulltext` mais que la recherche `siret` fonctionne, vous avez sans doute besoin de réindexer. Tentez `RAILS_ENV=MonEnvironnement bundle exec rake sunspot:solr:reindex` (le server solr doit être actif).\n\nEn cas de problèmes avec le serveur solr, il peut être nécessaire de tuer les processus Solr en cours (obtenir le PID solr avec `ps aux | grep solr` puis les tuer avec la commande `kill MonPidSolr`). Relancer le serveur avec `RAILS_ENV=MonEnvironnement bundle exec rake sunspot:solr:start` suffit en général à corriger la situation.\n\nSi Solr renvoie toujours des erreurs, c'est peut-être un problème causé par une allocation de mémoire trop importante. Commenter les lignes `memory` dans `config/sunspot.yml` et recommencer. Il peut être nécessaire de re-tuer les processus Solr.\n\nEn cas d'erreur 500, et si redemarrer le serveur après l'avoir tué ne suffit pas (echec à l'initialisation du core solr), la suppression du contenu du dossier 'data' de l'environnement cible peut résoudre le problème (il sera alors nécessaire de réindexer).\n\nDans certains cas, le déploiement par Mina ne copie pas correctement les fichiers solr.\nEn cas d'erreur 404 - Solr not found, assurez vous que le fichier /solr/MonEnvironnement/core.properties est bien présent. Sinon, vous pouvez l'ajouter manuellement.\n\nSi tout fonctionne sauf les suggestions, c'est probablement que le dictionnaire de suggestions n'a pas été construit. Executez la commande : `RAILS_ENV=MonEnvironnement bundle exec rake sirene_as_api:build_dictionary`\n\n### Fichiers nouveau format (Endpoint V3)\n\nL'import pour les fichiers V3 a été entièrement réecrit et utilise maintenant la librairie sidekiq-cron. Il est possible de lancer sidekiq avec la commande `bundle exec sidekiq`.\n\nLa base devrait lancer une mise à jour automatiquement selon les horaires de la configuration définie dans `config/schedule.yml`. La configuration par défaut est pour les environnements sandbox et production.\n\nLes informations relatives aux stocks sont enregistrées en base de données. Un stock avec un statut PENDING ou LOADING indique une opération en cours et empêche de relancer l'opération d'import.\n\n#### Mises à jour automatiques\n\nIl est conseillé de lancer sidekiq non pas manuellement mais avec l'ajout d'un service (à l'aide de systemd sur server debian ou ubuntu). Exemple de configuration possible du service :\n\n```\n[Service]\nType=simple\nWorkingDirectory=/var/www/{{ app_name }}/current\n# If you use rbenv:\n# ExecStart=/bin/bash -lc 'bundle exec sidekiq -e production'\n# If you use the system's ruby:\nExecStart={{ bundle_path }} exec sidekiq -e {{ rails_env }} -L {{ log_file }} -C {{ config_file }}\nUser={{ service_user }}\nGroup={{ service_group }}\nUMask=0002\n\n# if we crash, restart\nRestartSec=1\nRestart=on-failure\n\n# This will default to \"bundler\" if we don't specify it\nSyslogIdentifier=sidekiq\n\n[Install]\n```\n\nLes tâches sidekiq s'éxecutent automatiquement en arrière plan. L'installation d'un server Redis est nécessaire pour l'enregistrement de la liste des tâches :\n\n`sudo apt-get install redis-server`\n\nPour relier le serveur Redis à l'application, il est nécessaire de fournir son adresse dans la configuration Rails :\n\n`config.redis_database = 'redis://localhost:6379/1'`\n\n#### Mise à jour manuelle immédiate\n\nIl est possible de lancer une mise à jour immédiate par la console rails. Pour l'environnement `development` :\n\n```\nrails c development\nUpdateDatabaseJob.perform_now\n```\n\nUne fois celle-ci terminée il est possible de lancer les mises à jours quotidiennes :\n\n```ruby\nDailyUpdateJob.perform_now\n```\n\n#### Connaître l'état des mises à jours\n\nCe fichier contient le nom du dernier fichier importé avec succès en v1 :\n\n```shell\ncat .last_monthly_stock_applied/last_monthly_stock_link_name.txt\n```\n\nPour l'import v2, dans la console Rails :\n\n```shell\nStock.last\n```\n\n# License\n\nCe projet est sous [license MIT](https://fr.wikipedia.org/wiki/Licence_MIT)\n\n# Contributions\n\nVous pouvez contribuer à ce projet open-source, par exemple [en nous ouvrant une PR](https://github.com/etalab/sirene_as_api/pulls).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fetalab%2Fsirene_as_api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fetalab%2Fsirene_as_api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fetalab%2Fsirene_as_api/lists"}