IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Synchronisation de donnée


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Multi Subtlety Rogue
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Multi Subtlety Rogue

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Synchronisation de donnée
    Bonjour,

    Je suis en se moment sur un projet qui me laisse perplexe, ne connaissant pas suffisamment le MySQL/MySQLi pour réussir à faire ce que je souhaite mes essaies sont donc de malheureux échecs.


    J'ai fais un petit site (URL), dont le principal but est d'affiché l'avancée de mes personnages sur mon jeu. Pour le moment il est entièrement en HTML.


    J'aimerais mettre en oeuvre une synchronisation de donnée, entre mon site et le site officiel du jeu, cela m'éviterais entre-autres de devoir (à chaque fois) éditer l'index HTML et le re-upload sur mon hébergeur.
    Je sais que plusieurs sites le font déjà via une sorte de Requête (Exemple WoWProgress).

    Si mes connaissances sont correctes, il faut que créer un script pour récupérer les informations du site officiels (Niveau/Classe/Etc), les stockés dans une base de donnée (Obligatoire ?), pour ensuite les affichés sur mon site, cependant je ne sais absolument pas comment m'y prendre. J'ai passer plusieurs heures à lire des guides sur le MySQL mais je me suis retrouver avec une erreur disant que le MySQL était obsolète donc je dois, je suppose, me lancer en MySQLi ?

    Les infos que je veux récupérer sont le Niveau du personnage ainsi que son Niveau d'objet équipé:


    Pour le moment les infos sont inscrite manuellement, en HTML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div class="resume_period"> <span class="period_from">L100 - i668</span></div>
    // L = Niveau du personnage
    // i = Niveau d'objet équipé
    Le CMS Eqdkp-Plus utilise un genre de script qui envoi (il me semble) une requête au site officiel via son API, je n'ai pas réussis à en comprendre son réel fonctionnement. Le fichier d'import est ici: http://pastebin.com/G4eDjb9t

    Dans le cas où ce serait trop complèxe j'envisagerais de passer sur Eqdkp-Plus au lieu de rester sans CMS, même si leurs skins ne me plaisent pas énormement (Pas de flat..)

    Une petite idée s'il vous plait ?

    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Utilise l'API :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $perso = 'ImAkns';
    $royaume = 'Kael\'thas';
    $url = 'http://eu.battle.net/api/wow/character/' . urlencode($royaume) . '/' . urlencode($perso);
    $info = json_decode(file_get_contents($url));
     
    echo '<h1>Niveau</h1>';
    echo $info->level;
     
    echo '<h1>Autres Infos</h1>';
    foreach ($info as $key=>$value) {
       echo $key . ' : ' . $value . '<br/>';
    }
    Il existe également des classes toutes prêtes.

    Mysql ici servirait à stocker les données pour ne pas les relire à chaque fois depuis l'API.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Multi Subtlety Rogue
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Multi Subtlety Rogue

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Hi,

    Merci, je vais regarder ça

    Edit:

    Après lecture de l'API de Blizzard (URL) , j'ai utilisé '?fields=items' dans l'url pour récupérer la valeur "itemLevel".

    J'ai ensuite créé un fichier Info.php avec des modifications sur votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $perso = 'ImAkns';
    $royaume = 'Kael\'thas';
    $url = 'http://eu.battle.net/api/wow/character/' . urlencode($royaume) . '/' . urlencode($perso) .'?fields=items';
    $info = json_decode(file_get_contents($url));
     
     
    echo '<h1>LvL</h1>';
    echo $info->level;
    echo '<h1>iLvL</h1>';
    echo $info->averageItemLevelEquipped;
     
     
    ?>
    J'obtiens bien le niveau mais pas le niveau d'objet équipé. Je pense que c'est dût au fait que le niveau d'objet équipé fait partis de "items"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    "name":"Imakns",
    "realm":"Kael'thas",
    "level":100,
    "items":
    	{
    	"averageItemLevelEquipped":620,
    	},
    Cependant je ne sais pas comment faire la liaison entre "items" et "averageItemLevelEquipped"
    J'ai donc essayé

    " averageItemLevelEquipped " = Pas d'affichage
    " items " = Erreur 500
    " items.averageItemLevelEquipped " = Erreur 500
    " items_averageItemLevelEquipped " = Pas d'affichage
    " items(averageItemLevelEquipped) " = Erreur 500

    Lien : http://akns.olympe.in/info.php

    J'ai quand même commencé la transition d'informations.

    J'ai remplacer mon ancien code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <article class="post resume_post resume_post_2 odd">
                          <div class="post_header resume_post_header">
                            <div class="resume_period"> <span class="period_from">L100 - i622</span></div>
                            <h4 class="post_title"><span class="post_title_icon_g green"></span><a href="http://eu.battle.net/wow/fr/character/kaelthas/ImAkns/advanced">ImAkns @ Kael'thas</a></h4>
                            <h5 class="post_subtitle">Subtlety PvP</h5>
                          </div>
                          <div class="post_body resume_post_body">
                            <p></p>
                          </div>
                        </article>
    Par le nouveau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     <article class="post resume_post resume_post_2 odd">
                          <div class="post_header resume_post_header">
                            <div class="resume_period"> 
    						<span class="period_from">L <?php
    								$perso = 'ImAkns';
    								$royaume = 'Kael\'thas';
    								$url = 'http://eu.battle.net/api/wow/character/' . urlencode($royaume) . '/' . urlencode($perso) .'?fields=items';
    								$info = json_decode(file_get_contents($url)); 
    								echo $info->level; ?> - i <?php 
    								echo $info->averageItemLevelEquipped; ?> </span></div>
                            <h4 class="post_title"><span class="post_title_icon_g green"></span><a href="http://eu.battle.net/wow/fr/character/kaelthas/ImAkns/advanced">
    						<?php 
    								echo $info->name; ?>
    								@ 
    						<?php 
    								echo $royaume->realm; ?>
    								</a></h4>
                            <h5 class="post_subtitle">Subtlety PvP</h5>
                          </div>
                          <div class="post_body resume_post_body">
                            <p></p>
                          </div>
    Et j'obtiens ceci:


    Lien : http://akns.olympe.in/indextest.html
    Ps: J'ai changé d'hébergeur car Hostinger ne supportait pas les requêtes, j'avais une erreur comme quoi il ne trouvait pas l'IP de Battle.net.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Multi Subtlety Rogue
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Multi Subtlety Rogue

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'ai trouvé la liaison entre items et averageItemLevelEquipped

    Il s'agit de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    items->averageItemLevelEquipped;
    ce qui donne donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo '<h1>LvL</h1>';
    echo $info->level;
    echo '<h1>iLvL</h1>';
    echo $info->items->averageItemLevelEquipped;
    Me reste plus qu'à trouvé l'erreur d'insertion Php dans ma page indextest.hml


    Je viens de comprendre mon erreur en relisant mon message, c'est.... une page HTML !
    Je viens donc de la mettre en .php et magie.. tout fonctionne !

    Maintenant le problème se situe sur les barres de progressions, qui sont encore en HTML

    Voici le code d'une barre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <div class="skills_row odd first">
    <span class="caption">Swyzix @ Kazzak</span>
    <a href="http://eu.battle.net/wow/fr/character/kazzak/Swyzix/advanced">
    <span class="progressbar">
    <span data-process="100%" class="progress green">
    <span class="value">L100</span>
    </span>
    </span>
    </a>
    </div>
    J'aimerais remplacer la valeur de data-process par celle du niveau du personnage ( $info0->level pour ce personnage ) cependant ça ne fonctionne pas
    Pareil pour la valeur Lxx, si je met le code du level ça n'affiche rien à par mon "L".

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est bien tu as tout résolu tout seul.

    Pour repeter le code, fais une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    fonction wowinfo($realm, $char) {
        $url = 'http://eu.battle.net/api/wow/character/' . urlencode($realm) . '/' . urlencode($char) .'?fields=items';
        $info = json_decode(file_get_contents($url));
        return $info;
    }
     
    $info = wowinfo('ImAkns', 'Kael\'thas');
    echo $info->items->averageItemLevelEquipped;
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Multi Subtlety Rogue
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Multi Subtlety Rogue

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'ai remplacé toutes les informations en répétant le code, ça fonctionne et ça évite de recevoir une erreur pour les personnages de niveau 1 "Personnage introuvable", j'ajouterais le code quand ils seront niveau 10 sinon l'API ne marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"status":"nok", "reason": "Character not found."}
    Pour les barres de progressions je suis encore entrain de réfléchir

    J'ai tenté de remplacer
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data-process="<?php $info0->level ?>%"
    C'est sans succès

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pour les personnages inexistants, tu peux le prévoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fonction wowinfo($realm, $char) {
        $url = 'http://eu.battle.net/api/wow/character/' . urlencode($realm) . '/' . urlencode($char) .'?fields=items';
        $info = json_decode(file_get_contents($url));
        if (isset($info->status) && $info->status == "nok") {
              return FALSE;
        }
        return $info;
    }
    tu as oublié le echo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data-process="<?php echo $info0->level ?>%"
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Multi Subtlety Rogue
    Inscrit en
    Février 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Multi Subtlety Rogue

    Informations forums :
    Inscription : Février 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Cela ne fonctionne pas, en remplaçant la valeur de data-process par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "<?php echo $info0->level ?>%"
    ça n'affiche plus la progression.
    Pourtant, en prenant exemple sur ImAkns, info0->level est égal à 100, donc ça donne "echo 100%".
    J'avais donc viré echo pour que le résultat de la valeur soit sous la même forme que l'ancienne valeur de ce data-process, soit "100%".

    Edit: C'est bon tout marche ! C'est le bon code, j'avais juste oublier que chaque définition doit être plus haute que sa valeur, les définitions de $info étaient plus loin que les valeurs de data-process, donc il n'affichait rien car il ne connaissait pas $info.
    Du coup j'ai remonter les $perso, $royaume, $url, et $info, maintenant tout fonctionne à merveille.

    Je te remercie pour ton aide précieuse qui m'a été d'une grande utilité, je n'y serais jamais arrivé si tu ne m'avais pas rappeler que l'API de Blizzard était encore disponible (bien qu'ils ne soit pas à jour malheureusement).


    Ps: Si jamais, l'extraction de la spécialisation active du joueur est plus complexe, car elle part d'une valeur ayant 2 résultat: La spécialisation active et la spécialisation inactive sont toutes les deux sous talents->spec
    J'ai trouvé une doc plutôt intéressante (bien qu'en anglais) si jamais vous cherchez la solution: http://us.battle.net/wow/en/forum/topic/7393489622

    Il y a encore pas mal de boulot donc, entre la spécialisation, la race (résultat en chiffre) et la classe (idem). Bien que ses informations me servirons à rien (je change pas de race tout les jours ) ce sera un bon moyen d'apprendre un peu plus le PHP ainsi que l'API de Blizz

    Je regrette cependant que les développeurs du site Battle.net ne mettent pas l'API à jour, du coup il y as beaucoup d’incohérence à cause des mises à jours du jeu, notamment la fonction averageItemLevelEquipped qui retourne au faux résultat si le personnage équipe un objet héritage (Merci la 6.1 !)

Discussions similaires

  1. Synchronisation de données SQLServer 2000 -> 2005
    Par pcaboche dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 24/01/2007, 09h53
  2. [SQLServeur 2000-2005] Synchronisation de données
    Par mister3957 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/01/2007, 23h26
  3. Synchronisation des Données avec SQL Server 2005
    Par attouchi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/07/2006, 16h14
  4. [general] la synchronisation de données
    Par if_zen dans le forum Général Java
    Réponses: 7
    Dernier message: 22/05/2006, 12h28
  5. [C#] Synchronisation de donnée
    Par BoOom dans le forum Windows Forms
    Réponses: 1
    Dernier message: 11/04/2006, 11h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo