User:RonBot/5/Source1

from wikitools import * import time import datetime import urllib import json import userpassbot #Bot password import warnings import re import mwparserfromhell

from wikitools import *
import time
import datetime
import urllib
import json
import userpassbot #Bot password
import warnings
import re
import mwparserfromhell
import datetime
import sys
import SRconfig

site = wiki.Wiki() #Tell Python to use the English Wikipedia's API
site.login(userpassbot.username, userpassbot.password) #login

#routine to autoswitch some of the output - as filenames have accented chars!
def pnt(s):
    try:
        print(s)
    except UnicodeEncodeError:
        print(s.encode('utf-8'))
      
def startAllowed():
    textpage = page.Page(site, "User:RonBot/5/Run").getWikiText()
    if textpage == "Run":
        return "run"
    else:
        return "no"

def allow_bots(text, user):
    user = user.lower().strip()
    text = mwparserfromhell.parse(text)
    for tl in text.filter_templates():
        if tl.name.matches(['bots', 'nobots']):
            break
    else:
        return True
    print "template found" #Have we found one
    for param in tl.params:
        bots = [x.lower().strip() for x in param.value.split(",")]
	if param.name == 'allow':
            print "We have an ALLOW" # allow found
            if ''.join(bots) == 'none': return False
            for bot in bots:
                if bot in (user, 'all'):
                    return True
        elif param.name == 'deny':
            print "We have a DENY" # deny found
            if ''.join(bots) == 'none':
                print "none - true"
                return True
	    for bot in bots:
                if bot in (user, 'all'):
                    pnt(bot)
                    pnt(user)
                    print "all - false"
                    return False
    if (tl.name.matches('nobots') and len(tl.params) == 0):
        print "match - false"
        return False
    return True

