Botprogrammierung mit PHP
Botprogrammierung mit PHP
Klingt Kompliziert, ist es aber nicht. Um einen Stream eines Chats auszulesen sollte man ihn wie eine Datei handhaben. Dateien öffnet man normalerweise mit fopen, dies sollte man aber vermeiden, weil man mit fopen keine Header übermitteln und keine Ports definieren kann.
Wie öffene ich eine Socketverbindung? (Erklärung anhand eines Cassiopeia Chats [www.funonline.de])
$fp = fsockopen ("www.funonline.de", 8081, &$errno, &$errstr);
// legt eine Socketverbindung zu www.funonline.de am Port 8081 an.
fputs($fp, "GET /NEW?nick=$nick&sessionid=$sessionid&nh=0 HTTP/1.0\n
Connection: Keep-Alive\nUser-Agent: Mozilla/4.04 [en]
(Win2001; I)\n Host: 193.102.7.16\nAccept: *\/*\n\n");
// Fordert die Daten vom Outputfenster an und
// täuscht gleichzeitig den Mozilla/Netscape Browser vor
while (!feof($fp)) // liest den Stream zeilenweise aus
{
$zeile = fgets($fp,256);
// liest die ersten 256 Zeichen der Zeile aus
echo $zeile; flush();
// gibt die eigelesenen Daten sofort aus
$nohtml = strip_tags($zeile); // entfernt die HTML Tags
if(eregi("hallo", $nohtml)) // Reaktion, wenn jemand "Hallo" sagt
{
$text = urlencode("Hallo wie gehts?");
// der Ausgabetext muss mit Urlencode verschlüsselt werden
$text = trim($text);
// Nicht sichbare Zeichen am Anfang und Ende des Strings werden entfernt
$finput = fsockopen ("www.funonline.de", 8081, &$errno, &$errstr);
// öffnet eine neue Socketverbindung für den Input
fputs ($finput, "GET /MSG?nick=$nick&input=$text&sessionid=$sessionid HTTP/1.0\n\n");
// sendet "Hallo wie gehts?"
fclose($finput); // die Socketverbindung für den Input wird geschlossen
usleep(500000); // Verzögerung von 0,5 Sekunden
}
}
fclose($fp);
Hier sehen Sie nun ein lauffähigen Bot, der jedesmal, wenn jemand "Hallo" sagt mit "Hallo wie gehts?" reagiert. Die Voraussetzungen für diesen Bot sind eigentlich nur ein Apache Webserver mit PHP als Modul eingebunden. Aufrufen würde man den Bot anschließend mit: http://localhost/bot.php?nick=deinickname&sessionid=deinesessionid
Klingt Kompliziert, ist es aber nicht. Um einen Stream eines Chats auszulesen sollte man ihn wie eine Datei handhaben. Dateien öffnet man normalerweise mit fopen, dies sollte man aber vermeiden, weil man mit fopen keine Header übermitteln und keine Ports definieren kann.
Wie öffene ich eine Socketverbindung? (Erklärung anhand eines Cassiopeia Chats [www.funonline.de])
$fp = fsockopen ("www.funonline.de", 8081, &$errno, &$errstr);
// legt eine Socketverbindung zu www.funonline.de am Port 8081 an.
fputs($fp, "GET /NEW?nick=$nick&sessionid=$sessionid&nh=0 HTTP/1.0\n
Connection: Keep-Alive\nUser-Agent: Mozilla/4.04 [en]
(Win2001; I)\n Host: 193.102.7.16\nAccept: *\/*\n\n");
// Fordert die Daten vom Outputfenster an und
// täuscht gleichzeitig den Mozilla/Netscape Browser vor
while (!feof($fp)) // liest den Stream zeilenweise aus
{
$zeile = fgets($fp,256);
// liest die ersten 256 Zeichen der Zeile aus
echo $zeile; flush();
// gibt die eigelesenen Daten sofort aus
$nohtml = strip_tags($zeile); // entfernt die HTML Tags
if(eregi("hallo", $nohtml)) // Reaktion, wenn jemand "Hallo" sagt
{
$text = urlencode("Hallo wie gehts?");
// der Ausgabetext muss mit Urlencode verschlüsselt werden
$text = trim($text);
// Nicht sichbare Zeichen am Anfang und Ende des Strings werden entfernt
$finput = fsockopen ("www.funonline.de", 8081, &$errno, &$errstr);
// öffnet eine neue Socketverbindung für den Input
fputs ($finput, "GET /MSG?nick=$nick&input=$text&sessionid=$sessionid HTTP/1.0\n\n");
// sendet "Hallo wie gehts?"
fclose($finput); // die Socketverbindung für den Input wird geschlossen
usleep(500000); // Verzögerung von 0,5 Sekunden
}
}
fclose($fp);
Hier sehen Sie nun ein lauffähigen Bot, der jedesmal, wenn jemand "Hallo" sagt mit "Hallo wie gehts?" reagiert. Die Voraussetzungen für diesen Bot sind eigentlich nur ein Apache Webserver mit PHP als Modul eingebunden. Aufrufen würde man den Bot anschließend mit: http://localhost/bot.php?nick=deinickname&sessionid=deinesessionid
|