Créer un comparateur de prix avec Symfony.
Récupérer des flux de données de sites marchands, créer ou mettre à jour des offres de produits et afficher ces offres sur la partie publique.
Cloner le dépôt et installer les dépendances.
> git clone https://github.com/ekyna-learn/sf-comparator.git
> cd sf-comparator
> composer install
-
Créer un service nommé app.feed.reader configuré avec la classe AppBundle\Feed\Reader, et lui injecter le service Doctrine Entity Manager (@doctrine.orm.entity_manager) comme premier argument du constructeur.
-
Développer la méthode AppBundle\Feed\Reader::read().
// Lire le content d'un fichier distant $content = file_get_contents($url); // Example de flux au format JSON : // [ // {"price":323.57, "ean_code":"7895245668012"}, // {"price":372.7, "ean_code":"7051026984675"} // ] // Transformer du JSON en tableau PHP $array = json_decode($json, true); // true pour obtenir des tableaux associatifs -
Développer la méthode AppBundle\Command\FeedCommand::execute().
// Accéder à un service du conteneur à partir d'une commande $this->getContainer()->get('app.example.service'); -
Utiliser la commande ainsi développée pour récupérer des offres.
Les codes des marchands sont disponibles dans la méthode AppBundle\Model\Merchants::getData().
-
Sur la page d'accueil du site, afficher la liste des produits sous forme de liens vers la page détail produit.
-
Créer et développer la page détail produit /product/[product-id], et afficher les offres disponibles.
marchand, prix et date de mise à jour.
-
Ajouter le support des formats CSV et XML au Feed Reader.
Modifier quelques urls de flux des marchands dans la base de données en remplaçant l'extension 'json' par 'csv' ou 'xml'.
// Récupérer l'extension d'un nom de fichier (ou d'une url avec extension). $format = pathinfo($path, PATHINFO_EXTENSION); // Example de flux au format CSV : 7051026984675;323.82 8413765946812;268.26 // Lire un ficher CSV (local ou distant) $handle = fopen($pathOrUrl, 'r'); while (false !== $data = fgetcsv($handle, null, ';')) { // $data = [<eandCode>, <price>]; } fclose($handle); // Example de flux XML : <?xml version="1.0" encoding="utf-8"?> <offers> <offer ean_code="8043715098064" price="399.68"/> <offer ean_code="7940385061824" price="333.05"/> </offers> // Lire un fichier XML (local ou distant) $dom = new \DOMDocument(); $dom->load($pathOrUrl); $offers = $dom->getElementsByTagName('offer'); /** @var \DomElement $offer */ foreach ($offers as $offer) { // public function \DomElement::getAttribute(string $name); } -
Valider les offres avant de les enregistrer.
- Configurer la validation des offres.
- Injecter le service de validation (@validator) dans le service Feed Reader.
-
Envoyer un rapport à l'administrateur par email.
- Lire un peu de doc.
- Configurer l'envoi d'emails.
- Injecter le service mailer (@mailer) dans le service Feed Reader.
- Notifier l'administrateur du nombre d'offres crées/mises à jour.
