Wikipedista:DaBlerBot/src: Porovnání verzí

Smazaný obsah Přidaný obsah
m zdrojový kód bota
 
m aktualizace
Řádek 4:
/*
PHP-WikiBot
 
VERSION: 2009-04-02
VERSION: 2009-07-15
 
AUTHOR: [[cs:User:DaBler]]
 
TODO:
* co udělat s více <br/> na konci odrážek?
* používat výjimky k hlášení chyb
* interwiki (vysbírat, třidit, uniq, nakonec)
* kategorie (vysbírat, třidit, uniq, nakonec)
* seznam článků k editaci setřídit a uniq
* rozšířit opravy pravopisu
* možnost lokalizace (použití na jiných než cs wiki)
* odstranit prázdné odrážky
* z "; term" odstranit tučné a italiku
*/
 
Řádek 13 ⟶ 26:
private $user;
private $pass;
 
private static $dict = array();
 
const COOKIEFILE = 'cookies.txt';
const SLEEP = 65;
 
public function __construct($base='http://cs.wikipedia.org/w/index.php', $user='DaBlerBot', $pass='výchozí heslo')
Řádek 58 ⟶ 73:
{
echo "Loading article '${name}'...\n";
try
$page = $this->edit($name);
if(FALSE === $page)
{
$page = $this->edit($name);
echo "Edit fails, exiting...\n";
return if(FALSE; === $page)
{
echo "Edit fails, exiting...\n";
return FALSE;
}
echo "Processing...\n";
$new = self::process($page['text']);
$page['attr']['wpSummary'] = $new['summary'];
$page['attr']['wpTextbox1'] = $new['text'];
echo "Posting...\n";
if(FALSE === $this->post($page, $name))
{
echo "Post fails, exiting...\n";
return FALSE;
}
}
catch(Exception $e)
 
echo "Processing...\n";
$new = self::process($page['text']);
$page['attr']['wpSummary'] = $new['summary'];
$page['attr']['wpTextbox1'] = $new['text'];
 
echo "Posting...\n";
if(FALSE === $this->post($page, $name))
{
echo "Post'Caught failsexception: ', exiting... $e->getMessage(), "\n";
return FALSE;
}
 
echo "OK (sleeping for ".self::SLEEP." secsseconds)...\n";
sleep(self::SLEEP);
}
 
echo "Done.\n";
}
 
Řádek 125 ⟶ 148:
 
if(!isset($ind['INPUT']))
throw new Exception('No input element (MediaWiki has generated non-valid (X)HTML?)');
{
echo "Error: No input element (MediaWiki has generated non-valid (X)HTML?)\n";
die -1;
}
 
foreach($ind['INPUT'] as $_=>$num)
{
$attr[$val[$num]['attributes']['NAME']] = $val[$num]['attributes']['VALUE'];
}
 
unset($attr['search']);
Řádek 188 ⟶ 206:
 
return !($old == $str);
}
 
private static function fix_bullets_cb($m)
{
if( preg_match('/^#REDIRECT *(\[\[[^\]]+?\]\]) *\r?$/', $m[0]) || preg_match('/^#PŘESMĚRUJ *(\[\[[^\]]+?\]\]) *\r?$/', $m[0]) )
return "$m[0]";
else
return "$m[1] $m[2]";
}
 
Řádek 195 ⟶ 221:
 
// odrazky orezat o mezery
$str = preg_replacepreg_replace_callback('/^([\*#;:]+) *(.*?) *\r?$/m', '\1 \2'"WikiBot::fix_bullets_cb", $str, -1, $tmp);
 
// zbavit se <br/> u odrazek
$str = preg_replace('|^([\*#;:]+) (.*?) *<br */?'.'>\r?$|m', '\1 \2', $str, -1, $tmp);
Řádek 212 ⟶ 239:
 
return !($old == $str);
}
 
private static function pref($prefixes, $words)
{
$ret = array();
$prefixes = explode('|', $prefixes);
 
foreach($prefixes as $p)
foreach($words as $k => $v)
$ret += array($p.$k => $p.$v);
 
return $ret;
}
 
private static function postf($postfixes, $words)
{
$ret = array();
$postfixes = explode('|', $postfixes);
 
foreach($words as $k => $v)
foreach($postfixes as $p)
$ret += array($k.$p => $v.$p);
 
return $ret;
}
 