def SearchReplace(search, size):
    params = {'action':'query',
             'list':'search',
             'srsearch':search, 
             'srnamespace':0,
             'srlimit':size
             }
    print search
    #print "SR.params"
    result="" #clear out previous run
    request = api.APIRequest(site, params) #Set the API request
    #print "SR.request"
    result = request.query(False)
    #print result
    totalhits=result['query']['searchinfo']['totalhits']
    print "search", search
    print "TotalHits this search", totalhits
    if size=="max":
        size=totalhits
    if totalhits>0:
        for loopvar in range(0, size):
            #print result
            #print ""
            pagetitle = result['query']['search'][loopvar]['title']
            pagetitletext = pagetitle.encode('utf-8')
            pnt(pagetitletext)
            pagepage = page.Page(site, pagetitle)
            #print "main.pagepage"
            pagetext = pagepage.getWikiText() 
            pagetext=re.sub(r'{{[Ss]tart\s*?box}}','{{S-start}}', pagetext)
            pagetext=re.sub(r'{{[Ee]nd\s*?box}}','{{S-end}}',pagetext)
            #Stop if there's nobots
            stop = allow_bots(pagetext, "RonBot")
            if not stop:
                continue
            print "Bot allowed to edit page"
            #if SRconfig.tagged>=50:
            #    sys.exit('done for now') #Code to limit number of items
            #print "============================================TOP OF ORIG======================"
            #pnt(pagetext)
            #print "============================================BOTTOM OF ORIG======================"
            pagelower=pagetext.lower()
            Infoboxes=pagelower.count('{{infobox')
            InfoAlbum=pagelower.count('{{infobox album')
            InfoSong=pagelower.count('{{infobox song')
            InfoSingle=pagelower.count('{{infobox single')
            print "Infobox check", Infoboxes, InfoAlbum, InfoSong, InfoSingle
            Infobox=InfoAlbum+InfoSong+InfoSingle
            #if pagetitletext<>"User:Ronhjones/Sandbox4":  #OUT
            #    Infoboxes=99                              #OUT
            if Infoboxes==Infobox:
                Manual=pagetext.count('Category:Music pages for manual succession box removal')
                if 's-start' in pagelower:
                    SStart=1
                else:
                    SStart=0
                print "SStart", SStart
                print "Manual", Manual
                if Manual==0:
                    if SStart==1:
                        Nav1=pagelower.count('{{navbox')
                        Nav2=pagelower.count('{{navbox.?}}')+pagetext.count('{{navboxes.?}}')
                        print "Navboxes Total",Nav1
                        print "Navboxex Closed", Nav2
                        if Nav1==Nav2: #If Nav1 <> Nav2 then there is a Navbox constructed in the page.
                            #Look for a box With header = then whitespace then {{S-start) to {{S-end}} or {{end}
                            #If found repace with the = found and add BOTREM
                            #Both types of replace done twice - first time with extra blank line
                            pagetext = re.sub(r'==\s{{[Ss]-start[\S\s]*?{{[Ss][\s\S]*?[Ss{][-{][Ee]nd}}\n*','==BOTREM', pagetext)
                            #Is there a header to the header?
                            pagetext = re.sub(r'==\n.*?=*?BOTREM','==BOTREM', pagetext)
                            #Is there a header to the header again? Three headers in a row would be extreme!
                            pagetext = re.sub(r'==\n.*?=*?BOTREM','==BOTREM', pagetext)
                            #Remove whole line if a header with BOTREM at end
                            pagetext = re.sub(r'.*?=*?BOTREM', '', pagetext)
                            #Look for a box {{S-start) to {{S-end}} or {{end}
                            pagetext = re.sub(r'{{[Ss]-start[\S\s]*?{{[Ss][\s\S]*?[Ss{][-{][Ee]nd}}\n*', '', pagetext)
                            try:
                                pagepage.edit(text=pagetext, bot=True, summary="(Task 5 - Removal of succession box as per [[Wikipedia:Manual of Style/Record charts]]") #(DO NOT UNCOMMENT UNTIL BOT IS APPROVED)
                                SRconfig.tagged += 1
                                print "writing changed page"
                            except:
                                print"Failed to write"
                        else:
                            #Tag the Page for manual navbox removal
                            pagetext=pagetext+"\r\n[[Category:Music pages for manual succession box removal]]"
                            try:
                                pagepage.edit(text=pagetext, bot=True, summary="(Task 5 - Tagging for manual removal of succession box as per [[Wikipedia:Manual of Style/Record charts]]") #(DO NOT UNCOMMENT UNTIL BOT IS APPROVED)
                                SRconfig.tagged += 1
                                print "writing page, tagged manual"
                            except:
                                print "failed to write manual"
                    else:
                        print "No S-starts"
                else:
                    print "Manual cat alredy done"
            else:
                print "Bad Infoxes Found"
            #print "++++++++++++++++++++++++++++++++++++++++++++TOP OF NEW+++++++++++++++++++++++++" 
            #pnt(pagetext)
            #print "++++++++++++++++++++++++++++++++++++++++++++BOTTOM OF NEW++++++++++++++++++++"
            print "End of Page"
            print "Pages done so far", SRconfig.tagged
            print ""
    else:
        print "no pages to do"
        print ""
    return


def main():
    go = startAllowed() #Check if task is enabled
    if go == "no":
        sys.exit('Disabled Task')
    #parameters for API request
    SRconfig.tagged=0
    search='hastemplate:"Infobox song" insource:"{{s-start}}"'
    SearchReplace(search,"max")
    search='hastemplate:"Infobox album" insource:"{{s-start}}"'
    SearchReplace(search,"max")
    search='hastemplate:"Infobox single" insource:"{{s-start}}"'
    SearchReplace(search,"max")
    search='hastemplate:"Infobox song" insource:"{{start box}}"'
    SearchReplace(search,"max")
    search='hastemplate:"Infobox album" insource:"{{start box}}"'
    SearchReplace(search,"max")
    search='hastemplate:"Infobox single" insource:"{{start box}}"'
    SearchReplace(search,"max")
        
if __name__ == "__main__":
    with warnings.catch_warnings():
        warnings.simplefilter("ignore", FutureWarning)
        main()

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.