Korisnik:Edinwiki/Pywikibot pomoć

S Wikipedije, slobodne enciklopedije
Idi na navigaciju Idi na pretragu

commonscat.py lomljenje: pywikibot.exceptions.InvalidTitle: Invalid title ''[uredi | uredi izvor]

Primjer: 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[uredi | uredi izvor]

Nisu 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[uredi | uredi izvor]

Ovo 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"[uredi | uredi izvor]

Nać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:'"[uredi | uredi izvor]

Oko 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[uredi | uredi izvor]

Ovo 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[uredi | uredi izvor]

Da 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. :)