Willkommen in der Webstatt Zum Webstatt Blog und Stories
nuit nuit am 07.10.06 23:45

Bisher nur neuer Thread und neuer Post....man muss das forum bzw. den thread wissen um einen neuen post hinzuzufügen...er sucht noch nicht raus...vielleicht bau ich das noch ein...weiss ich aber noch nicht.

imo wird er bei mir gebraucht um Vertretungen an unserer Schule automatisch in ein phpBB forum zu schreiben.

Um diesen Bot zu benutzen brauch man allerdings einen Benutzernamen, nachdem er sich einloggt.

das LWP Modul hab ich absichtlich nicht benutzt. Und nachdem das Socket modul standard ist, kann dieses Script überall ausgeführt werden.

wenn ich die Zeit finde, wird das ganze noch oo programmiert *g* hatte mich auch shcon mit artemis unterhalten *g* anfänge sind da...
bisher sind es ja nur zusammengestückelte subs mit globalen variablen...also nicht schön gemacht...es funktioniert aber ;D

Hier das grobe script:
#!/usr/bin/perl
use Socket;

my $sid='';
my $base = 'http://ihredomain.de/phpbb/';
my $username = 'username';
my $password = 'password';

sub GrabURL {
my $method = $url = $post = $additionalHeader = $content = '';

$method = shift;
$url = shift;
$post = shift;

$url =~ s/^http:\/\///i;

my ($host, $res) = $url =~ m/^(.+?)(\/.*)/;
return unless defined($host) && defined($res);

if($method eq 'GET') {
$method = 'GET';
#$url = $url."?".$post;
} else {
$method = 'POST';
$additionalHeader = "Content-Type: application/x-www-form-urlencoded\r\nContent-Length: ".length($post)."\r\n";
$content = $post;
}

my $r =
$method." $res HTTP/1.0\r\n" .
"Host: $host\r\n" .
$additionalHeader .
"\r\n" .
$content .
"\r\n";
#print $r."\n";
my $port = 80;
if($host =~ m/(.*):(\d+)$/){ $host = $1; $port = $2;}

my $internet_addr = inet_aton($host) or return;
socket(Server, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or return;
setsockopt(Server, SOL_SOCKET, SO_RCVTIMEO, 10000);

connect(Server, sockaddr_in($port, $internet_addr)) or return;
select((select(Server), $| = 1)[0]);
print Server $r;

my $answer = join '', <Server>;
close (Server);

return $answer;
}

sub URLEncode {
my $theURL = $_[0];
$theURL =~ s/([\W])/"%" . uc(sprintf("%2.2x",ord($1)))/eg;
return $theURL;
}

sub connect {
my $username = shift;
my $password = shift;

my $content = 'username='.&URLEncode($username).'&password='.&URLEncode($password).'&redorect=&login=Login&autologin=';

$res = &GrabURL('POST',$base.'login.php',$content);
$res =~ m/Location: index\.php\?sid=(.*?)\n/i;

$sid = $1;

return $1;
}

sub newThread {
my $forum = shift;
my $subject = shift;
my $text = shift;

my $content = 'mode=newtopic&f='.$forum.'&preview=Vorschau&post=Absenden&subject='.&URLEncode($subject).'&message='.&URLEncode($text).'&disable_html=&disable_bbcode=&disable_smilies=&notify=&topictype=0';

$res = &GrabURL('POST',$base.'posting.php?sid='.$sid,$content);

return 1;
}

sub newPost {
my $thread = shift;
my $subject = shift;
my $text = shift;

my $content = 'mode=reply&t='.$thread.'&preview=Vorschau&post=Absenden&subject='.&URLEncode($subject).'&message='.&URLEncode($text).'&disable_html=&disable_bbcode=&disable_smilies=&notify=';

$res = &GrabURL('POST',$base.'posting.php?sid='.$sid,$content);

return true;
}



#------------- Usage --------------#

&connect($username,$password);
&newThread(<forum id>,'<der Titel>','<der Text>');
&newPost(<thread id>,'<der Titel>','<der Text>');

netcup.de Warum gibt es hier Werbung?
Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt