35
Rapport de stage, partie 2.
Déjà mieux !
Le fichier contient plus de 40 colonnes, chaque colonne contient un attribut, ils sont parfois « homogènes » parfois non. Par exemple, certains noms composés sont parfois écrits avec une séparation « - » d’autres avec un « | » voir simplement un espace. Parfois, les mots contiennent un espace à la fin, parfois avant.
En gros les données sont « raw », contiennent parfois des fautes de frappes et il va falloir en plus de les envoyer dans la BDD, les « nettoyer ».
Comme souvent en programmation, il vaut mieux se concentrer sur un problème à la fois, construire petit à petit. J’ai choisi de commencer ma fonction d’import en me focalisant dans un premier temps sur :
Le fichier contient plus de 40 colonnes, chaque colonne contient un attribut, ils sont parfois « homogènes » parfois non. Par exemple, certains noms composés sont parfois écrits avec une séparation « - » d’autres avec un « | » voir simplement un espace. Parfois, les mots contiennent un espace à la fin, parfois avant.
En gros les données sont « raw », contiennent parfois des fautes de frappes et il va falloir en plus de les envoyer dans la BDD, les « nettoyer ».
Comme souvent en programmation, il vaut mieux se concentrer sur un problème à la fois, construire petit à petit. J’ai choisi de commencer ma fonction d’import en me focalisant dans un premier temps sur :
Avant toute chose, je tiens à préciser que lors de mon arrivée au BIFFF, un stagiaire était déjà présent, Ahmed.
Ahmed, ce sacré polisson, avait au préalable créer tous les fields où allaient finir les données que ma fonction allait catapulter à pleine puissance.
Ahmed, ce sacré polisson, avait au préalable créer tous les fields où allaient finir les données que ma fonction allait catapulter à pleine puissance.

Petit exemple de quelques fields pour le post « Films »
Petit résumé d’où j’en suis :

La première brique est posée, le $_SERVER[‘REQUEST_URI‘] va me chercher l’url courante et le $insertion_csv_post sera rajouter à la fin de l’url, ce qui va me permettre plus tard d’utiliser ce système afin de poursuivre l’exécution de ma fonction si $insertion_csv_post est présent dans l’url. Ou inversement, ne pas poursuivre son exécution si ma variable $_POST est absente, dans le but de ne pas gâcher de la mémoire pour rien.
Je savoure brièvement cette première victoire et repars sur Google à la recherche d’une fonction d’import qu’un petit génie aurait éventuellement déjà codé à ma place, et où je n’aurais plus qu’à faire un glorieux ctrl+c, ctrl+v afin que tous mes soucis disparaissent. Voir, qu’émerveillé, mon maître de stage me propose instantanément un CDI et qu’il me mette en contact avec Jeff Bezos. Du coup à ce stade, mon historique Google devait ressembler à ça :

C’est avec beaucoup d’amertume et de déception que je me rendis compte que j’étais un des seuls illuminés sur terre à vouloir coder cette fonction à la main, que tout le monde utilisait des plugins à 5€ codés par Râmakrishna Paramahamsa ou son collègue Wang Zhang Jing.
Plein d’espoir, je contacte JD afin de lui faire part de ma découverte de plugins d’import, dont certains avec plus de 5 millions d’utilisateurs.
Je savoure brièvement cette première victoire et repars sur Google à la recherche d’une fonction d’import qu’un petit génie aurait éventuellement déjà codé à ma place, et où je n’aurais plus qu’à faire un glorieux ctrl+c, ctrl+v afin que tous mes soucis disparaissent. Voir, qu’émerveillé, mon maître de stage me propose instantanément un CDI et qu’il me mette en contact avec Jeff Bezos. Du coup à ce stade, mon historique Google devait ressembler à ça :

