Sys_GetURLContentEx und WWW-Reader mit Authentifizierung

Hallo.

Ich hatte mir ein kleines Skript gebastelt welches vom WebIf einer Oscam die Laufzeiten der Smartkarten ausliest und ein paar Tage vor Ablauf bescheid sagt, dass es bald wieder so weit ist sie zu verlängern.

Das WebIf der Oscam ist mit Benutzername und Passwort abgesichert. Alles kein Problem (bisher) da ich im bisher verwendeten WWW-Reader die Authentifizierung eingeschaltet und Benutzername und Passwort hinterlegt hatte.

Heute abend nun blieben die HD+ Sender dunkel ohne das ich eine Vorwarnung bekommen hatte. Also habe ich das überprüft und musste feststellen, dass der WWW-Reader ein „Access denied“ zurück meldet obwohl die Zugangsparameter stimmern (mehrfach geprüft).
Auch Sys_GetURLContentEX liefert selbiges negatives Ergebnis. Schalte ich auf der Oscam die Authentifizierung aus, so läuft auch das Skipt wieder.

Nachdem das Skript mit Authentifizierung eine ganze Weile funktioniert hat frage ich mich nun natürlich wo mein Fehler steckt. Hat jemand von Euch eine Anregung?

Hallo Chris.

Damit klappt schon mal die Authentifizierung wieder. Dafür schon mal ein dickes Danke.
Fragt sich nur warum das mit Bordmitteln nicht mehr funktioniert nachdem es schon einmal lief. :confused:

Gute Frage :smiley:

Wäre ich nicht zu doof für DOM/XPath, dann würde ich das Skript auch komplett schreiben, damit du dein Datum wieder direkt hast, aber irgendwas will hier grad nicht :rolleyes:

Grüße,
Chris

Passt schon. Ich habe durchaus Spaß am frickeln. :slight_smile:

Dann muss ich dir jetzt leider deinen Spaß „versauen“ :smiley: :stuck_out_tongue:

Ich bin von der Leitung gegangen und schon klappt es :slight_smile:

<?
$IP = "192.168.1.11";
$Port = "12345";
$Benutzername = "user";
$Passwort = "pass";
$ReaderLabel = "reader-label";

$url = "http://$IP:$Port/entitlements.html?label=$ReaderLabel&hideexpired=1";

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERPWD, "$Benutzername:$Passwort");
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_USERAGENT, 'IPS');

$page = curl_exec($curl);
$resultStatus = curl_getinfo($curl);

if($resultStatus['http_code'] == 200) {
	$dom = new DOMDocument();
	@$dom->loadHTML($page);

	$xPath = new DOMXPath($dom);

	$elements = $xPath->query('//tr[@class="e_valid"]/td[7]');
	//print_r($elements);
	foreach ($elements as $entry) {
	    //echo "NODE-VALUE:".$element->nodeValue . "
";
	    $output[] = $entry->nodeValue;
	}
	$ablaufdatum = $output[0];
	echo "ABLAUFDATUM:".$ablaufdatum;
	// HIER DEN WERT IN VARIABLE SCHREIBEN LASSEN ODER WAS AUCH IMMER
}
else {
    echo 'Call Failed '.print_r($resultStatus);
}
?>

…du darfst jetzt noch den Ablauftag herausfinden mit „$ablauftag = substr($ablaufdatum, -2, 2);“ und diesem dann gegen den aktuellen Tag „abgleichen“ (mit „$wochentag = date(„w“);“) und wenn weniger als X Tage bis Karten-Ablauf, dann Push-Nachricht oder sonstwas auslösen.

Und wenn du es hast, bitte mir schicken oder hier posten :smiley:

Grüße,
Chris

Hallo Chris.

Funktioniert soweit alles wunderbar. Danke also fürs Spaß verderben. :wink:

Einen kleinen Fehler habe ich noch gefunden. Wenn die Karte mehrere Entitlements gespeichert hat dann ist von der Laufzeit nur das letzte interessant. Die Zeile

$ablaufdatum = $output[0];

sollte daher lauten

$ablaufdatum = $output[count($output)-1];

Da ich zentrale Skripte für Sprachausgabe, Push bzw. Email habe die über eine Variable mit dem Nachrichteninhalt getriggert werden macht es wenig Sinn das Gesamtwerk hier zu posten.

Abend!

Ich hatte „$ablaufdatum = $output[0];“ als Beispiel genommen :slight_smile: Jeder hat ja unterschiedliche Karten, Entitlements, … Je nachdem was für einen interessant ist, muss man diesen Teil halt anpassen. Da reicht ja eine einfache Ausgabe per echo, um zu prüfen, ob das gewünschte Datum ausgegeben wird. Oder alternativ mit dem Browser „Element untersuchen“ machen und dann den XPath anpassen :slight_smile:

Aber freut mich, dass es klappt!

Hast du das noch eingebaut mit „X Tage vor Ablauf des Entitlements“ benachrichtigen? Oder lässt du dir einfach nur das Datum schicken?

Grüße,
Chris

Ja, ich werde 7 Tage vor Ablauf vorgewarnt.

Und wie? :slight_smile: Lass dir doch nicht alles aus der Nase ziehen :wink: :stuck_out_tongue:

Nichts wildes:


$timestamp = mktime(0,0,0,substr($ablaufdatum, 5, 2), substr($ablaufdatum, 8, 2), substr($ablaufdatum, 0, 4));
if ($timestamp - time() < 604800) {
	$echo = "Die Laufzeit Ihrer Smartcard muss erneuert werden.
";
}

Ich darf auch mal denkfaul sein :wink: :stuck_out_tongue: Danke :slight_smile:

Danke !

Und ein nicht zu hitziges wochenende!