franc: Value eines Attributs aus einem Element parsen

Beitrag lesen

da musst du dann schon DOM-Methoden bemühen.

Also kann ich mein Ziel mit dem Simple HTML DOM Parser nicht erreichen?
Was für Tools gibt es für meine Zwecke denn dann?

Es ist also dann doch viel einfacher, den Simple HTML DOM Parser braucht man gar nicht, sondern tatsächlich DOM-Methoden:

The DOMElement class

So funktioniert es, ein Beispiel:

  
<?php  
  
// Sucht aus einer Webseite einen bestimmten Wert eines Attributes, wenn der Tag und ein Attribut-Wert-Paar bekannt ist.  
//  
// Beispiel: Im Market soll fuer die App SlideIT (also Webseite von SlideIT im Market = $website) der aktuelle Preis geholt werden.  
// Hierzu wird aus dem $tagname "meta" soll der $searchvalue (Wert) von "content" geholt werden,  
// bekannt ist $attribute "itemprop" und dessen $value "price".  
// <meta itemprop="price" content="4,57 €" />4,57 €  
//  
// Aufrufbeispiel:  
// http://example.org/pricealarm.php?tagname=meta&attribute=itemprop&value=price&searchattribute=content&trigger=1.0  
  
$tagname = $_GET["tagname"];  
$attribute =  $_GET["attribute"];  
$value = $_GET["value"];  
$searchattribute = $_GET["searchattribute"];  
$website = $_GET["website"];  
$email = $_GET["email"];  
// mit trigger loest man ein mail (noch nicht implementiert) aus, wenn der Wert unterhalb des Wertes trigger liegt.  
$trigger = $_GET["trigger"];  
  
if ($tagname == "")  
    $tagname = "meta";  
  
if ($attribute == "")  
    $attribute = "itemprop";  
  
if ($value == "")  
    $value = "price";  
  
if ($searchattribute == "")  
    $searchattribute = "content";  
  
if ($website == "")  
{  
    $content = file_get_contents('https://play.google.com/store/apps/details?id=com.dasur.slideit&feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5kYXN1ci5zbGlkZWl0Il0.');  
}  
else  
{  
    $content = file_get_contents($website);  
}  
  
if ($email == "")  
    $email = "my@email.org";  
  
if ($trigger == "")  
    $trigger = 2.0;  
  
$doc = new DOMDocument();  
$doc->recover = true;  
$doc->strictErrorChecking = false;  
@$doc->loadHTML($content);  
  
$tags_ammount = $doc->getElementsByTagName($tagname)->length;  
  
for ($i = 0; $i < $tags_ammount; $i++) {  
  
    if ($doc->getElementsByTagName($tagname)->item($i)->getAttribute($attribute) == $value)  
    {  
        $pricefield = $doc->getElementsByTagName($tagname)->item($i)->getAttribute($searchattribute);  
  
        preg_match('/(\d+\,\d{2})/i', $pricefield, $pureprice);  
  
        echo "Der aktuelle Preis ist: {$pureprice[1]}\n";  
  
        if ($price <= $trigger)  
        {  
            // ToDo: email senden mit aktuellem Preis  
        }  
        exit;  
    }  
}  
  
?>  

Das ist noch nicht fertig und sicher holprig programmiert aber im Prinzip funktioniert es so.
Mailfunktionalität muss man dann noch einbinden mit der Mail-Bibliothek für PHP, usw.

franc