· 5 years ago · Nov 19, 2020, 10:20 AM
1<?php
2
3function jsonMsqToBase($jsonFile, $msqGenre)
4{
5
6 set_time_limit(0);
7 $json = $jsonFile;
8 $jsonArray = json_decode($json, true); //Décode une chaîne JSON
9 $connect = connectBD(); // Connection à la base de donnée
10
11 // Creation de la Table Musique avec les valeurs du JSON
12 $query = 'CREATE TABLE IF NOT EXISTS musiques (
13 `msqID` INT NOT NULL AUTO_INCREMENT,
14 `msqIDAPI` INT NOT NULL UNIQUE,
15 `cover_art_url` VARCHAR( 255 ),
16 `url` VARCHAR( 255 ) NOT NULL,
17 `artist` VARCHAR( 50 ) NOT NULL,
18 `msqFeat` VARCHAR( 50 ),
19 `name` VARCHAR( 100 ) NOT NULL,
20 `msqGenre` VARCHAR (255) NOT NULL,
21 `msqLike` INT,
22 `msqLength` VARCHAR( 7 ),
23 `msqPrice` VARCHAR( 4 ),
24 PRIMARY KEY ( `msqID` )
25 )';
26 mysqli_query($connect, $query) or die(mysqli_error($connect));
27
28 $query = "SELECT msqIDAPI FROM musiques"; // Requete de la colonne IDAPI de la table musiques
29 $ret = mysqli_query($connect, $query) or die(mysqli_error($connect));
30 $retCheck = mysqli_fetch_object($ret);
31 if ($retCheck == null) {
32 $ArrayIdTest = [];
33 } else {
34 $ArrayIdTest = mysqli_fetch_all($ret, MYSQLI_NUM) or die(mysqli_error($ret)); // Mettre la requete dans un tableau test
35 }
36 //$ArrayIdTest = [];
37 foreach ($ArrayIdTest as $key => $value) { // Pour chaque valeurs du tableau
38 $ArrayIdTest[$key] = (int) $value[0]; // Transformer les valeurs "string" en entier
39 }
40 foreach ($jsonArray as $key => $value) { // Pour chaque valeurs du JSON alors
41 set_time_limit(0); // Permet d'éviter des bugs de transfert lié au temps
42 for ($i = 0; $i < count($jsonArray[$key]['files']); $i++) // Test pour tous les type d'upload que possède le fichier
43 {
44 if ($jsonArray[$key]['files'][$i]['file_format_info']['default-ext'] == 'mp3') { // Si le format de fichier du JSON est un MP3 alors
45 if (isset($jsonArray[$key]['files'][$i]['file_upload'])) { // Si l'ID Du JSON existe
46 // Si la valeur de l'ID n'est pas dans mon tableau
47 if (in_array($jsonArray[$key]['files'][$i]['file_upload'], $ArrayIdTest) == false) {
48 $msqIDAPI = $jsonArray[$key]['files'][$i]['file_upload']; // Récupère l'ID du JSON venant de l'API
49 array_push($ArrayIdTest, $jsonArray[$key]['files'][$i]['file_upload']); // Mettre l'ID Actuel dans un tableau de Test ArrayID
50 // Utilisation d'une cover par default avec une url aleatoire
51 $randomid =rand (0,700);
52 $url_random_cover ='https://picsum.photos/id/'.$randomid.'/200/200';
53 $headers = @get_headers($url_random_cover);
54 // Check si l'url de la page est bon avec ce nombre aleatoire sinon il en essaye un autre
55 while($headers && strpos( $headers[0], '404')) {
56 $randomid =rand (0,700);
57 $url_random_cover ='https://picsum.photos/id/'.$randomid.'/200/200';
58 $headers = @get_headers($url_random_cover);
59 }
60 $cover_art_url = urlencode($url_random_cover); // La cover prends l'image de Cover random par Default
61 if (isset($jsonArray[$key]['files'][$i]['download_url'])) { // Si l'URL du mp3 existe alors
62 $url = urlencode($jsonArray[$key]['files'][$i]['download_url']); // Récupère l'URL du mp3 dans le JSON venant de l'API
63 } else { // Sinon
64 $url = 'https://ia800804.us.archive.org/32/items/NeverGonnaHitThoseNotes/Never%20Gonna%20Hit%20Those%20Notes.mp3'; // L'URL du mp3 prends la Valeur du lien mp3 Never Gonna Hit Those Notes
65 }
66 if (isset($jsonArray[$key]['user_real_name'])) { // Si le nom d'artiste existe alors
67 $artist = $jsonArray[$key]['user_real_name']; // Récupère le nom d'artiste dans le JSON venant de l'API
68 } else { // Sinon
69 $artist = 'Default'; // Le nom d'artiste prends la Valeur Default
70 }
71 if (isset($jsonArray[$key]['featuring'])) { // Si le nom d'artiste en featuring existe alors
72 $msqFeat = $jsonArray[$key]['featuring']; // Récupère le nom d'artiste en featuring dans le JSON venant de l'API
73 } else { // Sinon
74 $msqFeat = ''; // Le nom d'artiste en featuring prends la Valeur " "
75 }
76 if (isset($jsonArray[$key]['files'][$i]['file_nicname'])) { // Si le titre de la musique existe alors
77 if ($jsonArray[$key]['files'][$i]['file_nicname']=='mp3') // Si le titre à été mal renseigné ( on retrouve mp3 lorsque le titre n'as pas été renseigné)
78 {
79 $name = $jsonArray[$key]['files'][$i]['file_name']; // Récupère le nom du fichier total (artiste+titre.mp3) même si l'écriture n'est pas correcte cela reste mieux que rien comme titre
80 $name = str_replace($artist, "", $name); // Enleve l'artiste dans le titre
81 $name = str_replace(".mp3", "", $name); // Enleve le .mp3 dans le titre
82 $name = str_replace("-", " ", $name); // Enleve les - dans le titre
83 $name = str_replace("_", " ", $name); // Enleve le _ dans le titre
84 }
85 else { // Sinon si le titre est bon
86 $name = $jsonArray[$key]['files'][$i]['file_nicname']; // Récupère le titre de la musique dans le JSON venant de l'API
87 }
88 } else { // Sinon
89 $name = 'Default'; // Le titre de la musique prends la Valeur Default
90 }
91 if (isset($jsonArray[$key]['upload_num_scores'])) { // Si le nb de recommandation existe alors
92 $msqLike = $jsonArray[$key]['upload_num_scores']; // Récupère le nb de recommandation du JSON venant de l'API
93 } else { // Sinon
94 $msqLike = 0; // Le nb de recommandation prends la Valeur 0
95 }
96 if (isset($jsonArray[$key]['files'][$i]['file_format_info']['ps'])) { // Si la longueur de la musique existe alors
97 $msqLength = $jsonArray[$key]['files'][$i]['file_format_info']['ps']; // Récupère la longueur de la musique du JSON venant de l'API
98 } else { // Sinon
99 $msqLength = '0:00'; // La longueur de la musique prends la Valeur Default
100 }
101 $msqPrice = 'FREE';
102
103 var_dump($msqIDAPI, $cover_art_url, $url, $artist, $msqFeat, $name, $msqLike, $msqLength, $msqGenre, $msqPrice);
104 // Regarde les differentes tables de la requete pour les assigner aux valeurs de la table musiques dans la BDD
105 $query = "INSERT INTO musiques(`msqIDAPI` , `cover_art_url`, `url`, `artist`, `msqFeat`, `name`, `msqLike`, `msqLength`, `msqGenre`, `msqPrice`) VALUES ('$msqIDAPI','$cover_art_url','$url','$artist','$msqFeat','$name','$msqLike','$msqLength','$msqGenre','$msqPrice')";
106 mysqli_query($connect, $query) or die(mysqli_error($connect)); // envois la requete
107
108 } else {
109 var_dump('Doublon detecté'); // Si la valeur de l'ID est déjà dans mon tableau ne rien rentrer comme valeur dans la BDD
110 }
111 }
112 }
113 }
114 }
115 return $jsonArray;
116}
117// Connection a la base de Donnée
118function connectBD()
119{
120 $hote = 'localhost';
121 $base = 'artshop';
122 $user = 'root';
123 $pass = '';
124 $cnx = mysqli_connect($hote, $user, $pass) or die(mysqli_error($cnx));
125 $query = 'CREATE DATABASE IF NOT EXISTS ' . $base;
126 mysqli_query($cnx, $query) or die(mysqli_error($query));
127 mysqli_select_db($cnx, $base) or die(mysqli_error(mysqli_select_db($cnx, $base)));
128 return $cnx;
129}
130