FreewarWiki:Bot/Skripts/rss feed.php: Unterschied zwischen den Versionen

aus FreewarWiki, der Referenz für Freewar
Zur Navigation springen Zur Suche springen
K (- Tabellenanfang/Ende, sollte per Vorlage erzeugt werden)
(danke an Bwobebi bei der Regex Hilfe ; mehrteilige Wörter werden jetzt korrekt erkannt)
 
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:
<?php
<?php
$page_cache = include_once('PageTitles.php'); //enthält Seitentitel, die mit AllPagesBot.php generiert werden;
$page_cache = include_once('PageTitles.php'); //enthält Seitentitel, die mit AllPagesBot.php generiert werden;
function feed($page_cache) {
function feed($page_cache, $last_timestamp = 0) {
$feed = file_get_contents("http://forum.freewar.de/feed.php?mode=news"); //lade RSS-Feed
$feed = file_get_contents("http://forum.freewar.de/feed.php?mode=news"); //lade RSS-Feed
$feed = trim(preg_replace('/\s+/', ' ', $feed)); //entferne alle neuen Zeilen
$feed = trim(preg_replace('/\s+/', ' ', $feed)); //entferne alle neuen Zeilen
preg_match_all("#<updated>(.*?)<\/updated>.*?<id>(.*?)</id>.*?<title type=\"html\"><!\[CDATA\[(.*?)\]\]><\/title>.*?<!\[CDATA\[(.*?)(<p>|<br \/>)#", $feed, $data); //kompliziertes Bwoebi-Futter
preg_match_all("#<updated>(.*?)<\/updated>.*?<link href=\"(.*?)\".*?<title type=\"html\"><!\[CDATA\[(.*?)\]\]><\/title>.*?<!\[CDATA\[(.*?)(<p>|<br \/>)#", $feed, $data); //kompliziertes Bwoebi-Futter


        $text = "";
$text = "";
$count = count($data[0]);
$count = count($data[0]);
for($i = 0; $i < $count; $i++) {
$news = 0;
        $desc = explode(".", $data[4][$i])[0]."."; //kürze Beschreibungstexte auf 1 Satz
for($i = 0; $i < $count; $i++) {
$news_timestamp = strtotime($data[1][$i]);
if($news_timestamp < $last_timestamp)
break;
$desc = preg_split("(&#46;\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.*\/>", "", $desc)));
 
//setze alle bekannten Artikel aus dem Artikel-Cache $page_cache ein;
//setze alle bekannten Artikel aus dem Artikel-Cache $page_cache ein;
//$page_cache wird mittels AllPagesBot.php generiert;
//$page_cache wird mittels AllPagesBot.php generiert;
//es werden nur solche Wörter betrachtet, die mehr als 3 Zeichen haben;
//es werden nur Wörter betrachtet, die mindestens 4 Zeichen lang sind
$explosion = explode (" ", $desc);
foreach($page_cache as $cache) {
for($e = 0; $e < count($explosion); $e++) {
if(strlen($cache) < 4)
$token = $explosion[$e];
continue;
$flag = false;
$desc = preg_replace("#\[\[.+?]](*SKIP)(*FAIL)|$cache#", "[[$cache]]", $desc);
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);
//trenne Wörter von Satzzeichen
$explosion = str_replace(",", " , ",  str_replace(".", " . ",  str_replace("!", " ! ",  str_replace("?", " ? ", $desc))));
 
//füge Satzzeichen wieder hinzu und Wörter zusammen
$desc = str_replace(" , ", ", ",  str_replace(" . ", ". ",  str_replace(" ! ", "! ",  str_replace(" ? ", "? ", $desc))));
$title = preg_replace("#(\[.*?\])#", "", $data[3][$i]); //entferne [W1*]-Markierung
$title = preg_replace("#(\[.*?\])#", "", $data[3][$i]); //entferne [W1*]-Markierung
$text .= "|".date("d.m.Y",$news_timestamp)."||[".$data[2][$i]." ".$title."]||".$desc."\n|-\n";
$text .= "|".date("d.m.Y",strtotime($data[1][$i]))."||[".$data[2][$i]." ".$title."]||".$desc."\n|-\n";
 
}
$news++;
return array($count,$text); //als Klasse wäre das sicher schöner :')
}
$text = trim($text);
return array($news,$text); //als Klasse wäre das sicher schöner :')
}
}
</pre>

Aktuelle Version vom 7. Februar 2016, 20:33 Uhr

<?php
$page_cache = include_once('PageTitles.php'); //enthält Seitentitel, die mit AllPagesBot.php generiert werden;
function feed($page_cache, $last_timestamp = 0) {
	$feed = file_get_contents("http://forum.freewar.de/feed.php?mode=news"); //lade RSS-Feed

	$feed = trim(preg_replace('/\s+/', ' ', $feed)); //entferne alle neuen Zeilen
	
	preg_match_all("#<updated>(.*?)<\/updated>.*?<link href=\"(.*?)\".*?<title type=\"html\"><!\[CDATA\[(.*?)\]\]><\/title>.*?<!\[CDATA\[(.*?)(<p>|<br \/>)#", $feed, $data); //kompliziertes Bwoebi-Futter

	$text = "";
	$count = count($data[0]);
	$news = 0;
	for($i = 0; $i < $count; $i++) {
		$news_timestamp = strtotime($data[1][$i]);
		if($news_timestamp < $last_timestamp)
			break;
		
		$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.*\/>", "", $desc)));
  
		//setze alle bekannten Artikel aus dem Artikel-Cache $page_cache ein;
		//$page_cache wird mittels AllPagesBot.php generiert;
		//es werden nur Wörter betrachtet, die mindestens 4 Zeichen lang sind
		foreach($page_cache as $cache) {
			if(strlen($cache) < 4)
				continue;
			$desc = preg_replace("#\[\[.+?]](*SKIP)(*FAIL)|$cache#", "[[$cache]]", $desc);
		}
		
		
		//trenne Wörter von Satzzeichen
		$explosion = str_replace(",", " , ",  str_replace(".", " . ",  str_replace("!", " ! ",  str_replace("?", " ? ", $desc))));

		//füge Satzzeichen wieder hinzu und Wörter zusammen
		$desc = str_replace(" , ", ", ",  str_replace(" . ", ". ",  str_replace(" ! ", "! ",  str_replace(" ? ", "? ", $desc))));
		
		$title = preg_replace("#(\[.*?\])#", "", $data[3][$i]); //entferne [W1*]-Markierung
		$text .= "|".date("d.m.Y",$news_timestamp)."||[".$data[2][$i]." ".$title."]||".$desc."\n|-\n";

		$news++;
		}
	$text = trim($text);
	return array($news,$text); //als Klasse wäre das sicher schöner :')
}