Auslesen der Webseite

Guten Morgen
Ich versuche schon längere Zeit, diese Seite https://lagerhaus.at/p/678792/genol-holzpellets-15kg#detailed-product-info auszulesen. Interessant ist im Grunde nur der Preis.
Gibt es Tips wie ich das am einfachsten bewerkstelligen kann?

Hier findest du den Preis: https://lagerhaus.at/jsapi/v2/products/678792?fields=FULL
Du scheinst erst ein JSON zu bekommen in dem JSON ist ein XML String und darin findest du den Preis.
Wenn du nicht weiterkommst, kann ich dir ein Script schreiben.

Grüße,
Kai

grafik

wenn die Class immer gleich bleibt durch das erzeugende Shopsystem, dann kannst du es versuchen, wenn nicht, hast du glaube ich keine Chance.

Mit CURL oder fileget in einen String holen und

$string = get_mark(‚

519
‘*‚‘);

und etwas nacharbeiten :wink: .

// Diese Funktion trennt die relevanten Bereiche aus dem Ausschnitt heraus $string ist dabei der zu durchsuchende Gesamtstring,
// in $Mark sind durch "*" getrennt der Beginn des zu suchenden Strings und das Ende des zu suchende Abschnittes. Beispiel für den Text "<div>*</div></li>"
function get_mark($string,$mark) {
	$ausgabe = array();
	$template = explode("*",$mark);
	$mark = $template[0];
	$end = $template[1];
	$string = strstr($string,$mark);
	$temp = explode($mark,$string);
	$a = 1;
	foreach ($temp as $tempx) {
		$tempx = explode($end,$tempx);
		$tempx = $tempx[0];
		if ($tempx) {
			array_push ($ausgabe,$tempx);
		}
	}
	return $ausgabe;
}

Das ist natürlich viel hübscher und einfacher :smiley: .

Super danke. Wo hast du die URL her?
@ralf danke auch dir. Kosten die bei dir nur 5,19?

Du kannst mit dem Browser die Webseite untersuchen, da habe ich mal ein wenig gesucht.

Grüße,
Kai

grafik
Ich musste irgendeinen Ort wählen und habe Gerasdorf genommen.

Ja, die 5,19 bekomme ich auch im Json

["price"]=>
  array(8) {
    ["currencyIso"]=>
    string(3) "EUR"
    ["formattedValue"]=>
    string(4) "5,19"
    ["fromPrice"]=>
    bool(false)
    ["highlight"]=>
    bool(false)
    ["priceType"]=>
    string(3) "BUY"
    ["referencePrice"]=>
    string(4) "0,35"
    ["referenceUnit"]=>
    string(11) "1 Kilogramm"
    ["value"]=>
    float(5.19)
  }
  ["priceInfo"]=>
  array(6) {
    ["currencyIso"]=>
    string(3) "EUR"
    ["value"]=>
    string(4) "5.19"
    ["fromPrice"]=>
    bool(false)
    ["highlight"]=>
    bool(false)
    ["referencePrice"]=>
    string(4) "0,35"
    ["referenceUnit"]=>
    string(11) "1 Kilogramm"
  }

Bei mir kosten 5,40…
image

Sag mit mal deine PLZ, ich gucke dann mal nach der rirchtigen Adresse für dich.

Grüße,
Kai

3511 Furth bei Göttweig
image

Anscheinend bleibt dir URL gleich, du musst nur auf der Webseite den richtigen Ort einstellen, also auf deinem Symcon PC. :smiley:

Grüße,
Kai

Danke für die Mühen. Das hab ich auch schon gemacht. Hilft aber irgendwie nicht… Ich schätze das hat mit dem/den Cookie(s) zu tun.
Ich habe bei mir lokal mal alle für diese Seite gelöscht und in der Konsole mitgeschaut, was gemacht wird. Da hab ich das gefunden https://lagerhaus.at/jsapi/locations/1341/full?setLocationCookie=true und in eine curl eingebaut. Ändert auch nix.

Das habe ich auch gerade gemacht, wenn ich das bei mir direkt aufrufe, dann ändert er den Standort.
Hast du das direkt vor dem Aufrum im Script versucht?

Du musst den Cookie bestimmt bei der nächsten Abfrage über URL mitgeben.

Grüße,
Kai

Mein Test-Skript schaut derzeit so aus. Recht wild weil ich einiges probiert habe. Sämtliche URL’s werden vor der eigentlichen Produkanzeige aufgerufen. Ich habe es Schritt für Schritt von hinten nach vorne eingefügt. Daher ist es so, wie es ist.

<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://lagerhaus.at/jsapi/locations/find/full?distance=1000&lat=48.374646&localPickupOption=true&lon=15.6131886&size=');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

curl_setopt($ch, CURLOPT_URL, 'https://lagerhaus.at/jsapi/locations/1341/full');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

curl_setopt($ch, CURLOPT_URL, 'https://lagerhaus.at/jsapi/locations/1341');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

curl_setopt($ch, CURLOPT_URL, 'https://lagerhaus.at/jsapi/v2/catalogs/categories/Category_000529');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

curl_setopt($ch, CURLOPT_URL, 'https://lagerhaus.at/jsapi/locations/1341/full?setLocationCookie=true');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

curl_setopt($ch, CURLOPT_URL, 'https://lagerhaus.at/jsapi/v2/products/678792?fields=FULL');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);
$daten=json_decode($result,true);
var_dump($daten["price"]);
curl_close($ch);

Ein Cookie über die URL?

Ich habs. :wink:

<?php

$ch = curl_init('https://lagerhaus.at/jsapi/locations/1341/full?setLocationCookie=true');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$result = curl_exec($ch);
preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $result, $matches);
$cookies = array();
foreach($matches[1] as $item) {
    parse_str($item, $cookie);
    $cookies = array_merge($cookies, $cookie);
}
$cookie = http_build_query($cookies, null, ';');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://lagerhaus.at/jsapi/v2/products/678792?fields=FULL');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Cookie: $cookie"));
$result = curl_exec($ch);
$daten=json_decode($result,true);
print_r($daten['price']);

Grüße,
Kai

Wow, geil. Vielen Dank :slight_smile: Dann kann ich mir den Preismonitor einbauen.