Heute hatte ich den Wunsch, die Inhalte eines kleinen Forums als RSS-Feed anzubieten. Die Umwandlung der Daten in RSS ging mittels Regular Expressions recht einfach, jedoch liegen die Seiten des Forums hinter einer Login-Seite, die Benutzernamen und Passwort in einem HTML-Formular abfragt. Danach wird ein Cookie gesetzt und die Forumsseiten sind zugänglich. Wie kann ich diesen Login-Vorgang nun mit PHP in einem Script durchführen, dass dann per Cronjob automatisch aufgerufen wird?
Eigentlich recht einfach mittels curl. Zunächst gilt es, die Packages zu installieren:
apt-get install curl php5-curl
Danach sollte das folgende Script laufen und die Forenseiten jeweils als HTML-Datei abspeichern:
-
// die Foren werden über eine einheitliche URL aufgerufen,
-
// die lediglich den Parameter ID bekommt
-
$url = "http://adresse.des.forums/forum.php?id=";
-
// die Foren sollen als HTML-Datei abgelegt werden,
-
// um später geparst zu werden
-
"123" => "Forum123.htm",
-
"234" => "NochEinForum.htm"
-
);
-
$curl = curl_init();
-
curl_setopt($curl, CURLOPT_HEADER, 0);
-
curl_setopt($curl, CURLOPT_POST, true);
-
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
-
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
-
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
-
// diese Datei wird zum Speichern des Cookies verwendet
-
curl_setopt($curl, CURLOPT_COOKIEFILE, "cookiefile");
-
curl_setopt($curl, CURLOPT_COOKIEJAR, "cookiefile");
-
// der Aufruf der Login-Seite
-
curl_setopt($curl, CURLOPT_URL, "http://adresse.des.forums/login.php");
-
// hier müssen die Benutzerdaten eingetragen werden
-
curl_setopt($curl, CURLOPT_POSTFIELDS, "login=Benutzername&passwort=geheim");
-
$xxx = curl_exec($curl);
-
foreach ($ids as $id=>$name)
-
{
-
// hier wird die URL des Forums zusammengesetzt
-
curl_setopt($curl, CURLOPT_URL, $url . $id);
-
$xxx = curl_exec($curl);
-
}
-
curl_close ($curl);
Nun noch den ganzen Kram in die /etc/crontab eingetragen und es kann losgehen (jede dritte Stunde werden die Seiten geladen):
0 */3 * * * root /pfad/zum/script/getPages.php











