1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Durch Javascript erstellte Elemente mit PHP auslesen

Dieses Thema im Forum "PHP" wurde erstellt von relasragent, 20. März 2017.

  1. relasragent

    relasragent Grünschnabel

    Bin mir nicht mal sicher ob der Titel überhaupt Sinn macht aber hier zu meinem Problem:

    Für das Spiel Minecraft gibt es ein Plugin welches eine Übersicht der Map auch im Browser zulässt, die sogenannte DynMap.
    Wer sich das einmal angucken möchte: http://dynmap.minecraft.de/
    Ich möchte einen bestimmten Teil auslesen, und zwar die Player, welche in der rechten Sidebar gelistet werden.
    Wenn ich mir die Dynmap über $map = file('http://dynmap.minecraft.de/index.html'); in mein Script hole geht allerdings der Teil verloren, welchen ich brauche
    view-source:http://dynmap.minecraft.de/ hier erkennt man, dass im sourcecode bei <div id="mcmap"></div> Schluss ist, die Spielernamen werden aber in diesem div-Container genannt.

    Im Google Chrome Developer Tool finde ich unter
    html>body>div#mcmap.dynmap>div.sidebar.pinned>div.panel>fieldset>ul.playlist
    meine Daten

    Zur Frage: Wie komme ich an diese Daten ran? (Mir reicht es wenn ich diese Passage als string oder Array vor mir liegen habe)
     
  2. abdellaui

    abdellaui Erfahrenes Mitglied

    Via Console erkennt man, das die Spielerdaten dynamisch hergeleitet werden.

    http://dynmap.minecraft.de/standalone/dynmap_hauptwelt.json?_=912

    Ich konnte nicht ermitteln wofür die 912 stehen soll, jedoch erhaltet man in dieser URL die Userdaten.

    Schau es dir hier an, welche Information du via erwähntem Link erhälts:
    http://www.jsoneditoronline.org/?id=90d147302c333851d5693a1d9d493f97


    Du musst nun, vorrausgesetzt der Betreiber der Seite erlaubt dir dies, via CURL die oben erwähnte Adresse aufrufen, json decoden und die Ausgabe je nach Bedarf erstellen.

    Also so in etwa:
    Code (PHP):
    1. <?php
    2.     $ch = curl_init();
    3.     curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    4.     curl_setopt($ch, CURLOPT_HEADER, FALSE);
    5.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    6.    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    7.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    8.    curl_setopt($ch, CURLOPT_URL, 'http://dynmap.minecraft.de/standalone/dynmap_hauptwelt.json?_=912');
    9.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);  
    10.    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0');
    11.     $data = curl_exec($ch);
    12.     curl_close($ch);
    13.    $data = json_decode($data);
    14.    echo '<pre>Users:<hr>';
    15.    foreach($data->players AS $k => $v){
    16.        echo $v->account.'<hr>';
    17.    }
    18.    
    19.    echo 'Daten die man erhält:';
    20.    print_r($data);
    21. ?>
     
    relasragent gefällt das.
  3. relasragent

    relasragent Grünschnabel

    Funktioniert so wie es soll
    vielen Dank
     
  4. relasragent

    relasragent Grünschnabel

    Es kommt hin und wieder vor, dass das Script probleme hat
    zumindest wenn ich es auf einer anderen Dynmap versuche

    Notice: Trying to get property of non-object in info.php on line 15 (Die foreach-Schleife)

    Warning: Invalid argument supplied for foreach() in info.php on line 15 (s.o.)

    Manchmal gehts und dann wieder nicht
     
  5. abdellaui

    abdellaui Erfahrenes Mitglied

    Ja manchmal sind eben User online und manchmal nicht :) Eine if-Abfrage vor dem foreach würde das Problem beseitigen.
     
    relasragent gefällt das.
  6. relasragent

    relasragent Grünschnabel

    das Problem tritt durchgehend auf, unabhängig ob Spieler dabei sind

    auf der Dynmap sehe ich wie 2-5 spieler lustig durch die Welt hüpfen und das script sagt es sind keine Spieler da
    beim 17. reload gibt er dann die richtige spieleranzahl an
    dann wieder keine

    deshalb ist das ja so verwirrend für mich :D
     
  7. abdellaui

    abdellaui Erfahrenes Mitglied

    Kann sein das die http://dynmap.minecraft.de/standalone/dynmap_hauptwelt.json?_=912 JSON Ausgabe gecached wird, so das die am Ende angehängte 912 ein Mechanismus gegen dem Cache ist.

    Versuche mal:
    Code (PHP):
    1. <?php
    2.     $ch = curl_init();
    3.     curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    4.     curl_setopt($ch, CURLOPT_HEADER, FALSE);
    5.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    6.    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    7.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    8.    curl_setopt($ch, CURLOPT_URL, 'http://dynmap.minecraft.de/standalone/dynmap_hauptwelt.json?_='.rand(900, 999));
    9.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);  
    10.    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0');
    11.     $data = curl_exec($ch);
    12.     curl_close($ch);
    13.    $data = json_decode($data);
    14.    echo '<pre>Users:<hr>';
    15.    if($data->players){
    16.    foreach($data->players AS $k => $v){
    17.        echo $v->account.'<hr>';
    18.    }
    19. }
    20. ?>
     
    relasragent gefällt das.
  8. relasragent

    relasragent Grünschnabel

  9. abdellaui

    abdellaui Erfahrenes Mitglied

    Bei mir auf dem localhost funktioniert es reibungslos. Kannst du eventuell dein Code kurz umändern zu:

    (Debugzweck)
    Code (PHP):
    1. <?php
    2.     $ch = curl_init();
    3.     curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    4.     curl_setopt($ch, CURLOPT_HEADER, FALSE);
    5.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    6.    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    7.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    8.    curl_setopt($ch, CURLOPT_URL, 'http://dynmap.minecraft.de/standalone/dynmap_hauptwelt.json?_='.rand(800, 999));
    9.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);  
    10.    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0');
    11.     $geted = curl_exec($ch);
    12.     curl_close($ch);
    13.    $data = json_decode($geted);
    14.    echo '<pre>Users:<hr>';
    15.    foreach($data->players AS $k => $v){
    16.        echo $v->account.'<hr>';
    17.    }
    18.    
    19.    echo 'Daten die man erhält:';
    20.    print_r($data);
    21.    
    22.    echo $geted;
    23.    echo phpinfo();
    24. ?>
     
    relasragent gefällt das.
  10. relasragent

    relasragent Grünschnabel

    Zuletzt bearbeitet: 21. März 2017
  11. abdellaui

    abdellaui Erfahrenes Mitglied

    Anscheinend liegt es am Hoster.
    https://ragent.de/info.php
    Zeigt an das man garkeine Daten erhält, daher auch die Fehlermeldung.

    Code (Text):
    1. Daten die man erhält:
    cURL ist soweit in Ordnung.
    Am Script ist soweit auch Alles in Ordnung.
    Versuche mal das Script auf einem anderem Hoster auszuführen. Wie erwähnt funktioniert es bei mir reibungslos :/
     
    relasragent gefällt das.
  12. relasragent

    relasragent Grünschnabel

    Es handelt sich um meinen vServer
    also wenn du Tipps bezüglich linux usw. hast probiere ich die gerne aus

    hättest du sonst noch alternative lösungsansätze?
     
  13. relasragent

    relasragent Grünschnabel

    vServer
    sudo apt-get upgrade
    nameserver reihnfolge geändert (den von google an erster stelle)
    reboot

    jetzt gehts
     
    Zuletzt bearbeitet: 21. März 2017
Die Seite wird geladen...