Usuari:ArxivaBot/Documentació

Esta pàgina pretén ser el lloc on organitzar tot l'algoritme i l'estructura necessària per al bot. En certs aspectes podria no coincidir amb el codi actual, ja que és sobre un plantejament inicial tot i que deuria evolucionar en un futur al plantejament que hi figura. També volia deixar en algun lloc la seua història i alguna cosa extra com les diferències entre la versió de l'estàndard i la nostra així com els motius per fer-la, com també una secció de tasques pendents, millores, errors, ...

Història modifica

L'script pretén poder ser compatible amb la configuració oferida per l'archivebot del pywikibot que utilitzava en la versió més antiga la pàgina en:User:Misza/config a mode de plantilla, ací adaptada en el seu temps per Vriullop amb el seu bot VriuBot i la respectiva plantilla Usuari:VriuBot/Arxivador amb l'objectiu principal d'arxivar les pàgines de Taverna, Viquipèdia:Canvi de nom d'usuari, Viquipèdia:Bots/Sol·licituds, Viquipèdia:Petició de marca de bot i Viquipèdia:Petició als administradors. Després es va fer càrrec en Coet amb l'ArxivaBot, en esta ocasió es va centralitzar la configuració per a cada arxivament en una sola pàgina: Usuari:ArxivaBot/Arxivador tot i que es mantingué la compatibilitat amb l'archivebot per aquells usuaris que seguien mantenint la platnilla Usuari:VriuBot/Arxivador.

Al 2023 després d'alguns anys d'inactivitat va ser impossible executar l'archivebot del pywikibot ja que el programa considera els fils com 'massa antics' i l'antic script de l'ArxivaBot havia quedat totalment obsolet. Duia sense arxivar des del 4 d'agost 2020, tot i que, en Coet havia deixat la VP des de l'1 de desembre 2018, el bot havia seguit operant durant un any i nou mesos, de forma autònoma.

Estructura modifica

L'estructura és per mig de classes. S'utilitza en part la biblioteca del pywikibot i algunes altres de l'estàndard. Hi ha classes auxiliars que hereten alguna classe del pywikibot i d'altres pròpies per a gestionar l'axivament.

Les classes auxiliars són:

  • ExtendedPage que incorpora funcionalitats addicionals a la classe Page com és obtenir la mida en octets de la pàgina

tal com es definix a meta.

  • Utils: classe amb diferents funcionalitats com treure un objecte Python datetime a partir d'una data en string, o un parxe per als mesos de les dates que mai s'havia solucionat a nivell de pywikibot i obligava a tenir la pròpia versió per a poder executar-lo a la Viquipèdia. També conté patrons d'expressions regulars utilitzades en algunes classes a la resta del codi.

Les classes pròpies són:

  • ArchiveConfig: configuració per saber com s'ha d'arxivar les seccions d'una pàgina.
  • ArchiveCollector: Recol·lecta les diferents pàgines a arxivar, tant les que apareixen a User:ArxivaBot/Arxivador com aquelles que utilitzen a mode de plantilla la pàgina VriuBot/Arxivador i en un futur es pretén abordar aquelles que criden a User:MiszaBot/config tot i que a la VP no hi ha cap, l'objectiu és mantenir la compatibilitat amb este ús.
  • ArchiveSource: pàgina font que pot contindre seccions a arxivar.
  • ArchiveTarget: pàgina on s'arxivaran les seccions d'ArchiveSource
  • ArchiveThread: secció que s'ha d'arxivar.

Classe ArchiveConfig modifica

La classe determina la configuració sobre el mode d'extracció de seccions a arxivar de la pàgina font com el mode d'inserció de seccions a desar a les pàgines destí. Es dinstingix entre configuració d'extracció utilitzada per la classe ArchiveSource i configuració d'inserció per a la classe ArchiveTarget.

Classe ArchiveCollector modifica

La classe ha d'iterar sobre les diferents pàgines que es volen arxivar obtenint-ne la configuració en que es vol arxivar. Té la configuració de cada objecte i li passa la configuració d'extracció a la classe ArchiveSource i la configuració d'inserció a la classe ArchiveTarget.

Classe ArchiveSource modifica

La classe obté totes les seccions de la pàgina i determina si s'han d'arxivar, és la pàgina font. S'iterarà sobre les diferents pàgines d'arxius, pàgines destí, i quan les seccions estiguen totes arxivades es procedirà la la supressió d'estes a la pàgina font. La pàgina font és la que conté la plantilla de configuració en cas d'emprar una configuració com Usuari:VriuBot/Arxivador o en:User:MiszaBot/config, o l'indicada a Usuari:ArxivaBot/config a la taula de configuració sota la columna page.

Depenint de la configuració, una pàgina font pot generar diverses pàgines de destí, per exemple en el cas que es vulguen arxivar per any o any i mes i que s'hagen d'arxivar dos o mes seccions de diferents anys o mesos.

Classe ArchiveTarget modifica

La classe es genera per a la pàgina destí on s'ha d'arxivar alguna secció de la pàgina font.

