Kategorien
FreewarWiki:Bot/Skripts/forum crawler.php: Unterschied zwischen den Versionen
< FreewarWiki:Bot | Skripts
SniGG (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „<pre> <?php setlocale(LC_ALL, 'de_DE.utf8'); //wichtig! wird für strptime benötigt!; $page_cache = include_once('PageTitles.php'); //enthält Seitentitel $…“) |
Galak (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
||
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt) | |||
Zeile 18: | Zeile 18: | ||
for($i = 0; $i < count($data[0]); $i++) { | for($i = 0; $i < count($data[0]); $i++) { | ||
$desc = | $desc = preg_split("(.\s?|\.\s?)", $data[4][$i])[0]."."; //kürze Beschreibungstexte auf 1 Satz; Forum-SW verkackt den Punkt; | ||
$desc = str_replace("</a>", "", preg_replace("/<a.*?>/", "", preg_replace("<img.*\/>", "", utf8_decode($desc)))); | |||
// copy paste | // copy paste | ||
Zeile 56: | Zeile 57: | ||
*/ | */ | ||
$date = strptime(trim(utf8_decode($data[3][$i])), "%d. %B %Y, %H:%M"); //wandle Forenzeit um; | $date = strptime(trim(utf8_decode($data[3][$i])), "%d. %B %Y, %H:%M"); //wandle Forenzeit um; | ||
$date = str_pad($date[tm_mday], 2, '0', STR_PAD_LEFT).".".str_pad($date[tm_mon] +1 , 2, '0', STR_PAD_LEFT).".".($date[tm_year] +1900); //stelle Wiki-Zeit her; | $date = str_pad($date['tm_mday'], 2, '0', STR_PAD_LEFT).".".str_pad($date['tm_mon'] +1 , 2, '0', STR_PAD_LEFT).".".($date['tm_year'] +1900); //stelle Wiki-Zeit her; | ||
$title = utf8_decode(preg_replace("#(\[.*?\])#", "", $data[2][$i])); //entferne [W1*]-Markierung | $title = utf8_decode(preg_replace("#(\[.*?\])#", "", $data[2][$i])); //entferne [W1*]-Markierung |
Aktuelle Version vom 18. Januar 2016, 20:50 Uhr
<?php setlocale(LC_ALL, 'de_DE.utf8'); //wichtig! wird für strptime benötigt!; $page_cache = include_once('PageTitles.php'); //enthält Seitentitel $from_page = 1; //Startseite im AK-Forum $to_page = 127; //letzte Seite im AK-Forum $static_link = "http://forum.freewar.de/viewtopic.php?f=8"; //Link zum AK-Forum $text = ""; for($page = $from_page; $page <= $to_page; $page++) { $start = ($page - 1) * 15; //uneingeloggt 15 Threads pro Seite $forum_page = file_get_contents("http://forum.freewar.de/search.php?st=0&sk=t&sd=d&sr=posts&terms=any&author=Sotrax&fid[]=8&sf=firstpost&start=".$start); //filtert Posts nach Sotrax $forum_page = utf8_encode(trim(preg_replace('/\s+/', ' ', $forum_page))); preg_match_all('#viewtopic\.php\?f=8(.*?)">(.*?)<.*?Verfasst:<\/b>(.*?\d+:\d+)&.*?postbody">(.*?)<\/td#',$forum_page,$data); //kompliziertes Bwoebi-Futter for($i = 0; $i < count($data[0]); $i++) { $desc = preg_split("(.\s?|\.\s?)", $data[4][$i])[0]."."; //kürze Beschreibungstexte auf 1 Satz; Forum-SW verkackt den Punkt; $desc = str_replace("</a>", "", preg_replace("/<a.*?>/", "", preg_replace("<img.*\/>", "", utf8_decode($desc)))); // copy paste //setze alle bekannten Artikel aus dem Artikel-Cache $page_cache ein; //$page_cache wird mittels AllPagesBot.php generiert; //es werden nur solche Wörter betrachtet, die mehr als 3 Zeichen haben; $explosion = explode (" ", $desc); for($e = 0; $e < count($explosion); $e++) { $token = $explosion[$e]; $flag = false; if(substr($token, -1) === ":") { //Überprüfung ob mehrteiliger Name $token .= " ".$explosion[$e+1]; $flag = true; } if(strlen($token) > 3 && in_array($token, $page_cache)) { $token = "[[" . $token . "]]"; } elseif(strlen($token) > 3 && in_array(substr($token, 0, -1), $page_cache)) { //entferne Satzzeichen, Plural "s" und sonstige einzelne Zeichen, die einen Artikel unauffindbar machen würden; $token = "[[" . substr($token, 0, -1) . "]]" . substr($token, -1); } $explosion[$e] = $token; if($flag) { $e++; $explosion[$e] = ""; } } $desc = implode(" ", $explosion); //copy paste ende $link = preg_replace("#&sid=.*#","",$data[1][$i]); //sid entfernen /* * Da das Forum die Zeitangabe im deutschen Format ausgibt, funktioniert strtotime() nicht. * strptime() nutzt setlocale(), ist allerdings unter Windows NICHT implementiert. * strptime() hat auch ein anderes Format als date(), daher die Umrechnung. * Außerdem werden die leading zeros noch angefügt. */ $date = strptime(trim(utf8_decode($data[3][$i])), "%d. %B %Y, %H:%M"); //wandle Forenzeit um; $date = str_pad($date['tm_mday'], 2, '0', STR_PAD_LEFT).".".str_pad($date['tm_mon'] +1 , 2, '0', STR_PAD_LEFT).".".($date['tm_year'] +1900); //stelle Wiki-Zeit her; $title = utf8_decode(preg_replace("#(\[.*?\])#", "", $data[2][$i])); //entferne [W1*]-Markierung $text .= "|$date||[$static_link$link $title]||$desc\n|-\n"; } } echo trim($text);