• Willkommen im Forum „Wetterstationsforum.info - Archiv“.
 

Neuigkeiten:

Dieses Forum dient ausschließlich zu Archivzwecken.
Für Fragen nutze bitte unser aktuelles Forum, welches du unter https://wetterstationsforum.info findest.

Hauptmenü

benötige PHP-Hilfe: "Wenn Link nicht erreichbar, dann...."

Begonnen von Wetterfrosch1971, 25.05.2017, 22:27:11

⏪ vorheriges - nächstes ⏩

Wetterfrosch1971

#10
Hallo Falk,

das hört sich vernünftig an, doch leider kenne ich mich programmiertechnisch da viel zu wenig aus, ich weiß nicht wie man so ein cron-job programmiert.

Für eine andere Unterseite meiner Webseite hat mir Jemand mal etwas programmiert, da wird auch ein fremder Inhalt irgendwie per curl abgerufen und dann in einen Cache gelegt, so dass dieser Abruf nur alle 10 Minuten getätigt wird, d.h. wird meine Unterseite aufgerufen und die Datei ist keine 10 Minuten alt, wird der externe Link nicht erneut abgefragt sondern der Inhalt aus dem Cache genommen.

Könnte man dies auch für mein jetziges Problem verwenden?

Gruß Frank

TheWeatherMan

#11
Ich glaube, dass Frank den Inhalt der URL herunterladen will, damit er ihn anschließend parsen und die Messwerte in einer Datenbank abspeichern kann. Das fertige Skript muss er natürlich automatisiert per Cronjob aufrufen.

Die Selektion kannst Du mit einer einfachen if-Abfrage machen:

if ($content = get_content("http://185.70.220.40/astart.php?sn=&key=&nopic")){
// ...
} else if ($content = get_content("http://www.weatherlink.com/user/hcrb/index.php?view=main&headers=1")){
// ...
} else {
// Beide URLs sind nicht erreichbar
}


Edit: Code optimiert, siehe Hinweis von Alloc
Private Wetterstation Schenkenzell
https://www.wetter-schenkenzell.de

klaus289

Mir scheint ein klassischer Fall von "Babylon".
Deswegen wird es wohl auch nichts konkretes. ;)

Wetterfrosch1971

@TheWeatherman,

genau, ich ziehe aus den Links den Messwert der Temperatur heraus.

Kann ich das Script, so wie du mir es geschrieben hast, nun anstatt meines Scriptes mit "file()" einsetzen?

Und wie macht man dann daraus noch eine Abfrage per Cronjob?
Wenn ich keine Ahnung von Cronjob habe, ist dies dennoch für mich als Leihe umsetzbar?

@Klaus

Babylon?

Gruß Frank

klaus289

Hallo Frank,

bist wohl in der antiken Geschichte nicht so bewandert? ;)
Stichwort: "Babylonisches Sprachengewirr".

Alle reden munter auf dich ein und du verstehst keinen Daut. ;)

Ich bekomme da echt "Krämpfe".

Melde dich bitte mal bei mir.


TheWeatherMan

#16
Der folgende Code ist äquivalent zu Deiner Lösung. Du musst nur noch jeweils den Code zum Parsen des Inhalts einfügen. get_content liefert nun den Inhalt zeilenweise als Array zurück (wie die PHP-eigene Funktion file).


if ($lines = get_content("http://185.70.220.40/astart.php?sn=&key=&nopic")){
// Restlicher Code um diesen Inhalt zu parsen
// ...
} else if ($lines = get_content("http://www.weatherlink.com/user/hcrb/index.php?view=main&headers=1")){
// Restlicher Code um diesen Inhalt zu parsen
// ...
} else {
// Beide URLs sind nicht erreichbar
}


function get_content ($url){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
$data = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curl_errno = curl_errno($ch);
curl_close($ch);
if ($http_code == 200 && $curl_errno == 0){
return explode("\n", $data);
} else {
return false;
}
}


Edit: Code optimiert, siehe Hinweis von Alloc
Private Wetterstation Schenkenzell
https://www.wetter-schenkenzell.de

Alloc

Zitat von: TheWeatherMan am 28.05.2017, 12:28:26
if (get_content("http://185.70.220.40/astart.php?sn=&key=&nopic")){
$lines = get_content("http://185.70.220.40/astart.php?sn=&key=&nopic");
// Restlicher Code um diesen Inhalt zu parsen
// ...
} else if (get_content("http://www.weatherlink.com/user/hcrb/index.php?view=main&headers=1")){
$lines = get_content("http://www.weatherlink.com/user/hcrb/index.php?view=main&headers=1");
// Restlicher Code um diesen Inhalt zu parsen
// ...
} else {
// Beide URLs sind nicht erreichbar
}


Bitte auf keinen Fall so, wenn die anderen Server nicht deine eigenen sind, da das die Last dort nochmal verdoppelt.

Ich weiss nicht, ob PHP Variablen direkt in einer Expression deklarieren kann, dann waere die kurze Version so:

if ($lines = get_content("http://185.70.220.40/astart.php?sn=&key=&nopic")){
// Restlicher Code um diesen Inhalt zu parsen
// ...
} else if ($lines = get_content("http://www.weatherlink.com/user/hcrb/index.php?view=main&headers=1")){
// Restlicher Code um diesen Inhalt zu parsen
// ...
} else {
// Beide URLs sind nicht erreichbar
}


Wenn das nicht geht dann etwas laenger:

$lines = get_content("http://185.70.220.40/astart.php?sn=&key=&nopic");
if ($lines){
// Restlicher Code um diesen Inhalt zu parsen
// ...
} else {
$lines = get_content("http://www.weatherlink.com/user/hcrb/index.php?view=main&headers=1");
if ($lines) {
// Restlicher Code um diesen Inhalt zu parsen
// ...
} else {
// Beide URLs sind nicht erreichbar
}
}


Gruesse,
Chris

Wetterfrosch1971

@Alloc

kannst du mir kurz sagen, wie ich die if-Abfrage umgekehrt machen kann, also bei diesem Code heißt es ja wenn $lines ein Ergebnis liefert führe if-Bedingung aus, ansonsten else


$lines = get_content("http://185.70.220.40/astart.php?sn=&key=&nopic");
if ($lines){


wie muss ich das "if($lines) aber schreiben wenn die if-Bedingung erfüllt werden soll, wenn $lines KEIN Ergebnis liefert, kann ich das so machen


if($lines == '')


?


Alloc

if (!$lines)
Aber warum ueberhaupt? Du willst doch mit dem Ergebnis was anfangen, dafuer waere dann der erste Block der if-Anweisung vorhanden, und genauso im Fehlerfalle bei der inneren if-Anweisung.