See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Utilisateur:Ske/watch.py - Wikipédia

Utilisateur:Ske/watch.py

Un article de Wikipédia, l'encyclopédie libre.

Petit script que j'utilise pour mettre à jour Wikipédia:Maintenance des bandeaux. Je le fais tourner sur mac, il faudra prévoir quelques adaptation pour le faire fonctionner sur une autre machine.


#  *-* coding: mac_roman *-*
#  open a webpage (from PythonWikipediaBot)
#
import urllib, re, sets

class MyURLopener(urllib.FancyURLopener):
    version="PythonWikipediaBot/1.0"


def getUrl( url):
        uo = MyURLopener()
        f = uo.open(url)
        text = f.read()
        # Find charset in the content-type meta tag
        contentType = f.info()['Content-Type']
        R = re.compile('charset=([^\'\"]+)')
        m = R.search(contentType)
        if m:
            charset = m.group(1)
        else:
            print "WARNING: No character set found"
            # UTF-8 as default
            charset = 'utf-8'
        # Convert HTML to Unicode
        try:
            text = unicode(text, charset, errors = 'strict')
        except UnicodeDecodeError, e:
            print e
            print (u'ERROR: Invalid characters found on %s, replaced by \\ufffd.' % url) 
            # We use error='replace' in case of bad encoding.
            text = unicode(text, charset, errors = 'replace')
        return text
      

#
#  parse li tags
#
import HTMLParser
class liParser (HTMLParser.HTMLParser):
    def reset( self ):
        self.curLine = []
        self.result = []
        self.li = False
        HTMLParser.HTMLParser.reset(self)
    def handle_starttag(self, tag, attrs):
        if tag=="li":
            self.li = True
    def handle_endtag(self, tag,):
        if tag=="li":
            self.li = False
            if self.curLine:
                self.result.append(u"".join(self.curLine ))
                self.curLine = []
    def handle_data(self,       data):
        if self.li:
            self.curLine.append(data)

#
# remove non-encyclopedic namespaces
#
def clearNamespaces(lines):
    removable = (u"Wikip\xe9dia:", u"Utilisateur:", u"Discuter:", u"Discussion Mod\xe8le:", 
                 u"Mod\xe8le:",  u"Aide:",  u"Cat\xe9gorie:",  
                 u"Discussion Utilisateur:",  u"Discussion Wikip\xe9dia:")
    result = []
    
    for l in lines:
        append = True
        for tag in removable:
            if l.startswith(tag):
                append = False
                break
        if append:
            if l.endswith("(inclusion) "):
                l = l[:-13]
            result.append(l)
    return result





#
#  return  the  articles wich are lised since more than n days
#

import time,pickle
def compare_old (data, old_path, days):
    # read old articles
    olds = {}
    try:
        f = open(old_path)
    except IOError:
        pass
    else:
        olds = pickle.load(f)
        f.close()
    
    now = time.time() / (24*60*60)
    
    reolds = {}
    result = sets.Set()
    
    for x in data:
        try:
            date = olds[x]
            if now-date>days:
                result.add(x)
        except KeyError:
            date = now
        reolds[x]=date
    
    f = open(old_path, "w")
    pickle.dump(reolds, f)
 
    result = list(result)
    result.sort()
    return result



#
# 
#

import os,tempfile 

def list_link(output, target, old_path, days, header):
    url = url = "http://fr.wikipedia.org/w/index.php?title=Special:Whatlinkshere/%s&limit=900&from=0"%target
    txt = getUrl(url)
    
    start = txt.index("<!-- start content -->")
    end = txt.index("<!-- end content -->")
    txt = txt[start:end]
    #print repr(txt)
    parser = liParser()
    parser.feed(txt)
    result =  clearNamespaces(parser.result)
    #print result
    result = compare_old(result, old_path, days)
    print result
    if result:
 
        output.write(header.encode('utf_16'))
        for i in result:
            line = u"* [[:"+i+u"]]\n"
            output.write(line.encode('utf_16'))
 
    return result


#
# 
#
f,path = tempfile.mkstemp( ".txt", "")
f = os.fdopen(f, "w")



header_wikt =  u"""
==Wiktionnaire==
''Cette section liste les articles possédant un bandeau "pour wiktionnaire" depuis plus d'une semaine. 
Vous êtes invités à faire ce transfert au plus tôt.''

"""
list_link(f, "Mod%C3%A8le:Pour_Wiktionnaire", "./pour_wikt", 7, header_wikt)



header_wikisource =  u"""
==Wikisource==
''Cette section liste les articles possédant un bandeau "pour wikisource" depuis plus d'une semaine. 
Vous êtes invités à faire ce transfert au plus tôt.''

"""
list_link(f, "Mod%C3%A8le:Pour_Wikisource", "./pour_wikisource", 7, header_wikisource)


header_supression = u"""
==Pages à supprimer==
''Cette section liste les articles possédant un bandeau "supprimer" depuis plus d'un mois. 
La page devrait être effacées par un administrateur ou le bandeau devrait être retiré.''
"""
list_link(f, "Mod%C3%A8le%3ASuppression", "./supression", 30, header_supression)


header_supimg = u"""
==Images à supprimer==
''Cette section liste les images possédant un bandeau "suppression images" depuis plus d'un mois. 
L'image devrait être effacées par un administrateur ou le bandeau devrait être retiré.''
"""
list_link(f, "Mod%C3%A8le:Suppression_image", "./supimg", 30, header_supimg)

header_licence = u"""

==Images avec un problème de licence==
''Cette section liste les images possédant un bandeau "licence inconnue" depuis plus d'un mois. 
L'image devrait être effacées par un administrateur ou le bandeau devrait être retiré.''
"""
list_link(f, "Mod%C3%A8le:Licence_inconnue", "./lienceimg", 30, header_licence)

header_copie_site = u"""
==Copie de site==
''Cette section liste les articles possédant un bandeau "copie de site" depuis plus d'une semaine. 
Elles vont être effacées par un administrateur si aucune autorisation n'a été fournie.''

"""
list_link(f, "Mod%C3%A8le%3ACopie_de_site", "./copie_site", 7, header_copie_site)


header_copyright = u"""

==Copyright==
''Cette section liste les articles possédant un bandeau "copie à vérifier" depuis plus d'une semaine. 
Elles devraient être proposées sur [[Wikipédia:Pages à supprimer]] si aucune autorisation n'a été fournie.''

"""
list_link(f, "Mod%C3%A8le:Copie_%C3%A0_v%C3%A9rifier", "./copyright", 7, header_copyright)
## TODO faire un outil pour lister automatiquement les pages sur [[Wikipédia:Pages à supprimer]] ? 

f.close()
os.system("open "+path)


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -