PHP-script för att skapa denna typ av listor. redigera

Jag kör den lokalt med XAMPP+windows med mycket förlängd exekveringstid - den hämtar ca 5 sidor per rad, så det blir snabbt långa tider vid längre listor. Taxelson (diskussion) 11 december 2016 kl. 15.38 (CET)Svara

<?php
$lista=file_get_contents('klippor.txt'); //En fil med detta namn, som innehåller en lista med de artikelnamn som ska ingå i listan, ett på varje rad. (endast de som innehåller en geobox kommer att tas med). 
$lista=str_replace("\r","",$lista);
$lista=str_replace(" ","_",$lista);
$li=explode("\n",$lista);


$nyfil="_lista.txt"; //målfilens namn. OBS! om den finns så raderas den! 
$f=fopen($nyfil,'w');
fwrite($f,"{| class=\"wikitable sortable\"
!'''Namn'''!!'''Geonames'''!!'''Koordinat'''!!'''Wikidata'''!!'''icke-bot red.'''!!'''iw ej sv/ceb'''!!'''fiwp''' inom 200m\r\n");fclose($f);  



$tabort=array('"','title=');
$f=fopen($nyfil,'a+');

for ($i=0;$i<count($li); $i++){
	if (trim($li[$i])){
		$wp=file_get_contents("https://sv.wikipedia.org/w/index.php?title=".$li[$i]."&action=raw");

		if (strpos($wp,"eobox")){
			$xml=file_get_contents("https://sv.wikipedia.org/w/api.php?action=query&prop=pageprops&ppprop=wikibase_item&titles=".$li[$i]."&format=xml");
			unset($Q);
			preg_match("/Q\d+/",$xml,$Q);
			
			$namn=trim(str_replace("_"," ",$li[$i]));
			
			$lat=hamta_varde($wp,'lat_d');
			$long=hamta_varde($wp,'long_d');
			
			$l=$lat."|".$long; 
			$fi="";

			$xml=file_get_contents("https://fi.wikipedia.org/w/api.php?action=query&list=geosearch&gscoord=".$l."&gsradius=200&format=xml&gslimit=500");

			unset($tmp);
			preg_match_all("/title\=\".+?\"/",$xml,$tmp);
			$fi=implode("]], [[:fi:",$tmp[0]);
			$fi=str_replace($tabort,"",$fi);
			if ($fi){$fi="[[:fi:".$fi."]]";} 
			
			$rad="|-\n| [[".$namn."]] || ";
			$rad.="{{geonames|".hamta_varde($wp,'geonames')."}} || {{coord|".$lat."|N|".$long."|E|region:FI_type:landmark|name=".$namn."}} || [[:D:".$Q[0]."]] || ".vem($li[$i])." || ".iw($Q[0])." || ".$fi." |";
			
			fwrite($f,$rad."\n");
			echo $rad."<hr/>\n";
		}
		
		
	}
}
fwrite($f,"\r\n|}");
fclose($f);


function hamta_varde($wp,$v){
	//echo $v;
	//preg_match("/^[\|]*".$v."\s*\=.*/",$wp,$tmp);
	preg_match("/.*".$v."\s*\=.*/",$wp,$tmp);
	
	if (isset($tmp[0])){
		$tmp[0]=explode("=",$tmp[0]);
		$res=trim(preg_replace("/\<\!--.*?--\>/","",$tmp[0][1]));
		return ($res);
	}
	
}

function vem($namn){
	$t= " ,";
	$ogillas=array("Lsjbot","EmausBot","Taxelbot","Innocent bot");
	$xml=file_get_contents("https://sv.wikipedia.org/w/api.php?action=query&prop=revisions&titles=".$namn."&rvlimit=500&rvprop=timestamp|user&format=xml");
	preg_match_all("/user\=\".*?\"/",$xml,$tmp);
	for ($i=0; $i<count($tmp[0]); $i++){
		$tm=explode('"',$tmp[0][$i]);
		if (!strpos($t,",".$tm[1].",")){$t.=$tm[1].",";}
	}
	$t=str_replace($ogillas,"",$t);
	$t=preg_replace("/,+/",",",$t);
	return (trim($t," ,"));
}


function iw($Q){
	$t= " ,";
	$ogillas=array("cebwiki","svwiki");
	$xml=file_get_contents("https://www.wikidata.org/w/api.php?action=wbgetentities&format=xml&props=sitelinks&ids=".$Q);
	preg_match_all("/site\=\".*?\"/",$xml,$tmp);//user\=\"
	for ($i=0; $i<count($tmp[0]); $i++){
		$tm=explode('"',$tmp[0][$i]);
		if (!strpos($t,",".$tm[1].",")){$t.=$tm[1].",";}
	}
	$t=str_replace($ogillas,"",$t);
	$t=preg_replace("/,+/",",",$t);
	return (trim($t," ,"));
}

?>