C’est avec beaucoup d’amertume et de déception que je me rendis compte que j’étais un des seuls illuminés sur terre à vouloir coder cette fonction à la main, que tout le monde utilisait des plugins à 5€ codés par Râmakrishna Paramahamsa ou son collègue Wang Zhang Jing.
Plein d’espoir, je contacte JD afin de lui faire part de ma découverte de plugins d’import, dont certains avec plus de 5 millions d’utilisateurs.
Ne dit-on pas que la liberté n’a pas de prix ?
Déçu de la tournure de ma négociation avec JD, je relance mon éditeur de code et retourne dans functions.php.
Soudainement, j’ai un flashback : une cascade, moi en tenue traditionnelle japonaise, en équilibre sur un pied sur un rondin de bois. Une voix marquée par un accent Louviérois arrive jusqu'à mes oreilles :
« Variable globale… »
Wow. Bien vu.
J’initialise $wpdb en global afin de pouvoir, dans un futur proche, exécuter une custom database query dessus. Je crée le test afin de vérifier si le bouton a été cliqué ou non, et j’initialise mon tableau qui contiendra plus tard toutes mes données :
Soudainement, j’ai un flashback : une cascade, moi en tenue traditionnelle japonaise, en équilibre sur un pied sur un rondin de bois. Une voix marquée par un accent Louviérois arrive jusqu'à mes oreilles :
« Variable globale… »
Wow. Bien vu.
J’initialise $wpdb en global afin de pouvoir, dans un futur proche, exécuter une custom database query dessus. Je crée le test afin de vérifier si le bouton a été cliqué ou non, et j’initialise mon tableau qui contiendra plus tard toutes mes données :

Bingo. On peut passer à la suite.
Maintenant que j’ai accès aux données du .csv, « yapluka » les insérer au bon endroit.
Je décide d’abord de modifier mon fichier .csv pour ne garder que les 4 premiers films sur les 200+. Cela va rendre mes tests plus faciles et va m’éviter également de surcharger la BDD pour rien.
Une fois le .csv modifié, je vais pour l’instant comme je l’ai dit plus tôt, n’insérer que le nom et la description du film.
Première chose à faire, un test sur les doublons. Si le titre du film existe déjà, on passe au suivant. Rien de pire que de surcharger une base de donnée avec des affreux doublons. Ça donne ceci :
Je décide d’abord de modifier mon fichier .csv pour ne garder que les 4 premiers films sur les 200+. Cela va rendre mes tests plus faciles et va m’éviter également de surcharger la BDD pour rien.
Une fois le .csv modifié, je vais pour l’instant comme je l’ai dit plus tôt, n’insérer que le nom et la description du film.
Première chose à faire, un test sur les doublons. Si le titre du film existe déjà, on passe au suivant. Rien de pire que de surcharger une base de donnée avec des affreux doublons. Ça donne ceci :

Et après avoir cliqué sur mon petit bouton d’insertion :

L’insertion fonctionne !
Cette partie était la plus simple, car les fields « titre » et « content » sont des fields Text.
J’ai rencontré beaucoup plus de difficultés lors de l’import des « genres » par exemple. Dans le WordPress, les genres sont une taxonomie. De plus, j’ai remarqué que certains genres dans le fichier .csv avaient besoin d’être nettoyés.
Petit exemple de ce que donne le code d’import des genres :
Au final, malgré les difficultés j’ai tout de même réussi à tout importer. Rien que cette fonction d’import m’a pris je pense plus de 3 semaines afin qu’elle soit complètement opérationnelle.

L’insertion fonctionne !
Cette partie était la plus simple, car les fields « titre » et « content » sont des fields Text.
J’ai rencontré beaucoup plus de difficultés lors de l’import des « genres » par exemple. Dans le WordPress, les genres sont une taxonomie. De plus, j’ai remarqué que certains genres dans le fichier .csv avaient besoin d’être nettoyés.
Petit exemple de ce que donne le code d’import des genres :

Au final, malgré les difficultés j’ai tout de même réussi à tout importer. Rien que cette fonction d’import m’a pris je pense plus de 3 semaines afin qu’elle soit complètement opérationnelle.
Je n’ai pas travaillé à temps plein dessus, car d’autres missions venaient se greffer simultanément, comme la création d’une ligne du temps qui reprend les 40 années d’éditions du BIFFF, des carrousels qui affichent les différents films, triés par genre, des rewrites rules, une homepage, etc.

Ligne du temps des éditions

La homepage
35