Toto jsou zatím jen pracovní poznámky. Jednou z toho možná bude dokumentace.

wikirobot.pmEditovat

Dálkové ovládání, stahování a ukládáníEditovat

  • vytvorit_klienta()
Kromě povinné inicializace knihovny LWP může také nastavit globální proměnné pro výchozí jazykovou mutaci, případně pro úplně jiné URL (to pokud nechceme pracovat s Wikipedií, ale s jinou wiki, běžící nad MediaWiki).
  • $formhash = otevrit_k_upravam($clanek, $jazyk)
Stáhne formulář pro úpravy článku (včetně dosavadního zdrojáku). Stejně jako MediaWiki se podívá, zda nejde o přesměrování, a pokud ano, stáhne formulář pro úpravy článku, na který se přesměrovává. V takovém případě přidá nový název článku do formuláře pod klíčem "presmerovani".
  • $formhash = otevrit_k_upravam_bez_presmerovani($clanek, $jazyk)
Stáhne formulář pro úpravy článku (včetně dosavadního zdrojáku). Nezabývá se tím, zda šlo o přesměrování: klidně vrátí zdroják "#REDIRECT".
  • $zdrojak = form_ziskat_zdrojak($formhash)
Získá zdroják ze staženého editačního formuláře.
  • form_vlozit_zdrojak($formhash, $zdrojak, $shrnuti, $drobnost)
Do staženého editačního formuláře uloží nový zdroják, spolu se shrnutím editace a informací, zda jde jen o drobnou úpravu.
  • ulozit_upravy($clanek, $formhash)
Odešle vyplněný editační formulář zpět na server.
  • get($url) ... obalka na pozadavek HTTP
  • get_binary($url) ... totez ale binarni data (obrazky)
  • $hashref = stahnout_html($jazyk, $clanek, $format) ... format cist+upravit
  • doplnit_editacni_formular($hashref)
  • ziskat_clanek($hashref) ... hash uz obsahuje jazyk a nazev clanku, po dobehnuti bude obsahovat i html_cist, html_upravit, form_poradi, form_hodnoty, wiki
  • $wiki = ziskat_zdrojak($jazyk, $clanek) ... vrati wiki zdrojak
  • $html_nahled = ziskat_nahled($jazyk, $clanek, $text, $shrnuti, $mala_uprava) ... ve wikipedii nic nemeni
  • $html_formular = pripravit_odeslani_souboru($jazyk, $cesta, $nazev, $popis, $licence) ... vrati html predvyplneneho formulare
  • nahradit_a_ulozit($text, $clanek, $jazyk) ... nebezpecne, meni wikipedii! nahradi clanek vlastnim textem
  • pripojit_a_ulozit($text, $clanek, $jazyk) ... pripoji text na konec clanku a ulozi na wikipedii!
  • $hashref = stahnout_clanek($jazyk, $clanek) ... stahne ve tvaru vhodnem pro upravy a opetovne ulozeni; nevim presne, cim se lisi od vyse uvedenych podobnych funkci, ale tahle byla starsi a momentalne funguje asi jen jako obalka na ty novejsi; melo by se sjednotit
  • odeslat_clanek($jazyk, $clanek, $poradi, $formular) ... ulozi clanek do wikipedie, at uz existoval, nebo je novy

Rozbor wiki zdrojákuEditovat

  • \@casti = rozdelit_na_casti($wiki) ... mineno casti podle nadpisu
  • sestavit_seznam_obrazku($html) ... obrazky, ktere jsou v clanku pouzity

Pomocné nízkoúrovňové funkce pro HTML, Wiki, URL aj.Editovat

  • url($clanek, $jazyk, $upravit)
