par
moogli » 17 mars 2017, 10:58
salut
tu n'as pas besoin de double foreach. ce serait même une erreur parce que ton CSV serait foireux vu que les champs ne sont pas toujours présent (et du coup va savoir à qu'elle colonne le truc se rapporte
utilise un foreach sur les records et un "mapping" pour passer de l'objet à un tableau
exemple
<?php
$biblio = file_get_contents('https://data.opendatasoft.com/api/records/1.0/search/?dataset=adresses-des-bibliotheques-publiques-2015%40culture&facet=nom_dept&facet=nom_reg&rows=1000');
//Récupère une chaîne encodée JSON et la convertit en une variable PHP ; je ne mets pas true => affichage objet
$json_data = json_decode($biblio);
$delimiter = ';';
$file = new SplFileObject('biblio.csv','w');
// entête
$file->fputcsv(['insee','ville','population legale','dept','nom département','reg','nom région','cpbiblio','voie','nom de la voie','type de la voie','libellé'], $delimiter);
foreach ($json_data->records as $record) {
$fields = $record->fields;
$data = [
$fields->insee,
$fields->ville,
$fields->population_legale,
$fields->dept,
$fields->nom_dept,
$fields->region,
$fields->nom_reg,
!empty($fields->cpbiblio)?$fields->cpbiblio:'',
!empty($fields->voie)?$fields->voie:'',
!empty($fields->voie_nom)?$fields->voie_nom:'',
!empty($fields->voie_type)?$fields->voie_type:'',
!empty($fields->libelle1)?$fields->libelle1:''
];
$file->fputcsv($data, $delimiter);
}
les champs avec "empty" ne sont pas toujours dans le json.
si tu veux un CSV tu peut tester la V2 (même si c'est en beta) elle permet de retourner directement un csv
doc :
https://data.opendatasoft.com/api/v2/co ... xports_csv
par exemple :
https://data.opendatasoft.com/api/v2/op ... imiter=%3B
te file un fichier CSV avec tous le jeux de données.
tu peux utiliser le paramètre "q" pour restreindre le jeux (genre une ville ou un département) attention l'api est case sensitive et tu ne trouveras pas paris mais Paris ...
@+
salut
tu n'as pas besoin de double foreach. ce serait même une erreur parce que ton CSV serait foireux vu que les champs ne sont pas toujours présent (et du coup va savoir à qu'elle colonne le truc se rapporte ;)
utilise un foreach sur les records et un "mapping" pour passer de l'objet à un tableau
exemple
[php]<?php
$biblio = file_get_contents('https://data.opendatasoft.com/api/records/1.0/search/?dataset=adresses-des-bibliotheques-publiques-2015%40culture&facet=nom_dept&facet=nom_reg&rows=1000');
//Récupère une chaîne encodée JSON et la convertit en une variable PHP ; je ne mets pas true => affichage objet
$json_data = json_decode($biblio);
$delimiter = ';';
$file = new SplFileObject('biblio.csv','w');
// entête
$file->fputcsv(['insee','ville','population legale','dept','nom département','reg','nom région','cpbiblio','voie','nom de la voie','type de la voie','libellé'], $delimiter);
foreach ($json_data->records as $record) {
$fields = $record->fields;
$data = [
$fields->insee,
$fields->ville,
$fields->population_legale,
$fields->dept,
$fields->nom_dept,
$fields->region,
$fields->nom_reg,
!empty($fields->cpbiblio)?$fields->cpbiblio:'',
!empty($fields->voie)?$fields->voie:'',
!empty($fields->voie_nom)?$fields->voie_nom:'',
!empty($fields->voie_type)?$fields->voie_type:'',
!empty($fields->libelle1)?$fields->libelle1:''
];
$file->fputcsv($data, $delimiter);
}[/php]
les champs avec "empty" ne sont pas toujours dans le json.
si tu veux un CSV tu peut tester la V2 (même si c'est en beta) elle permet de retourner directement un csv
doc : https://data.opendatasoft.com/api/v2/console#!/export_dataset/get_source_datasets_dataset_id_exports_csv
par exemple : https://data.opendatasoft.com/api/v2/opendatasoft/datasets/adresses-des-bibliotheques-publiques-2015%40culture/exports/csv?rows=-1&timezone=Europe%2FParis&delimiter=%3B
te file un fichier CSV avec tous le jeux de données.
tu peux utiliser le paramètre "q" pour restreindre le jeux (genre une ville ou un département) attention l'api est case sensitive et tu ne trouveras pas paris mais Paris ...
@+