Usuari:PereBot/robot inclou discussions recents

Programa per incloure les discussions recents a Viquiprojecte:Discussions desateses/discussions. Una versió actualitzada d'aquest codi (per funcionar amb Python 3 el 2021) és a https://github.com/pere-prlpz/viquipedia/blob/master/discussions.py i la versió del CobainBot és a https://phabricator.wikimedia.org/source/tool-cobain/browse/master/public_html/pywikilab/inc_disc_rc.py

# -*- coding: utf-8 -*-

import sys
sys.path.append('C:\core')
import pywikibot
import re,urllib,urllib2,json,time
from pywikibot import pagegenerators

# El programa comença aquí
def main():
        informe=u"Actualització: --~~~~\n\n"
        informeno=u"=Discussions noves no incloses=\n\n"
        #Compilació dels regex fora del loop per optimitzar
        re_trad = re.compile(ur"\{\{([Tt]radu[iï]t|[Cc]opiat) de.*?\}\}")
        re_sta = re.compile(ur"\{\{STA\|.*?\}\}")
        re_usr = re.compile(ur"\[\[(Usuari|\{\{ns:2\}\}).*?\]\]")
        re_span1 = re.compile(ur"<(span|font).*?>")
        re_span2 = re.compile(ur"</(span|font)>")
        re_negreta = re.compile(ur"'''")
        re_cometes = re.compile(ur"''|\n")
        re_imatge = re.compile(ur"--.?\[\[(File|Fitxer).*?\]\]") # imatge a la signatura
        for urlweb in pagweb:
                pllista=urllib.urlopen(urlweb) 
                print "obert"
                try:
                        pbrut=pllista.read()
                except:
                        print "error en llegir. esperant"
                        time.sleep(60)
                        try:
                                pbrut=pllista.read()
                        except:
                                print "error en llegir. esperant"
                                time.sleep(100)
                                try:
                                        pbrut=pllista.read()
                                except:
                                        print "error en llegir. esperant"
                                        time.sleep(200)
                                        pbrut=pllista.read()
                jpag=json.loads(pbrut)
                #print jpag
                dpags=jpag["query"]["recentchanges"]
                #print lcats
                pags=[]
                for el in dpags:
                        tit=el["title"]
                        print tit
                        pags.append(pywikibot.Page(site,tit))
                #print pags

                for pag in pagegenerators.PreloadingGenerator(pags):
                        tit=pag.title()
                        linia=u"=[[{}]]=\n".format(tit)
                        linia=linia+u"<small>[[:{}|Article]]</small> - ".format(pag.toggleTalkPage().title())
                        linia=linia+u"<small class=\"editlink noprint plainlinks\">[{{fullurl:"+tit+u"|action=edit}} Edita la discussió]</small>\n\n"
                        linia=linia+u"{{"+tit+u"}}\n\n"
                        try:
                                text=pag.get()
                        except pywikibot.IsRedirectPage:
                                linia=u"*[[{}]] (redirecció)\n".format(tit)
                                informeno=informeno+linia
                                continue
                        except pywikibot.NoPage:
                                linia=u"*[[{}]] (esborrada)\n".format(tit)
                                informeno=informeno+linia
                                continue
                        llarg0=len(text)
                        textnet=re.sub(re_trad,u"",text)
                        textnet=re.sub(re_sta,u"",textnet)
                        textnet=re.sub(re_usr,u"",textnet)
                        textnet=re.sub(re_span1,u"",textnet)
                        textnet=re.sub(re_span2,u"",textnet)
                        textnet=re.sub(re_negreta,u"",textnet)
                        textnet=re.sub(re_cometes,u"",textnet)
                        textnet=re.sub(re_imatge,u"",textnet)
                        textnet=textnet.replace(u"\n","")
                        llargnet=len(textnet)
                        hihatrad=re.search(re_trad,text)
                        if hihatrad and llargnet < 35:
                                print tit, u"Només etiqueta"
                                linia=u"*[[{}]] (només conté l'etiqueta de còpia o traducció)\n".format(tit)
                                informeno = informeno + linia
                        elif u"{{discussió arxivada}}" in text:
                                print tit, u"Discussió arxivada"
                                linia=u"*[[{}]] (discussió arxivada)\n".format(tit)
                                informeno = informeno + linia
                        else:
                                informe = informe + linia
                        print tit,llarg0,llargnet
        informe=informe+informeno
        paginforme.put(informe,u"Robot inclou discussions recents")
        pywikibot.stopme()

if __name__ == "__main__":
        site=pywikibot.getSite('ca')
        paginforme=pywikibot.Page(site,u"Viquiprojecte:Discussions desateses/discussions")
        pagweb=[]
        pagweb.append("https://ca.wikipedia.org/w/api.php?action=query&list=recentchanges&format=json&rcnamespace=1&rclimit=150&rctype=new") #últimes 150 pàgines de discussió noves
        pagweb.append("https://ca.wikipedia.org/w/api.php?action=query&list=recentchanges&format=json&rcnamespace=15&rclimit=6&rctype=new") #últimes pàgines de categoria discussió noves
        pagweb.append("https://ca.wikipedia.org/w/api.php?action=query&list=recentchanges&format=json&rcnamespace=11&rclimit=6&rctype=new") #últimes pàgines de plantilla discussió noves
        pagweb.append("https://ca.wikipedia.org/w/api.php?action=query&list=recentchanges&format=json&rcnamespace=13&rclimit=5&rctype=new") #últimes pàgines
        pagweb.append("https://ca.wikipedia.org/w/api.php?action=query&list=recentchanges&format=json&rcnamespace=101&rclimit=5&rctype=new") #últimes pàgines
        pagweb.append("https://ca.wikipedia.org/w/api.php?action=query&list=recentchanges&format=json&rcnamespace=103&rclimit=5&rctype=new") #últimes pàgines
        pagweb.append("https://ca.wikipedia.org/w/api.php?action=query&list=recentchanges&format=json&rcnamespace=829&rclimit=4&rctype=new") #últimes pàgines
        main()