ویکیپدیا:درخواستهای ربات/افزودن صفحه توضیحات به الگوها
ظاهر
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Reza1615
__version__ = '$Id: $'
import wikipedia,pagegenerators
import re, os, codecs, catlib, sys,query
global site,ensite
wikipedia.config.put_throttle = 0
wikipedia.put_throttle.setDelay()
faChars = u'ءاآأإئؤبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیًٌٍَُِّْٓيك' + u'۰۱۲۳۴۵۶۷۸۹' + u''
site = wikipedia.getSite('fa')
ensite = wikipedia.getSite('en')
#titles = ['template1', 'template2', 'etc.']
def namespacefinder( enlink ,firstsite):
try:
enlink=unicode(str(enlink),'UTF-8').replace(u'[[',u'').replace(u']]',u'').replace(u'en:',u'').replace(u'fa:',u'')
except:
enlink=enlink.replace(u'[[',u'').replace(u']]',u'').replace(u'en:',u'').replace(u'fa:',u'')
enlink=enlink.replace(u' ',u'_')
site = wikipedia.getSite(firstsite)
params = {
'action': 'query',
'prop': 'revisions',
'titles': enlink,
'rvprop': 'user',
'lllimit':500,
}
a=1
try:
categoryname = query.GetData(params,site, encodeTitle = True)
for item in categoryname[u'query'][u'pages']:
users=categoryname[u'query'][u'pages'][item]['revisions']
return users
except:
return False
def englishdictionry( enlink ,firstsite,secondsite):
try:
enlink=unicode(str(enlink),'UTF-8').replace(u'[[',u'').replace(u']]',u'').replace(u'en:',u'').replace(u'fa:',u'')
except:
enlink=enlink.replace(u'[[',u'').replace(u']]',u'').replace(u'en:',u'').replace(u'fa:',u'')
if enlink.find('#')!=-1:
return False
if enlink==u'':
return False
enlink=enlink.replace(u' ',u'_')
site = wikipedia.getSite(firstsite)
sitesecond= wikipedia.getSite(secondsite)
params = {
'action': 'query',
'prop': 'langlinks',
'titles': enlink,
'redirects': 1,
'lllimit':500,
}
try:
categoryname = query.GetData(params,site, encodeTitle = True)
for item in categoryname[u'query'][u'pages']:
case=categoryname[u'query'][u'pages'][item][u'langlinks']
for item in case:
if item[u'lang']==secondsite:
intersec=item[u'*']
break
result=intersec
if result.find('#')!=-1:
return False
return result
except:
return False
def linktranslation(text):
linken = re.findall(ur'\[\[.*?\]\]',text, re.S)
counter=0
for item in linken:
counter+=1
itemmain=item
item=item.replace(u'en:',u'')
if item.find('user:')!=-1 or item.find('User:')!=-1 or item.find('template:')!=-1 or item.find('Template:')!=-1 or item.find('category:')!=-1 or item.find('Category:')!=-1 or item.find('Wikipedia:')!=-1 or item.find('wikipedia:')!=-1 or item.find('Talk:')!=-1 or item.find('talk:')!=-1 or item.find('Help:')!=-1 or item.find('help:')!=-1:
continue
itemen=item.split(u'|')[0].replace(u'[[',u'').replace(u']]',u'').strip()
if text.find(itemmain)!=-1:
itemfa=englishdictionry(itemen ,'en','fa')
wikipedia.output(itemen)
else:
continue
if itemfa==False:
itemen=item.replace(u'[[',u'').replace(u']]',u'').strip()
itemen=itemen.replace(u'[[',u'').replace(u']]',u'')
text=text.replace(u'[['+itemen+u']]',u'@1@'+itemen+u'@2@')
continue
else:
text=text.replace(itemmain,u'@1@'+itemfa+u'@2@')
linken = re.findall(ur'\[\[.*?\]\]',text, re.S)
wikipedia.output(u'\03{lightred}----'+str(counter)+u'/'+str(len(linken))+u'----\03{default}')
wikipedia.output(itemen)
text=text.replace(u'@1@',u'[[').replace(u'@2@',u']]')
return text
def encondition(title):
item=False
itemsub=False
ensubtext=u' '
subpages=[u'documentation',u'template documentation',u'template doc',u'doc',u'documentation, template',u'Documentation',u'Doc']
try:
enpage = wikipedia.Page(ensite, title)
texten=enpage.get()
if texten:
item=True
except wikipedia.IsRedirectPage:
enpage = enpage.getRedirectTarget()
title=enpage.title()
try:
enpage = wikipedia.Page(ensite, title)
texten=enpage.get()
if texten:
item=True
except:
return False,False,ensubtext
except:
return False,False,ensubtext
for subp in subpages:
try:
title2=title+u'/'+subp
enpage = wikipedia.Page(ensite, title2)
texten=enpage.get()
if texten:
itemsub=True
ensubtext=texten
except:
continue
m = re.search(ur'\[\[([a-z]{2,3}|[a-z]{2,3}\-[a-z\-]{2,}|simple):.*?\]\]', texten)
try:
items= m.group(0)
except:
if not englishdictionry(title ,'fa','en'):
if ensubtext.find(u'<includeonly>')!=-1 and ensubtext.find(u'</includeonly>')!=-1:
ensubtext=ensubtext.replace(u'<includeonly>',u'<includeonly>\n[[en:'+title+u']]\n')
else:
ensubtext+=u'<includeonly>\n[[en:'+title+u']]\n</includeonly>'
return item,itemsub,ensubtext
class BasicBot:
def run(self,preloadingGen):
for title in preloadingGen:
if u'/توضیحات' in title.title():
continue
wikipedia.output(title.title())
namespace=namespacefinder( title.title()+u'/توضیحات' ,'fa')
if namespace:
#wikipedia.output(str(namespace))
continue
title=title.title().replace(u'الگو:',u'')
title = 'Template:' + title
if title == re.sub(u'[%s]' % faChars, '', title):
main,sumain,ensubtext=encondition(title)
try:
page = wikipedia.Page(site, title)
text = page.get()
if text.find(u'{{Flag template documentation')!=-1 or text.find(u'{{flag template documentation')!=-1:
continue
except:
continue
if sumain:
pageDoc = wikipedia.Page(site, title+u'/توضیحات')
if ensubtext!=' ':
ensubtext=linktranslation(ensubtext)
pageDoc.put(ensubtext, comment=u'ربات: افزودن توضیحات ([[وپ:درخواستهای ربات/افزودن صفحه توضیحات به الگوها|کد]])', minorEdit=True)
if text.find(u'{{توضیحات}}')!=-1 :
continue
if text.find(u'{{documentation}}')==-1 and text.find(u'{{template documentation}}')==-1 and text.find(u'{{template doc}}')==-1 and text.find(u'{{doc}}')==-1 and text.find(u'{{Doc}}')==-1 and text.find(u'{{documentation, template}}')==-1 and text.find(u'{{Documentation}}')==-1:
if text.find(u'</noinclude>')!=-1 :
text = text.replace(u'</noinclude>', u'\n{{توضیحات}}\n</noinclude>')
elif text.find(u'<noinclude>')!=-1 :
text = text.replace(u'<noinclude>', u'<noinclude>\n{{توضیحات}}\n</noinclude>')
else:
text += u'\n<noinclude>{{توضیحات}}</noinclude>'
try:
page.put(text, comment=u'ربات:افزودن توضیحات ([[وپ:درخواستهای ربات/افزودن صفحه توضیحات به الگوها|کد]])', minorEdit=True)
except:
continue
else:
text=text.replace(u'{{documentation}}',u'{{توضیحات}}').replace(u'{{template documentation}}',u'{{توضیحات}}').replace(u'{{template doc}}',u'{{توضیحات}}').replace(u'{{doc}}',u'{{توضیحات}}').replace(u'{{documentation, template}}',u'{{توضیحات}}').replace(u'{{Documentation}}',u'{{توضیحات}}').replace(u'{{Doc}}',u'{{توضیحات}}')
try:
page.put(text, comment=u'ربات: افزودن توضیحات ([[وپ:درخواستهای ربات/افزودن صفحه توضیحات به الگوها|کد]])', minorEdit=True)
except:
continue
continue
'''
text = page.get()
textDoc = pageDoc.get()
if text.find('[[en:') == -1:
if textDoc.find('[[en:') == -1:
if wikipedia.Page(ensite, title).exists():
text = text.replace(u'</noinclude>', u'\n[[en:%s]]\n</noinclude>' % title)
if text.find('[[en:') == -1:
text += u'<noinclude>\n[[en:%s]]\n</noinclude>' % title
self.add_iw(page, text)
def add_iw(self, text, page):
try:
page.put(text, comment=u'ربات: تشخیص و افزودن میانویکی انگلیسی ([[وپ:درخواستهای ربات/افزودن صفحه توضیحات به الگوها|کد]])', minorEdit=True, botflag=True)
except wikipedia.LockedPage:
wikipedia.output(u"Page %s is locked; skipping." % page.title(asLink=True))
except wikipedia.EditConflict:
wikipedia.output(u'Skipping %s because of edit conflict' % page.title())
except wikipedia.SpamfilterError, error:
wikipedia.output(u'Cannot change %s because of spam blacklist entry %s' % (page.title(), error.url))
'''
def main():
wikipedia.config.put_throttle = 0
wikipedia.put_throttle.setDelay()
gen = None
summary_commandline = None
exceptions = []
namespaces = []
template = None
PageTitles = []
autoText = False
autoTitle = False
genFactory = pagegenerators.GeneratorFactory()
for arg in wikipedia.handleArgs():
if arg == '-autotitle':
autoTitle = True
elif arg == '-autotext':
autoText = True
elif arg.startswith( '-page' ):
if len( arg ) == 5:
PageTitles.append( wikipedia.input( u'Which page do you want to chage?' ) )
else:
PageTitles.append( arg[6:] )
elif arg.startswith( '-except:' ):
exceptions.append( arg[8:] )
elif arg.startswith( '-template:' ):
template = arg[10:]
elif arg.startswith( '-namespace:' ):
namespaces.append( int( arg[11:] ) )
elif arg.startswith( '-summary:' ):
wikipedia.setAction( arg[9:] )
summary_commandline = True
else:
generator = genFactory.handleArg( arg )
if generator:
gen = generator
print namespaces
if PageTitles:
pages = [wikipedia.Page( wikipedia.getSite(),PageTitle ) for PageTitle in PageTitles]
gen = iter( pages )
if not gen:
# syntax error, show help text from the top of this file
wikipedia.stopme()
sys.exit()
if namespaces != []:
gen = pagegenerators.NamespaceFilterPageGenerator( gen,namespaces )
# gen = pagegenerators.RedirectFilterPageGenerator(gen)
preloadingGen = pagegenerators.PreloadingGenerator( gen,pageNumber = 60 )
bot = BasicBot()
bot.run(preloadingGen)
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()