Algorisme modifica

  1. Carreguem les pàgines fonts de discussió de la taula Usuari:ArxivaBot/Arxivador amb una instància de SourceTalkCollector
  2. Es crea una instància per cada pàgina de discussió de la classe SourceTalkPage
    1. La classe obté quantes seccions (fils) hi ha.
    2. La classe ens diu quines seccions s'han d'arxivar i a quina pàgina destí, en text pla
    3. Si en són suficients, és a dir, si la pàgina no es queda buida i té el mínim que se li ha configurat es passen als distints TargetArchives
  3. TargetArchive accepta la recepció dels fils a arxivar
    - si la pàgina destí és una subpàgina de la pàgina font
    - si estan en l'espai de User Talk o Project Talk té la capacitat
    - i no se supera el límit configurat o límit màxim establert pel MediaWiki.
    1. TargetArchive notifica a Summary la recepció i l'arxivament.
  4. Una vegada iterats tots els TargetArchives, i estos estiguen arxivats es dóna pas a SourceTalkPage per a que elimine els fils arxivats
  5. Si algun fil no s'ha pogut arxivar per mancança de dades, sol ser perquè no hi ha cap data, s'ha de passar a l'atribut rejected_threads de tipus llista de SourceTalkCollector que contindrà la pàgina font, la pàgina destí i el fil.
  6. Carreguem les pàgines fonts de discussió, esta vegada per mig de la inclusió de la plantilla Usuari:ArxivaBot/config

Diferències entre archivebot i archivebot_cawiki modifica

Degut a certes diferències que mai van ser ateses per part de l'equip pywikipediabot (nom antic de l'actual pywikibot) es va haver de recórrer a una versió adaptada a la Viquipèdia en català que anomenarem archivebot_cawiki, en front a l'estandard del pywikipediabot anomenat archivebot. Principalment l'arxivebot no funcionava a causa de les dates, els mesos del MediaWiki no corresponen als mesos del Python que utilitza els del sistema operatiu en ús, ja que al sistema té un punt a l'abreviatura a més que el mes d'agost al MediaWiki és ago quan deuria ser ag. i també i havia problemes de codificació per a març.

A banda en Vriullop aprofità per a afegir una funiconalitat que consistia en reconéixer si la discussió contenia la plantilla {{fet}}, {{no fet}} o {{tancat}} per a poder arxivar la secció en lloc que només fóra per superar en x temps la darrera data de signatura d'un usuari, ja que l'ús principal era poder arxivar pàgines com les de les diferents Tavernes i altres de manteniment de la Viquipèdia que es podien arxivar només en cas de tindre alguna d'estes plantilles.

En una altra fase es va recórrer a una taula per introduir les diferents pàgines que es volien arxivar, centralitzant així la configuració i permetent que es puguera canviar quasevol paràmetre a un sol indret en lloc de recórrer les diferents pàgines afectades.

Al 2023 se simplifica la configuració d'alguns paràmetres permetent que %(year)d o %(month)02d s'escriga simplement com {year} o {month}. I es va prescindir del paràmetre counter fent que el bot detecte automàticament quina és la darrera pàgina, en cas que en tinga.

Tècnicament el codi es completament diferent tot i que respecta la proposta i el propòsit de l'archivebot de Misza13 integrat posteriorment a la biblioteca del pywikibot i suporta la configuració que utilitza afavorint la compatibilitat per complet.

Revisar modifica

  • Que quan s'assigne una nova pàgina destí Summary no se quede amb la vella.
  • fer que {{discussió arxivada}} siga la plantilla per defecte en pàgines de discussió d'usuari i {{arxivada}} la de l'espai de nom Viquipèdia.
  • Que la supressió de la secció funcione Thread.to_text() utilitza f'== {self.title} =={self.body}' i potser algú escriga manulament el títol sense els espais.
  • Que actualitze la taula d'arxius a la pàgina de discussió quan se'n cree de noves?
  • regexp secció pilla == (.+?) == sense ser començament de línia.   Fet!
Usuari Discussió:Vriullop 5 <SourceConfig title: "Usuari Discussió:Vriullop" algo: <Algo old 30 d>>
	1 editors de plantilles 2023-01-12 07:13:00 0y 0m 22d 12h 39' 4"  size: 1280 len: 1255 deprecated: False
	2 Ocultar IP 2023-01-31 14:02:00 0y 0m 3d 5h 50' 4"  size: 1175 len: 1154 deprecated: False
	3 Sobre l'ArxivaBot 2023-02-03 07:40:00 0y 0m 0d 12h 12' 4"  size: 7867 len: 7740 deprecated: False
	4 {self.title} 2023-02-03 19:38:00 0y 0m 0d 0h 14' 4"  size: 540 len: 530 deprecated: False
	5 Sobre javascript 2023-02-03 19:22:00 0y 0m 0d 0h 30' 4"  size: 1045 len: 1026 deprecated: False
DEPRECATED: 0/5
  • Què passa si és per temps (~/{year}/{month} en lloc de ~/{counter}) i no hi ha més espai a la pàgina?
  • {counter:5} indicar el nombre de zeros significatius amb dos punts, no superior a 5
  • restricció als noms d'espais
  • archive ha de ser subpàgina de page