Tema de Viquipèdia:La taverna/Tecnicismes

Pere prlpz (discussiócontribucions)

Des de la darrera vegada que vaig haver d'actualitzar el pywikibot, les instruccions que accedeixen a Wikidata no em funcionen, i no sé si és que ha canviat alguna cosa i ara s'ha de fer diferent o si és que la versió del dia que vaig actualitzar tenia algun problema.

Un codi mínim que no va:

import pywikibot as pwb

site=pwb.Site('ca')
print(site)
page= pwb.Page(site,"pastanaga")
print(page) # fins aquí bé
item=pwb.ItemPage.fromPage(page) # això ja no va
print(item)
repo = site.data_repository() # això tampoc va
print(repo)

I aquest codi, a més de ser el mateix que fa molt que faig servir, és el mateix que s'explica a mw:Manual:Pywikibot/Wikidata, que no sembla que hagi d'estar obsoleta.

A algú li funciona (o no) un codi així? Ara es fa d'una altra manera?

KRLS (discussiócontribucions)

El codi que mostres funciona correctament (sempre que tinguis com a family: wikipedia). Quin error t'apareix?

Pere prlpz (discussiócontribucions)

Pot ser perquè part del missatge parla de family, però m'he mirat el meu user-config.py i hi diu family = 'wikipedia'. És això la family o hi ha alguna cosa més que he de mirar?

A més, el bot m'edita bé a la Viquipèdia. Només tinc problemes quan vull accedir a Wikidata per llegir.

La sortida sencera del programa i els missatges d'error:

wikipedia:ca
[[ca:Pastanaga]]
WARNING: C:\Users\Pere\AppData\Local\Programs\Python\Python38-32\lib\importlib\__init__.py:127: FutureWarning: test_family is deprecated for 2 years and 6 months; use wikipedia_family instead.
  return _bootstrap._gcd_import(name[level:], package, level)

Traceback (most recent call last):
  File "provawd2.py", line 7, in <module>
    item=pwb.ItemPage.fromPage(page)
  File "C:\Users\Pere\Documents\pywikibot\pywikibot\page\__init__.py", line 4029, in fromPage
    if not page.site.has_data_repository:
  File "C:\Users\Pere\Documents\pywikibot\pywikibot\site\_apisite.py", line 966, in has_data_repository
    return self.data_repository() is not None
  File "C:\Users\Pere\Documents\pywikibot\pywikibot\site\_apisite.py", line 996, in data_repository
    return pywikibot.Site(url=url, user=self.username(),
  File "C:\Users\Pere\Documents\pywikibot\pywikibot\tools\_deprecate.py", line 404, in wrapper
    return obj(*__args, **__kw)
  File "C:\Users\Pere\Documents\pywikibot\pywikibot\__init__.py", line 1190, in Site
    code, fam = _code_fam_from_url(url, fam)
  File "C:\Users\Pere\Documents\pywikibot\pywikibot\__init__.py", line 1101, in _code_fam_from_url
    family = Family.load(fam)
  File "C:\Users\Pere\Documents\pywikibot\pywikibot\tools\_deprecate.py", line 404, in wrapper
    return obj(*__args, **__kw)
  File "C:\Users\Pere\Documents\pywikibot\pywikibot\family.py", line 593, in load
    cls = mod.Family.instance
  File "C:\Users\Pere\Documents\pywikibot\pywikibot\tools\__init__.py", line 139, in __get__
    return self.method(owner)
  File "C:\Users\Pere\Documents\pywikibot\pywikibot\family.py", line 76, in instance
    return cls()
  File "C:\Users\Pere\Documents\pywikibot\pywikibot\family.py", line 1031, in __new__
    assert cls.domain
  File "C:\Users\Pere\Documents\pywikibot\pywikibot\tools\__init__.py", line 139, in __get__
    return self.method(owner)
  File "C:\Users\Pere\Documents\pywikibot\pywikibot\family.py", line 1196, in domain
    raise NotImplementedError(
NotImplementedError: Family test needs to define property 'domain'
CRITICAL: Exiting due to uncaught exception <class 'NotImplementedError'>
KRLS (discussiócontribucions)

Tinc la sensació que el teu user-config està bastant desfasat. Estaria bé que el recreéssis Mediawiki:Manual:Pywikibot/user-config.py i féssis "git pull" al repositori. També podries modificar el site i fer site=pwb.Site('ca', 'wikipedia'), així no dependrà de la teva configuració al user-config.

Pere prlpz (discussiócontribucions)

Doncs ho he provat i no em funciona:

  • He canviat la instrucció per site=pwb.Site('ca', 'wikipedia')
  • He creat un user-config.py nou amb create-user-config.py i hi he afegit del vell només la fila de l'authenticate. Abans l'user-config.py (que era senzillet, creat a mà) esmentava tots els projectes i ara només esmenta la Viquipèdia, però suposo que no passa res.
  • M'he baixat el pywikibot de nou i n'he copiat el contingut sobreescrivint els fitxers de la carpeta existent (que era de quan vaig fer el mateix fa un mes i pico).
  • He comprovat que el bot segueix funcionant amb scripts que no llegeixen Wikidata.

Però segueix sortint el mateix error.

Alguna idea?

Joutbis (discussiócontribucions)

Diria que si remenes wikidata, el site no pot ser 'ca'. Jo faig

wdsite= pywikibot.Site("wikidata", "wikidata")

i per gestionar items, passo wdsite.

item = pywikibot.ItemPage.fromPage(pagina,wdsite)

a la variable site (per llegir la pàgina, per exemple), sí que em poso la Viquipèdia.

Pere prlpz (discussiócontribucions)

He tornat amb aquest tema. Informo del progrés:

  • Les comandes d'en Joutbis em donen el mateix error.
  • Instal·lant el python i el pywikibot en un ordinador net, no tinc aquests problemes. El config.py que faig servir és exactament el mateix de l'altre ordinador.

Aleshores suposo que el problema ve de la instal·lació, i que quan vaig baixar una versió nova del pywikibot devia deixar alguna cosa de l'antiga que encara fa nosa.

Resposta a «Pywikibot i Wikidata»