2016-05-27 11 views
0

ich einen Spiele-Server haben, und ich möchte ein einfaches PHP bauen meine Server Spieler zu bekommen, weil es keine API istPhp Parse html dom und Zielelemente

So nach einer kleinen Suche verwenden Ich habe diese Simple php DOM Parser gefunden und das ist perfekt geeignet für das, was ich tun will :)

kann sagen, mein Server Link diese Struktur

<div id="server-page-info"> 

<div class="row-tight"> 
    <div class="box span1"> 
     <header> 
      <h1>Players</h1> 
     </header> 
    </div> 
    <div class="box span1"> 
     <header> 
      <h1>Ping</h1> 
     </header> 
    </div> 
</div> 
<div class="row-tight"> 
    <div class="box span1"> 
     <section class="box-content"> 
      <h5> 
       0/64 
      </h5> 
     </section> 
    </div> 
    <div class="box span1"> 
     <section class="box-content"> 
      <h5> 
       -ms 
      </h5> 
     </section> 
    </div> 
</div> 

</div> 

Glück enthält mich, gibt es eine Reihe von Reihe dicht und Box und Box-Inhalt Klassennamen :)

so mag ich den Wert eines dieses Box-Inhalts Abschnitte erhalten, die ist zeigen 0/64 oben

Meinen php Code

Entschuldigung, ich bin ein Neuling auf PHP. Sie können auch sehen, wie ich das Element gezielt haben, aber es funktioniert nicht und ich bekomme nichts :)

require 'simple_html_dom.php'; 
$url = ''; 
$html = file_get_html($url); 

$player = $html->find('div[id=server-page-info] .row-tight:nth-child(2) .box:first-child'); 

foreach($player as $players){ 

    echo $players->plaintext; 

    } 

Ich werde auch eine weitere Frage hinzu :) Jetzt, wenn ich den Server Spieler Wert als Plain-Text erhalten ich möchte es in einem div wickeln :)

Dank

Antwort

1

Von Simple html DOM manual ich sehe nicht, dass es nth-child unterstützt, aber es unterstützt andere Syntax: $html->find('<element>', <nth-child>) .So Ihr Code wie folgt aussehen sollte:

$player = $html->find('div[id=server-page-info]')->find('.row-tight',1)->find('.box',0);

Und ich schlage vor, anstelle von Attributen # für IDs zu verwenden:

$player = $html->find('#server-page-info')->find('.row-tight',1)->find('.box',0);

UPDATE

Wenn Sie mit find('<element>', <nth-child>) nächsten find Sie müssen immer wählen nur ein Element tun wollen In Ihrem Fall: $player = $html->find('#server-page-info',0)->find('.row-tight',1)->find('.box',0);.

Ich habe Stück getestet unten und zeigt 0/64.

require 'simple_html_dom.php'; 
$html = str_get_html('<div id="server-page-info"> 
<div class="row-tight"> 
    <div class="box span1"> 
     <header> 
      <h1>Players</h1> 
     </header> 
    </div> 
    <div class="box span1"> 
     <header> 
      <h1>Ping</h1> 
     </header> 
    </div> 
</div> 
<div class="row-tight"> 
    <div class="box span1"> 
     <section class="box-content"> 
      <h5> 
       0/64 
      </h5> 
     </section> 
    </div> 
    <div class="box span1"> 
     <section class="box-content"> 
      <h5> 
       -ms 
      </h5> 
     </section> 
    </div> 
</div> 
</div>'); 
$player = $html->find('#server-page-info',0)->find('.row-tight',1)->find('.box',0); 
echo $player->plaintext; 
+0

Dank für die schnelle Antwort, aber es hat nicht funktioniert:/ – Nippledisaster

+0

@ ŢamanŞheƦzad Ich habe meine Antwort mit getesteten Lösung aktualisiert – Gvidas

+0

Danke soviel es funktioniert jetzt :) – Nippledisaster