Vrátí úplné URL stránky s článkem (pokud $upravit==0) nebo s formulářem pro editaci článku (pokud $upravit!=0). Jestliže $jazyk ne "", URL se tvoří podle pravidel platných ve Wikipedii. Jinak se použije výchozí URL nastavené při volání funkce vytvorit_klienta(). Výchozí URL může vést opět do Wikipedie, tentokrát na výchozí jazykovou mutaci, nebo může vést na jinou wiki.
  • $clanek1 = upravit_nazev_clanku_pro_url($clanek) ... %E9 a tak
  • $zdrojak1 = dekodovat_entity($zdrojak) ... vybrane HTML entity na znaky; mozna by stacilo pouzit exitujici knihovny?
  • $zdrojak1 = zakodovat_entity_pro_iso1($zdrojak) ... mozna prezitek, ted uz je i anglicka Wikipedie v UTF-8?
  • $zdrojak1 = odstranit_wiki_odkazy($zdrojak) ... text odkazu zustane, prestane odkazovat

InterwikiEditovat

  • posbirat_interwiki($hashref) ... najde ve zdrojaku interwiki odkazy. snazi se odlisit interwiki od jmennych prostoru, ale ne vzdy se mu to dari. nespoleha na pripadny seznam vsech wikipedii v nejake wikipedii, protoze ten, ktery jsem kdysi nekde nasel, nebyl aktualizovany. asi by se to ale melo udelat lepe.
  • seradit_interwiki(@iw) ... seradi ne podle kodu, ale podle nazvu jazyka, protoze to je ten text, ktery uvidi ctenar

Přihlášení uživateleEditovat

  • zajistit_prihlaseni($jazyk) ... zjisti, zda jsme prihlaseni, a pokud ne, prihlasi nas
  • zjistit_uzivatelske_jmeno($jazyk) ... zjisti, zda jsme prihlaseni, a pod jakym jmenem
  • zalozit_ucet($jazyk, $uzivatel, $heslo, $email)
  • prihlasit_se($jazyk, $uzivatel, $heslo)
  • odhlasit_se($jazyk)
  • interaktivne_zjistit_jmeno_a_heslo() ... cte standardni vstup, uklada do globalnich promennych; tuhle funkci asi vyhodit a nechat vse na uzivateli knihovny wikirobot.pm, ktery muze bud zjistovat heslo interaktivne, nebo treba pozadovat jeho ulozeni v $ENV{WIKI_USER} a $ENV{WIKI_PASS}

Diagnostické funkceEditovat

    • hlaseni() ... prekoduje do kodovani pouzivaneho na STDERR, napr. do cp852 ve windowsove commandline

interwiki.pmEditovat

Zvažuji, jestli by funkce pracující s interwiki neměly mít svůj vlastní modul. Ať tak či tak, mělo by se udělat následující:

  • Předělat funkci posbirat_interwiki(), aby nevyžadovala odkaz na hash, ale přímo wiki zdroják. Samozřejmě zkontrolovat, kdo všechno funkci volá postaru, a opravit volání.
  • Najít optimální kombinaci metod, jak poznat interwiki odkaz.
    • Někde (na MediaWiki?) je seznam všech jazykových mutací. Dá se přistupovat přímo na něj, nebo mít někde lokální kopii. Je otázka, jak často je aktualizován.
    • Můžu mít svou cache dříve odhalených kódů jazykových mutací. Snad se nemůže stát, že to, co už jednou bylo kódem jazyka, se někdy v budoucnu taky stane jmenným prostorem uvnitř některé wikipedie. Obdobně můžu mít cache dříve odhalených jmenných prostorů (zejména Wikipedie, Wikipedista, Šablona, Kategorie, Soubor a jejich překlady do jiných jazyků). Možná, že i tohle je někde sepsáno, ale nevím kde.
    • Vše, co vypadá jako interwiki, lze otestovat na pískovišti nebo v náhledu i ne-pískoviště. Prostě se podívám, zda mi náhled danou věc zobrazuje jako odkaz v textu článku, nebo zda mi vyrobil odpovídající interwiki odkaz.

