Page 1 sur 1

CSV / API

Posté : 01 août 2016, 10:47
par jfk2lax
Bonjour à tous,

Je dois manipuler un fichier CSV qui exporte des commandes afin de faire un script pour communiquer avec une API.
Dans ce fichier csv il y a une colonne code barre et une colonne quantité.

Voici la fonction qui est utilisé pour communiquer avec cette API

changeStock(
"id_api",
json_encode([
"type" => 2,
"produit" => "ART-051-0161",
"valeur" => 40
])
);

Pour chaque commande je dois utiliser cette fonction et changer les valeurs "produit" et "valeur".
J'ai fait un script qui me permet de récupérer les valeurs csv "produit" et "valeur" sans trop de problème.

Est il possible de faire un script en php qui pour chaque ligne csv changerai les valeurs de produits et valeur tout en reprenant la structure de la fonction ?

Je bloque un peu car je ne sais pas comment comment procéder.

Quelqu'un peut il m'aider ?


Merci

Re: CSV / API

Posté : 01 août 2016, 11:50
par moogli
salut,

sans plus de code c'est difficile de t'aider. tous ce que je peux te dire c'est qu'il suffit d'appeler cette fonction dans la boucle de traitement du ficher et remplacer les valeurs, type et produit par ce que tu récupères du fichier.

@+

Re: CSV / API

Posté : 01 août 2016, 12:07
par jfk2lax
Merci pour ta réponse.
Pour le moment je n'ai pas grand chose comme code puisque je ne sais pas comment le faire.
Voilà ce que j'ai pour la partie CSV.

$row = 1;
if (($handle = fopen("vente.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}



?>

Re: CSV / API

Posté : 01 août 2016, 12:36
par moogli
ok.

Déjà y a moyen de simplifier ça ;)
les fonctions filefile et str_getcsv vont faire le boulot pour toi.
Ensuite lors du parcourt du tableau tu utilise la fonction changestock().

La version moderne objet
<?php
// le prototype juste pour info ici tu as déjà ça quelque part
function changeStock($id,$json){};

$file = new SplFileObject('vente.csv');
$file->setFlags(SplFileObject::READ_CSV);
foreach ($file as $data) {
    // utilisation de la fonction, reste a prendre les bonnes infos
    changeStock("id_api", json_encode(["type" => 2,"produit" => "ART-051-0161","valeur" => 40]));
}
ne pas oublier SplFileObject::setCsvControl pour indiquer les paramètres csv (séparateur etc.) s'il ne correspondent pas aux valeurs par défaut (separateur virgule, enclosure guillement, escape = \ )

@+

Re: CSV / API

Posté : 01 août 2016, 13:37
par jfk2lax
Merci. comment je fais pour récupérer justement les valeurs des variables "produit" et "valeur" ?

Re: CSV / API

Posté : 01 août 2016, 14:27
par moogli
ben je sais pas moi regarde la doc, je t'ai fournis tout le code tu as juste à regarder ton fichier CSV et utiliser un tableau.

c'est simple il suffit de regarder les exemples d'utilisations fournit dans les liens de mon premier messages.

Il manque pas grand chose je ne ferais pas pour toi vue que tu as tout ce qu'il faut dans mes deux réponses et les différents liens ;)

@+

Re: CSV / API

Posté : 01 août 2016, 14:30
par jfk2lax
Oui merci, je ne demande pas que vous le fassiez, je veux juste comprendre le mécanisme. Je débute. Merci encore

Re: CSV / API

Posté : 02 août 2016, 11:34
par moogli
je reprends mon code
<?php
// création d'un objet SplFileObject : il permet de facilité l'accès au fichier (lecture / écriture, meta données)
$file = new SplFileObject('vente.csv');
// on indique que l'on va lire du CSV
$file->setFlags(SplFileObject::READ_CSV);
// le boucle foreach (pour chaque) permet une itération sur chaque ligne du fichier
// Le fait d'avoir indiqué sur l'on lit du CSV permet d'avoir un tableau php avec chaque colonne d'une ligne dans une case du tableau
foreach ($file as $data) {
    // utilisation de la fonction, reste a prendre les bonnes infos => la je ne peux pas t'aider c'est toi qui connait la structure du fichier csv, masi tout est dans le table $data
    changeStock("id_api", json_encode(["type" => 2,"produit" => "ART-051-0161","valeur" => 40]));
}
documentations
- des tableaux en php http://php.net/manual/fr/language.types.array.php
- de la structure foreach http://php.net/manual/fr/control-structures.foreach.php

Le code que je t'ai indiqué fait globalement la même chose que le tiens sauf qu'il est plus souple (tu te limites à un nombre de caractère alors que la on le lit ligne par ligne) et plus simple à suivre et fournit moins de possibilités d'erreurs.

Est ce que tu comprends la notion de tableau ou la boucle foreach .
Est ce que tu comprends ce que tu obtiens dans la boucle ?


@+

Re: CSV / API

Posté : 04 août 2016, 10:42
par jfk2lax
Merci Moogli.
J'ai un peu compris le principe.
Voilà ce que j'ai pour le moment.
Ce que je ne comprend pas maintenant, c'est comment on retourne le resultat de la fonction changeStock ?

Code : Tout sélectionner

function changeStock($id,$json){}; $file = new SplFileObject('test.csv'); $file ->setFlags(SplFileObject::READ_CSV); $file ->setCsvControl(';'); foreach ($file as $data) { changeStock($id, json_encode(["type" => $data[0],"produit" =>$data[1],"valeur" => $data[2]])); var_dump ($data); }

Re: CSV / API

Posté : 04 août 2016, 11:21
par moogli
alors pour la fonction changeStock() la je ne connais pas, j'ai mis un squelette pour que mon code fonctionne après la il faut voir avec "les gens" qui t'ont filé l'api ;)

en php tu ne peux avoir qu'un seul argument de retour donc je suppose que la fonction retourne une valeur simple ou un objet ou un tableau qui va contenir la réponse (mise à jour ok ou pas, message d'erreur etc).
Ceci dit la je ne fait que supposer il faut voir avec la fonction en elle même pour savoir ce qu'elle fait ;)
si la fonction changeStock retourne quelque chose il faut affecter le retour de la fonction à une variable pour l'exploiter (affichage, vérification du retour etc).
<?php
$retour = changeStock(...)
ton code lui, fait ce que tu demandes :
- lire un fichier SCV ligne par ligne
- pour chaque ligne appel de la fonction changeStock avec un premier paramètre qui contient la variable $id (non définie dans ce code mais je suppose que c'est plus haut) et en second paramètre une chaîne de caractères JSON qui représente un tableau php (qui contient un type, un produit et une valeur).

voilà, sans plus d'info sur cette fonction changeStock (pense a supprimer la définition en première ligne de ton code elle te sert pas) je ne peu pas t'aider plus.

@+