Wikipediadiskussion:Projekt alla platser-städning/Klippor i Finland 1
Utseende
PHP-script för att skapa denna typ av listor.
[redigera wikitext]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)
<?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," ,"));
}
?>