vykyditor.pmEditovat

  • zobrazit_nahled($jazyk, $clanek, $wiki, $shrnuti, $mala_zmena) ... Získá od Wikipedie náhled v HTML, uloží ho na místní disk a spustí prohlížeč, aby ho zobrazil. Případné předzpracování zdrojáku (viz níže) se musí zavolat zvlášť!
  • predzpracovat($jazyk, $clanek, $zdrojak) ... Zavolá níže uvedené funkce v potřebném pořadí. Chtělo by to pořádnou dokumentaci zejména automatických oprav.
  • osetrit_neslabicne_predlozky($wiki) = $wiki ... nevhodne pouzit jinde nez na cs:; dela take nbsp mezi cislem a jednotkou, km2, ceske typograficke uvozovky
  • nahradit_ciselne_entity($wiki) = $wiki ... tez veci jako -amac-, -ugra-, -rus|ukr-, --, ---
  • nahradit_nahradni_syntaxi($wiki) = $wiki
    •  :.clanek/odkaz.:
    • ,,,sablona,,,
    • """tucne""", ""kurziva""
    • seznam s odrazkami - misto *
    • cislovany seznam + misto #
    • ciselna entita jako -n353-
    • jsou tam v komentari dalsi napady, zatim neimplementovane
  • zpracovat_tabulky($wiki) = $wiki ... Můžete zkopírovat (přes schránku pomocí CTRL+C CTRL+V) tabulku z Excelu nebo jiného tabulkového programu. Ve zdrojáku ji pak ohraničíte značkami <xls> a </xls>. Tato funkce je vyhledá a přepíše pomocí wiki syntaxe.
    • Alternativně můžete použít počáteční značku <xls n>, kde n je číslo sloupce (první sloupec má číslo 1). Buňky v příslušném sloupci pak budou wiki-odkazy.
  • obslouzit_funkce($wiki) = $wiki
    •  ::nazev(Himālaya) ... Nechová se jako ostatní funkce. Ve skutečnosti se nezpracovává ve vykyditor.pm, ale ve vykyditor.pl. Musí být na začátku zdrojáku. Řekne Vykyditoru, pod jakým názvem má článek uložit do Wikipedie. Tento název má přednost před názvem, který zadáme na příkazovém řádku. Hodí se, když chceme název se zvláštními znaky, které neumíme zadat na příkazovém řádku.
    •  ::iw(en:clanek)
    •  ::kopie(en:clanek)
    •  ::katjako(clanek) ... abych nemusel znat nazev podobneho clanku, mozna se kouknout na kategorie zkopirovane z en: a bud najit pres kategorialni interwiki jejich ceske protejsky, nebo najit clanek-clen kategorie, k nemu cesky protejsek a zapamatovat si jeho ceske kategorie.
    •  ::kobra(jazyk:prostor:soubor) ... pripravi kopirovani souboru s obrazkem z nektere narodni wikipedie primo na commons
    •  ::souradnice(N 39:01:57 W 76:53:35)
      • Lze zadat i interval souřadnic. ::souradnice(N 32-38 E 65-70) zatím umí jen celé stupně. Vypočítá souřadnice prostředka (rovněž zaokrouhlí na celé stupně) a odhadne měřítko, které je potřeba, aby byla vidět celá požadovaná oblast. Viditelný text odkazu je interval, ale odkaz vede na střed+měřítko.
    •  ::datum(21.12.1971)
    •  ::cize(sanskrt:हिमालय/Him-amac-lay/zh:喜马拉雅山脉/pin:Xǐmǎlāyǎ Shānmò/cszh:Si-ma-la-ja šan-mo)
    •  ::redir(zdroj1/zdroj2/zdroj3/...) ... odkud sem ma vest redir?

vykyditor.plEditovat

Z nějakého důvodu nevolá přímo vykyditor::nahled(), ale wikirobot::ziskat_nahled() a ten pak sám předává Firefoxu. Tohle by to chtělo prozkoumat a zdokumentovat. Dále by to chtělo zobecnit - zatím je tam příliš mnoho pevných nastavení (třeba cesta k Firefoxu).

wikirobot.plEditovat

Tohle je spíš ukázka, jak lze použít wikirobot.pm. V praxi se spíš vytvoří nový perlový skript, který bude používat wikirobot.pm (a možná i vykyditor.pm).