revisions($title); if ($revision['pageid']==-1) print_error("Virhe: Wikipedia-sivua ei ole olemassa.\n"); if ($revision['ns']!=6) print_error("Virhe: Wikipedia-sivu ei ole tiedostosivu.\n"); // Varmuuden vuoksi otetaan revision title käyttöön $title=$revision['title']; $cat=$wpapi->categories($title); $googlechartimage=0; foreach($cat as $c) { if ($c['title']=="Luokka:Google Chart -graafit") $googlechartimage=1; } if ($googlechartimage!=1) print_error("Virhe: Tiedostosivun kuva ei ole google chart -graafi.\n"); $page=curl_get_contents("http://fi.wikipedia.org/w/index.php?action=view&uniq=" .time() . "&title=" . str_replace(" ", "_", $revision['title'])); $match="|(.*?)|ism"; if (!preg_match($match, $page, $m)) print_error("Virhe: Google Chart -graafin osoitetta ei löytynyt sivulta.\n"); $url=$m[1]; if (!ereg("chart.apis.google.com", $url)) print_error("Virhe: Löydetty Google Chart -graafin osoite ei osoita Google Chartiin. $url\n"); $match="|
|ism"; if (!preg_match($match, $page, $m)) print_error("Virhe: Nykyistä kuvaa ei löytynyt.\n"); $currentimage=$m[1]; $imageinfo=$wpapi->imageinfo($title); $sha1=$imageinfo[$revision['pageid']]['imageinfo'][0]['sha1']; if (strlen($sha1)!=40) print_error("Virhe: nykyisen kuvan tarkistussummaa ei saatu haettua.\n"); $query="SELECT * FROM articleinfo WHERE pageid='" . mysql_real_escape_string($revision['pageid']) ."'"; $result = mysql_query($query) or print_error('Virhe: Tiedonhaku epäonnistui.' ); $updatedb=0; if (mysql_num_rows($result) == 0) { if ($error_msg=test_googlecharturl($url)) print_error($error_msg); print_debug("Artikkelia ei löytynyt kannasta, lisätään se\n"); $query="INSERT articleinfo (pageid, title, revid, sha1, url) VALUES ("; $query.="'" . mysql_real_escape_string($revision['pageid']) ."'"; $query.=",'" . mysql_real_escape_string($revision['title']) ."'"; $query.=",'" . mysql_real_escape_string($revision[0]['revid']) ."'"; $query.=",'" . mysql_real_escape_string($sha1) ."'"; $query.=",'" . mysql_real_escape_string($url) ."')"; $result = mysql_query($query) or print_error('Virhe: Tiedon tallennus epäonnistui.' . mysql_error()); $updateimage=1; } else { if ($error_msg=test_googlecharturl($url)) print_error($error_msg); print_debug("Artikkeli löytyi kannasta\n"); $row=mysql_fetch_assoc($result); $oldurl=$row['url']; if ($row['revid']!=$revision[0]['revid']) { print_debug("Artikkeli on muuttunut.\n"); $page=$wpq->getpage($title); if($url!=$row['url']) { print_debug("Artikkelissa oleva url-on muuttunut\n"); $updateimage=1; } $updatedb=1; } } $updateimage=1; if ($updateimage==1) { if ($mode=="save") { if ($updatedb==1) { $query="UPDATE articleinfo SET "; $query.="title='" . mysql_real_escape_string($revision['title']) ."'"; $query.=", revid= '" . mysql_real_escape_string($revision[0]['revid']) ."'"; $query.=", url='" . mysql_real_escape_string($url) ."'"; $query.=", sha1='" . mysql_real_escape_string($sha1) ."'"; $query.=", ts = CURRENT_TIMESTAMP"; $query.=" WHERE pageid='" . mysql_real_escape_string($revision['pageid']) ."'" ; $result = mysql_query($query) or print_error('Virhe: Tiedon päivitys epäonnistui.' . mysql_error()); } /* if ((time() - $_SESSION['time'])<30) { print_error("Virhe: Uusi pyyntö päivittää kuva tuli liian nopeasti edellisen pyynnön jälkeen.\n"); } */ $_SESSION['time']=time(); if ($_SESSION['preview']!=1) { print_error("Virhe: Kuvaa ei ole esikatseltu ennen tallentamista.\n"); } else { $_SESSION['preview']=0; } if ($error_msg=test_googlecharturl($url)) print_error($error_msg); $url=html_entity_decode($url ); $file=file_get_contents($url); if (strlen($file)>1000000) print_error("Virhe: Tiedosto on liian suuri."); if (strlen($file)<100) print_error("Virhe: Tiedosto on liian pieni."); if ($sha1==sha1($file) ) print_error("Kuvaa ei päivitetty, koska kuva on sama kuin nykyinen Wikipediassa oleva kuva.\n"); if( $file[1] .$file[2] .$file[3] == 'PNG') { print_debug("PNG\n"); } else if( $file[0] .$file[1] .$file[2] == 'GIF') {print_debug("GIF\n"); } else { print_error("Virhe: Kuvan hakeminen epäonnistui.\n"); } $filename="../../tmp/googlechart2.png"; if (file_exists($filename)) { print_error("Virhe: Yritä uudestaan myöhemmin. Kuvien lataaminen on rajoitettu yhteen kuvaan kerrallaan ja joku muu on juuri nyt lataamassa kuvaa.\n"); } if (!$f = fopen($filename, "w")) print_error("Virhe: Väliaikaistiedoston luonti epäonnistui.\n"); if (!fwrite($f, $file)) print_error("Virhe: Väliaikaistiedoston kirjoittaminen epäonnistui.\n"); fclose($f); $user="ZacheBot"; $pass="Alex2010Starfire"; $wpapi->login($user,$pass); $tmp_title=fix_title($title); if (maxstatcount()) { unlink($filename); print_error("Tämä on testattavana oleva työkalu ja sen maksimikäyttökerrat ovat tulleet täyteen. Ota yhteys käyttäjä Zacheen\n"); } if (strlen(trim($_GET['comment']))) $comment=$_GET['comment']; else $comment= "Päivitetään Google Chart-kuva vastaamaan sivulle olevaa osoitetta\n"; $ret=$wpapi->upload($tmp_title, $filename, $comment); unlink($filename); if($ret['upload']['result']=="Success") print_error("Kuva on päivitetty onnistuneesti."); else print_error("Kuvan päivityksessä tapahtui odottamaton virhe. Ilmoita käyttäjä Zachelle."); } else { // Preview print_preview($currentimage, $oldurl, $url, $title); } } else { print_preview($currentimage, $oldurl, $url, $title); } function curl_get_contents ($url) { $curl = curl_init(); $useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"; curl_setopt($curl, CURLOPT_USERAGENT, $useragent); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_HEADER, true); curl_setopt($curl, CURLOPT_URL, $url); $html = curl_exec($curl); curl_close($curl); return $html; } function print_preview($currentimage, $oldurl, $newurl, $title) { $_SESSION['preview']=1; //$oldurl2= $oldurl == "" ? "http://zache.kapsi.fi/wikipedia/40px-Nuvola_filesystems_file_locked.svg.png" : $oldurl; $oldurlmsg=$oldurl == "" ? "Vanha graafi on tuntematon" : "Edellisessä päivityksessä"; if ($oldurl===$newurl) { $msg="
Kuvassa EI OLE tapahtunut muutosta verrattuna edelliseen tällä työkalulla tehtyyn päivitykseen.\n
"; } else { $msg=''; } $query="SELECT * FROM stats WHERE title='googlechart'"; $result = mysql_query($query) or print_error('Virhe: Tiedonhaku epäonnistui.' ); if (mysql_num_rows($result) == 0) { print_error("Virhe: Ei saatu tilastoitua käyttökertojen määrää\n"); } else { $row=mysql_fetch_assoc($result); $stats=""; } $str=' ' . $title .' -graafin esikatselu.

' .$title.' -kuvan esikatselu

Nykyinen Wikipediassa oleva kuva
' . $msg . '
Päivityksen syy:
'. $stats .'
'; die($str); } function print_error($msg="Ei virheilmoitusta") { global $title; $str=' Google Chart -graafin päivitysilmoitus.
'.$msg .'
'; die($str); } function print_debug($str) { global $debug; if($debug) echo $str; } function maxstatcount() { $query="SELECT * FROM stats WHERE title='googlechart'"; $result = mysql_query($query) or print_error('Virhe: Tiedonhaku epäonnistui.' ); if (mysql_num_rows($result) == 0) { print_error("Virhe: Ei saatu tilastoitua käyttökertojen määrää\n"); } else { $row=mysql_fetch_assoc($result); if ($row['count']>100) { return 1; } else { $query="UPDATE stats SET count='" . ($row['count']+1) ."' WHERE title='googlechart'"; $result = mysql_query($query) or print_error('Virhe: Tilastojen päivitys epäonnistui.' . $query ); return 0; } } } function fix_title($title) { $tmp_title=str_replace("Tiedosto:", "", $title); $tmp_title=str_replace("Kuva:", "", $tmp_title); $tmp_title=str_replace("File:", "", $tmp_title); $tmp_title=str_replace("Image:", "", $tmp_title); return ($tmp_title); } /* CREATE TABLE articleinfo ( pageid INTEGER UNSIGNED NOT NULL, title VARCHAR(255) NOT NULL, revid INTEGER UNSIGNED NOT NULL, ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP, url VARCHAR(1024) DEFAULT '', sha1 VARCHAR(40) NOT NULL, PRIMARY KEY (pageid), UNIQUE KEY (title), UNIQUE KEY (revid) ); ); CREATE TABLE stats ( id INTEGER UNSIGNED NOT NULL, title VARCHAR(16) NOT NULL, count INTEGER UNSIGNED NOT NULL, ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (pageid), UNIQUE KEY (title) ); */ function test_googlecharturl($url) { $url=html_entity_decode($url); $file=file_get_contents($url ."&chof=validate"); if (ereg("Valid Request", $file)) return 0; $match="|(.*?)|ism"; if (preg_match($match, $file, $m)) { return $m[1]; } else { return "Antamasi google chart -osoite on virheellinen. Tarkista osoite."; } die($file); } ?>