Korisnik:Edinwiki/Pywikibot pomoć
commonscat.py lomljenje: pywikibot.exceptions.InvalidTitle: Invalid title ''
urediPrimjer: commonscat.py -page:"Početna strana"
Kada se izbacuje nevažeći (prazan) titl u funkciji findCommonscatLink onda ima postoji samo izuzetak pywikibot.NoSuchSite, koji naravno ovu grešku nehvata. Potrebno je dodati i izuzetak za nevalidne titlove. U istoj toj funkciji ispod sljedećeg
except pywikibot.NoSuchSite:
return u''
dodati
except pywikibot.InvalidTitle:
return u''
Sada se primjer kao "Početna strana" jednako ignoriše, ali sada bez lomljenja. :)
commonscat.py - specifični jezici za pretraživanje + ubrzati proces
urediNisu sve wiki stranice toliko povjerljive, a sigurno nije uvijek ni potrebno sve jezičke varijante pretraživati. Ovo bi se moglo ograničiti na samo veće wikipedije. Pošto commonscat.py ovo ne podržaje sam od sebe, mora se kod u istom izmjeniti. U funkciji findCommonscatLink
treba naći sljedeće:
for ipage in page.interwiki():
try:
i zamjeniti sa
for ipage in page.interwiki():
if str(ipage.site()).replace('wikipedia:','') not in ['en','nl','de','fr']:
continue
try:
s čim se samo uzimaju u obzir linkovi sa većih wikipedija en, nl, de i fr. Ovaj spisak se naravno može dopuniti/ukratiti po želji.
commonscat.py lomljenje: "#" u imenu interwiki linka
urediOvo je jedna (koliko ja znam) neriješena greška u PWB-u. Bot se lomi na interwiki vezama koje referiraju na određenu sekciju u članku, tj. kada imaju "#" u imenu. Sa sljedećim se može problem riješiti. Oko linije 518 u funkciji "checkCommonscatLink" dodati odmah poslije "try:", ali prije "commonsPage = pywikibot ..":
if '#' in name:
name = re.sub('#.+','',name)
tako da taj dio izgleda ovako:
..
try:
#This can throw a pywikibot.BadTitle
if '#' in name:
name = re.sub('#.+','',name)
commonsPage = pywikibot.Page(pywikibot.getSite("commons", "commons"),
"Category:" + name)
..
commonscat.py lomljenje: "pywikibot.exceptions.NoSuchSite: Language xx in family wikipedia is obsolete"
urediNaći funkciju def findCommonscatLink (self, page=None) i dodati try/catch oko for-petlje, tj. promjeniti
def findCommonscatLink (self, page=None):
for ipage in page.interwiki():
..
return u''
tako da ono izgleda ovako:
def findCommonscatLink (self, page=None):
try:
for ipage in page.interwiki():
..
return u''
except pywikibot.NoSuchSite:
return u''
Nije idealno, ali rješava "problem" (korisno kada se prelaze spiskovi članaka, kao na primjer sa parametrom "-start").
commonscat.py lomljenje: "pywikibot.exceptions.InvalidTitle: Invalid title 'Category:'"
urediOko reda 525 promjeniti
commonsPage = pywikibot.Page(commonsSite, "Category:" + name)
u
try:
commonsPage = pywikibot.Page(commonsSite, "Category:" + name)
except:
return u''
tako da ako postoji nevažeće ime, da preskoči slučaj.
UnicodeDecodeError kod čitanja datoteka
urediOvo se dešava ako je na primjer ime stranice kodirano u ANSII formatu u nekom fajlu umjesto UTF-8. U slučaju da na primjer imate spisak stranica koje ste ubacili u en:Notepad++ onda morate osigurati da je 'encoding' stavljen na UTF-8. U svakom slučaju se treba podesiti 'encoding' na UTF-8 gdje je to moguće. Tačan bajt i pozicija su ovdje naravno uzeti samo kao primjer.
Unicode greške u Windows cmd-u
urediDa bi se afrikati mogli pokazati/ispisati/učitati treba nekoliko stvari podesiti. Kao prvo se treba font cmd-a promijeniti: klik na vrh prozorčića > Properties > Font > izaberi Lucida Console. Ovo je bitno zato što standardni font ne podržava afrikate. Zatim se kôdna stranica treba promijeniti. Utipkaj u cmd-u: chcp 1250
(standardno je ova cifra na windowsu 850).
Kada se niz izbacuje, u na primjer Python-u, onda i ovo konzekventno treba kodirati. Primjer:
s = 'Neki niz'
print s.encode('1250')
gdje je s
neki određeni niz. Ovo nije zamjena za UTF8, ali je dovoljno za bs-wiki.
Alternativa: Preći na Linux. :)