private static function up($arr)
{
$ret = array();
foreach($arr as $k => $v)
{
$ret += array( $k => $v );
$ret += array( ucfirst($k) => ucfirst($v) );
}
return $ret;
}
 
public static function get_dictionary()
{
$replace = array(
'ocely' => 'oceli',
'mysly' => 'mysli',
'směsy' => 'směsi',
'myšy' => 'myši',
'mosazy' => 'mosazi',
'lžy' => 'lži',
 
'potmně' => 'potmě',
 
'zda-li' => 'zdali',
);
 
// nejde o spřažený výraz
$replace += array(
'nashledanou' => 'na shledanou',
'naviděnou' => 'na viděnou',
'naslyšenou' => 'na slyšenou',
'narozloučenou' => 'na rozloučenou',
'naodchodnou' => 'na odchodnou',
'nauvítanou' => 'na uvítanou',
'nazotavenou' => 'na zotavenou',
'naposilněnou' => 'na posilněnou',
'napováženou' => 'na pováženou',
'nauváženou' => 'na uváženou',
'narozmyšlenou' => 'na rozmyšlenou',
'navysvětlenou' => 'na vysvětlenou',
'nasrozuměnou' => 'na srozuměnou',
'naupřesněnou' => 'na upřesněnou',
'navybranou' => 'na vybranou',
'nazavolanou' => 'na zavolanou',
'narozdíl' => 'na rozdíl',
);
 
// vyjímka => výjimka
$replace += self::postf(
'ka|ce|ek|kách|kám|kami|kou|ku|ky',
array( 'vyjím' => 'výjim' )
);
 
// (bez)vyjímečný => (bez)výjimečný
$replace += self::pref(
'|bez',
self::postf(
'ý|á|é|ého|ém|ému|í|ost|ostech|ostem|osti|ostmi|ou|ých|ým|ýma|ými|ě',
array( 'vyjímečn' => 'výjimečn' )
)
);
 
// (nej)vyjímečnější => (nej)výjimečnější
$replace += self::pref(
'|nej',
self::postf(
'|ch|ho|m|ma|mi|mu',
array( 'vyjímečnější' => 'výjimečnější' )
)
);
 
// telefoní => telefonní
$replace += self::postf(
'|ch|ho|m|ma|mi|mu',
array( 'telefoní' => 'telefonní' )
);
 
// standart- => standard-
$replace += self::postf(
'ech|em|ům',
array( 'standart' => 'standard' )
);
 
// (nad)standartní => (nad)standardní
$replace += self::pref(
'|nad',
self::postf(
'|ch|ho|m|ma|mi|mu',
array( 'standartní' => 'standardní' )
)
);
 
// standartnost => standardnost
$replace += self::postf(
'|ech|em|i|mi',
array( 'standartnost' => 'standardnost' )
);
 
// standartizace => standardizace
$replace += self::postf(
'e|emi|i|ích|ím',
array( 'standartizac' => 'standardizac' )
);
 
// (nej)standartnější => (nej)standardnější
$replace += self::pref(
'|nej',
self::postf(
'|ch|ho|m|ma|mi|mu',
array( 'standartnější' => 'standardnější' )
)
);
 
// (za|vz|o)pomě(n|l) => (za|cz|o)pomně(n|l)
$replace += self::pref(
'za|vz|o',
self::postf(
'í|ích|ím|ími',
array( 'poměn' => 'pomněn' )
)
+
self::postf(
'|a|i|o|y',
array(
'poměn' => 'pomněn',
'poměl' => 'pomněl'
)
)
);
 
// vlasní => vlastní
$replace += self::postf(
'|ch|ho|m|ma|mi|mu',
array( 'vlasní' => 'vlastní' )
);
 
// vlasnost => vlastnost
$replace += self::postf(
'|ech|em|i|mi',
array( 'vlasnost' => 'vlastnost' )
);
 
$replace += array(
'vlasně' => 'vlastně'
);
 
// vlasnický => vlastnický
$replace += self::postf(
'ý|á|é|ého|ém|ému|ou|ých|ým|ýma|ými',
array( 'vlasnick' => 'vlastnick' )
);
 
$replace += array(
'vlasničtí' => 'vlastničtí'
);
 
// vlasnictví => vlastnictví
$replace += self::postf(
'|ch|m|mi',
array( 'vlasnictví' => 'vlastnictví' )
);
 
// vlasník => vlastník
$replace += self::postf(
'k|ci|cích|ka|kem|kovi|ku|kům|ky',
array( 'vlasní' => 'vlastní' )
);
 
// (vy)vlasnit => (vy)vlastnit
$replace += self::pref(
'|vy',
self::postf(
'it|ěme|ěte|í|i|íc|íce|il|ila|ili|ilo|ily|ím|íme|íš|íte|iti',
array( 'vlasn' => 'vlastn' )
)
);
 
// součastný => současný
$replace += self::postf(
'ý|á|é|ého|ém|ému|í|ost|ostech|ostem|osti|ostmi|ou|ých|ým|ýma|ými',
array( 'součastn' => 'současn' )
);
 
// tamnější => tamější, vyší => vyšší
$replace += self::postf(
'|ch|ho|m|ma|mi|mu',
array(
'vyší' => 'vyšší',
'tamnější' => 'tamější'
)
);
 
// roviný => rovinný
$replace += self::postf(
'ý|á|é|ého|ém|ému|í|ost|ostech|ostem|osti|ostmi|ých|ým|ýma|ými',
array( 'rovin' => 'rovinn' )
);
 
// kamený => kamenný
$replace += self::postf(
'ý|á|é|ého|ém|ému|ost|ostech|ostem|osti|ostmi|ou|ých|ým|ýma|ými',
array( 'kamen' => 'kamenn' )
);
 
// (ne|mnoho)straný => (ne|mnoho)stranný
$replace += self::pref(
'mnoho|ne',
self::postf(
'ý|á|é|ého|ém|ému|í|ost|ostech|ostem|osti|ostmi|ou|ých|ým|ýma|ými|ě',
array( 'stran' => 'strann' )
)
);
 
// postraní => postranní
$replace += self::postf(
'|ch|ho|m|ma|mi|mu',
array( 'postraní' => 'postranní' )
);
 
// proměný => proměnný
$replace += self::postf(
'ý|á|é|ého|ém|ému|ost|ostech|ostem|osti|ostmi|ých|ým|ýma|ými',
array( 'proměn' => 'proměnn' )
);
 
 
// -dení => -denní
$replace += self::pref(
'|celo|celotý|čtrnácti|jedno|jednotý|každo|každotý|kolika|kolikatý|několika|několikatý|ob|rovno|tý|dvou|dvoutý|tří|třítý|čtyř|čtyčtý|pěti|pětitý|šesti|šestitý|sedmi|sedmitý|osmi|osmitý|devíti|devítitý|deseti|desetitý|více|vícetý',
self::postf(
'í|ích|ího|ím|íma|ími|ímu|ě',
array( 'den' => 'denn' )
)
);
 
// i s velkým počátečním písmenem
$replace = self::up($replace);
 
// tyhle náhrady jsou case sensitive
$replace += array(
'khz' => 'kHz',
'Mhz' => 'MHz',
'Ghz' => 'GHz',
);
 
self::$dict = $replace;
}
 
Řádek 220 ⟶ 521:
$sep = '[ ,\.;*#\-–—…&\(\)\/\[\]|\'{}=:<>?!"„“\n]';
 
$replace = array(self::$dict;
'vyjímka' => 'výjimka',
'vyjímečný' => 'výjimečný',
'vyjímečně' => 'výjimečně'
// ...doplnit
);
 
foreach($replace as $pattern => $replacement)
Řádek 231 ⟶ 527:
$str = preg_replace("/(${sep})${pattern}(${sep})/m", "\\1${replacement}\\2", $str);
}
 
// dělá to co má, jen by to asi mělo být ve funkci fix_extlinks()
$str = preg_replace('|\[http://http://([^\]]+?) *\]|m', '[http://\1]', $str);
 
return !($old == $str);
Řádek 258 ⟶ 557:
 
if($str == '')
throw new Exception('Empty output!');
{
echo "Error: Empty output!\n";
die -1;
}
 
$summary .= "…";
Řádek 296 ⟶ 592:
 
$bot = new WikiBot();
$bot->get_dictionary();
$bot->run();
?>