ویکی‌پدیا:درخواست‌های ربات/افزودن الگو ناوباکس به مقالات: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
Xqbot (بحث | مشارکت‌ها)
جز Bot: Replace deprecated <source> tag and "enclose" parameter [https://lists.wikimedia.org/pipermail/wikitech-ambassadors/2020-April/002284.html]
بدون خلاصۀ ویرایش
خط ۳۲:
# Reza (User:reza1615)
# -*- coding: utf-8 -*-
import fa_cosmetic_changespywikibot,re,query json, sys,string re
importfrom wikipedia,pywikibot import pagegenerators,login,json
fasite = wikipediapywikibot.getSiteSite('fa','wikipedia')
wikipedia.config.put_throttle = 0
wikipedia.put_throttle.setDelay()
fasite = wikipedia.getSite('fa','wikipedia')
_cache={}
botversion=u'۷.۶1706'
boxes=[u'infobox',u'Geobox',u'Taxobo', u'جعبه']
 
def solve_redirect(tem,fapage,fapage_redi,delink):
tem = wikipediapywikibot.Page(fasite,tem.title())
try:
text=tem.get()
text=text.replace(u'[[ ',u'[[').replace(u' ]]',u']]').replace(u' |',u'|').replace(u'[['+fapage.title()+u']]',u'[['+fapage_redi.title()+u'|'+fapage.title()+u']]')
text=text.replace(u'[['+fapage.title()+u'|',u'[['+fapage_redi.title()+u'|')
tem.put(text,u'ربات:اصلاح تغییرمسیر')
#wikipedia.output(u'\03{lightyellow}اصلاح تغیرمسیر درون الگو\03{default}')
except:
pass
 
def link_filtering(tem_text,links):
mytext=u'\n'
tem_text_f=tem_text.replace(u'\r',u'')
tem_text_f=tem_text_f.replace(u'\n*',u' ')
tem_text_f=tem_text_f.replace(u' |',u'|').replace(u' |',u'|').replace(u' |',u'|').replace(u' |',u'|')
tem_text_f=tem_text_f.replace(u' =',u'=').replace(u' =',u'=').replace(u' =',u'=').replace(u' =',u'=')
#wikipedia.output(tem_text_f)
our_test_text=re.sub(urr'\{\{ *[Nn]ational.*?squad',u'',tem_text_f)
if our_test_text!=tem_text_f:
for i in tem_text_f.split(u'\n|'):
if i.find(u'p1')==-1 andnot in i.find(u and 'p2')==-1 andnot in i.find(u and 'p3')==-1 andnot in i.find(u and 'p4')==-1 andnot in i.find(u and 'p5')==-1 andnot in i.find(u and 'p6')==-1 andnot in i.find(u and 'p7')==-1 andnot in i.find(u and 'p8')==-1 andnot in i.find(u and 'p9')==-1 andnot in i.find(u and 'p0')==-1 andnot in i.find(u and 'coach')==-1 not in i:
#wikipedia.output(i)
mytext+=i
elif tem_text_f!=re.sub(urr'\{\{ *[nN]avbox with columns',u'',tem_text_f):
for i in tem_text_f.split(u'\n|'):
if re.sub(ur'^ *col\d{1,2} *\=',u'',i)==i:
#wikipedia.output(i)
mytext+=i
elif tem_text_f!=re.sub(urr'\{\{ *[Yy]ear [Nn]obel [pP]rize [Ww]inners',u'',tem_text_f):
for i in tem_text_f.split(u'\n|'):
if re.sub(ur'(chemistry|physics|medicine|economy|literature|peace)',u'',i)==i:
#wikipedia.output(i)
mytext+=i
elif tem_text_f!=re.sub(urr'\{\{ *([Cc]ounty|جستارهای کشور)',u'',tem_text_f):
for i in tem_text_f.split(u'\n|'):
if re.sub(ur'^ *(cr|md|ua|bd|ct|rv|cl|history|geography|politics|military|economy|society|culture|symbols) *\=',u'',i)==i:
#wikipedia.output(i)
mytext+=i
elif tem_text_f!=re.sub(ur'\{\{ *([Uu]S state navigation box|[uU]S county navigation box)',u'',tem_text_f):
for i in tem_text_f.split(u'\n|'):
if i.find(u'body1')==-1 and i.find(u'body2')==-1 and i.find(u'body3')==-1 and i.find(u'body4')==-1 and i.find(u'body5')==-1 and i.find(u'body6')==-1 and i.find(u'body7')==-1 and i.find(u'body8')==-1:
#wikipedia.output(i)
mytext+=i
elif tem_text_f!=re.sub(urr'\{\{ *([Uu]S state navigation box|[uU]S county navigation box)',u'',tem_text_f):
for i in tem_text_f.split(u'\n|'):
for i in tem_text_f.splitrange(u'\n|'1, 9):
if 'body{}'.format(i) not in i:
mytext+=i
else:
list_ = ['list ', 'list=', 'list1', 'list2', 'list3', 'list4', 'list5', 'list6', 'list7', 'list8', 'list9', 'list0', 'فهرست۰', 'فهرست۹', 'فهرست۸', 'فهرست۷', 'فهرست۶', 'فهرست۵', 'فهرست۴', 'فهرست۳', 'فهرست۲', 'فهرست۱', 'content1', 'content2', 'content3', 'content4', 'content5', 'content6', 'content7', 'content8', 'content9', 'content0']
for i in tem_text_f.split(u'\n|'):
for i in tem_text_f.split('\n|'):
if i.find(u'list ')==-1 and i.find(u'list=')==-1 and i.find(u'list1')==-1 and i.find(u'list2')==-1 and i.find(u'list3')==-1 and i.find(u'list4')==-1 and i.find(u'list5')==-1 and i.find(u'list6')==-1 and i.find(u'list7')==-1 and i.find(u'list8')==-1 and i.find(u'list9')==-1 and i.find(u'list0')==-1 and i.find(u'فهرست۰')==-1 and i.find(u'فهرست۹')==-1 and i.find(u'فهرست۸')==-1 and i.find(u'فهرست۷')==-1 and i.find(u'فهرست۶')==-1 and i.find(u'فهرست۵')==-1 and i.find(u'فهرست۴')==-1 and i.find(u'فهرست۳')==-1 and i.find(u'فهرست۲')==-1 and i.find(u'فهرست۱')==-1 and i.find(u'content1')==-1 and i.find(u'content2')==-1 and i.find(u'content3')==-1 and i.find(u'content4')==-1 and i.find(u'content5')==-1 and i.find(u'content6')==-1 and i.find(u'content7')==-1 and i.find(u'content8')==-1 and i.find(u'content9')==-1 and i.find(u'content0')==-1:
for j in #wikipedia.output(u'>>>>>>'+i)list_:
mytext+=if j not in i:
#wikipedia.output( mytext+=i)
 
black_text=u' '
dict={u'<noinclude>':u'</noinclude>',u'{{یادکرد':u'}}',u'<ref':u'</ref',u'{{cite':u'}}',u'{{Cite':u'}}'}
for a in dict:
count=0
سطر ۹۹ ⟵ ۹۸:
if count>1:
black_text+=i.split(dict[a])[0]
black_links2 = re.findall(urr'\[\[(.*?)(?:\||\]\])',black_text+mytext, re.S)
#black_links2=[]
#for i in black_links:
# black_links2.append(i.replace(u']]',u'').replace(u'[[',u'').strip().split(u'|')[0])
new_links,delink=[],[]
for i in links:
itest=i.split(u'|')[0].replace(u'_',u' ').replace(u'&nbsp;',u' ')
if not itest.strip():
delink.append(i)
if itest in black_links2 or itest in new_links or u':' in i:
continue
else:
if itest==u'آذرشهر':
new_links.append(i)
continue
itest=itest.strip()
itest=re.sub(ur'[۱۲۳۴۵۶۷۸۹۰]',u'',itest)
itest=re.sub(ur'\((میلادی|قمری|پیش از میلاد|قبل از میلاد)\)',u'',itest)
b_list=[u'کاپیتان (فوتبال)',u'استان',u'دهستان',u'کشور',u'شهر',u'شهرستان',u'بخش',u'فروردین',u'اردیبهشت',u'خرداد',
u'تیر',u'مرداد',u'شهریور',u'مهر',u'آبان',u'آذر',u'دی',u'بهمن',u'اسفند',u'ژانویه',u'فوریه',u'مارس',u'ژوئیه',u'ژوئن',
u'آوریل',u'اوت',u'سپتامبر',u'نوامبر',u'دسامبر',u'می',u'اکتبر']
itest=re.sub(ur'('+u'|'.join(b_list).replace(u')',u'\)').replace(u'(',u'\(')+u')',u'',itest)
if not itest.strip():
delink.append(i)
continue
itest=re.sub(ur'[^صثقفغعهخحجچشسیبلاتنمکگظطزرذدپوژآيئؤًٌٍَُِّْٔ]',u'',itest)
if not itest.strip():
continue
new_links.append(i)
#for i in new_links:
# wikipedia.output(i)
return new_links,delink
 
def boxfind(text_en):
text_en=text_en.replace(u'{{ ',u'{{').replace(u'{{ ',u'{{').replace(u'{{template:',u'{{').replace(u'{{Template:',u'{{').replace(u'\r',u'')
start=False
box=u'\n'
diff=1
linebaz,linebasteh=0,0
سطر ۱۴۲ ⟵ ۱۳۶:
up_our_box=our_box[0].upper()+our_box[1:]
lower_our_box=our_box[0].lower()+our_box[1:]
regex_result=re.findall(u'(\{\|([\n\s]+|)\{\{([\s]+|)'+our_box+u')',text_en, re.IGNORECASE)
if regex_result:
if regex_result[0][0].strip():
pre_template=u'{|'
post_tempate=u'|}'
text_en=text_en.replace(u'{| ',u'{|').replace(u'{| ',u'{|').replace(u'{|\n',u'{|').replace(u'{|\n',u'{|')
text_en=text_en.replace(u' |}',u'|}').replace(u' |}',u'|}').replace(u'\n|}',u'|}').replace(u'\n|}',u'|}')
else:
pre_template,post_tempate=u'',u''
lines=text_en.split('\n')
for line in lines:
if line==u'':
continue
if line.find(pre_template+u'{{'+lower_our_box)!=-1 :# lower case
start=True
linebaz,linebasteh=0,0
box+=pre_template+u'{{'+lower_our_box+line.split(pre_template+u'{{'+lower_our_box)[1]+'\n'
linebaz += stringline.count( line,pre_template+"{{" )
linebasteh += stringline.count( line,"}}"+post_tempate )
diff=linebaz-linebasteh
continue
if line.find(pre_template+u'{{'+up_our_box)!=-1 :# upper case
start=True
linebaz,linebasteh=0,0
box+=pre_template+u'{{'+up_our_box+line.split(pre_template+u'{{'+up_our_box)[1]+'\n'
linebaz += stringline.count( line,pre_template+"{{" )
linebasteh += stringline.count( line,"}}" +post_tempate)
diff=linebaz-linebasteh
continue
if start==True and diff!=0:
linebaz += stringline.count( line,pre_template+"{{" )
linebasteh += stringline.count( line,"}}"+post_tempate )
diff=linebaz-linebasteh
box+=line+'\n'
سطر ۱۸۰ ⟵ ۱۷۴:
if box.strip():
break
return box.replace(u'}}|}',u'}}\n|}')
 
def Get_box (txt):
سطر ۱۸۶ ⟵ ۱۸۰:
if my_box.strip():
return my_box.strip()
txt=txt.replace(u'\r',u'')
lines=txt.split('\n')
matn=' '
for line in lines:
linebaz=stringline.count(line,'{{')
linebaste=stringline.count(line,'}}')
diff=linebaz-linebaste
if diff==0:
سطر ۱۹۷ ⟵ ۱۹۱:
linebaz=0
linebaste=0
matn+=line+u'\n'
my_box=''
for our_box in boxes:
our_box=our_box.strip()
try:
my_box= re.search(urr'(\{\{\s*['+our_box[0].lower()+our_box[0].upper()+urr']'+our_box[1:]+urr'[_\s](?:\{\{.*?\}\}|[^\}])*\}\})',matn, re.S).group(1)# if Template box has other name please chang this regex
my_box=my_box.replace(u'$AAAA$',u'{{').replace(u'!BBBB!',u'}}')
break
except:
سطر ۲۱۲ ⟵ ۲۰۶:
 
def addtext (fapage,text,addtemplate,addtemplate2,msg_clean,username_r,tempetype):
text_t=text.replace(u'_',u' ')
if text_t.find(u'{{ابهام‌زدایی')!=-1 orin text_t.find(u or '{{نمایه')!=-1 orin text_t.find(u or '{{نام کوچک')!=-1 orin text_t.find(u or '{{نام خانوادگی')!=-1 orin text_t.find(u or '{{مقالات مجموعه‌نمایه')!=-1 in text_t:
return False
text=text.replace(addtemplate+u'\n',u'')
if tempetype=='navbox':
if text.find(u'رده:')!=-1 in text:
num=text.find(u'[[رده:')
text=text[:num]+addtemplate+u'\n'+text[num:]
else:
text+=u'\n'+addtemplate
elif tempetype=='sidebar':
ourbox=Get_box (text)
if not ourbox:
text=addtemplate+u'\n'+text
my_text_result=re.findall(urr'\{\{(?:ویکی[‌ ]?سازی|منبع|بدون منبع|لحن|تمیزکاری|طفره‌آمیز|نامفهوم|تبلیغات|بهبود منبع|طرفداری|درستی|ادغام با|ادغام از|ادغام|در دست ویرایش ۲|تازه درگذشته|اصلاح ترجمه|رده-نیاز)(?:.*?)?\}\}',text, re.IGNORECASE)
if my_text_result:
for i in my_text_result:
text=i+u'\n'+text.replace(i+u'\n',u'').replace(i,u'')
else:
return False
سطر ۲۳۵ ⟵ ۲۲۹:
return False
 
text,cleaning_version,msg_clean2=fa_cosmetic_changes.fa_cosmetic_changes(text,fapage)
try:
fapage.put(text,u'[[وپ:ابزارک|افزودن ناوباکس]] '+botversion+u'> '+addtemplate2+u' (درخواست [['+username_r+u']])'+msg_clean)
#wikipedia.output(u'\03{lightred}++++'+fapage.title()+u'\03{default}')
return True
except:
سطر ۲۴۷ ⟵ ۲۴۰:
temps=[]
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.split(u'#')[0].strip()
enlink=enlink.replace(u' ',u'_')
if _cache.get(tuple([enlink, 'templatequery'])):
return _cache[tuple([enlink, 'templatequery'])]
if enlink==u'':
_cache[tuple([enlink, 'templatequery'])]=False
return False
سطر ۲۶۷ ⟵ ۲۶۰:
try:
categoryname = querypywikibot.GetDatadata.api.Request(params,fasite)
site=fasite, parameters=params)
for item in categoryname[u'query'][u'pages']:
categoryname = templateha=categoryname[u'query'][u'pages'][item][u'templates'].submit()
for item in categoryname[u'query'][u'pages']:
templateha=categoryname['query']['pages'][item]['templates']
break
for temp in templateha:
temps.append(temp[u'title'].replace(u'_',u' ').replace(u'الگو:',u'').replace(u'template:',u'').strip())
_cache[tuple([enlink, 'templatequery'])]=temps
return temps
سطر ۲۸۱ ⟵ ۲۷۶:
 
def check_user_edits(username):
username=username.replace(u' ',u'_')
if _cache.get(tuple([username, 'check_user_edits'])):
return _cache[tuple([username, 'check_user_edits'])]
سطر ۲۹۱ ⟵ ۲۸۶:
}
try:
usernamequery = querypywikibot.GetDatadata.api.Request(params,fasite)
site=fasite, parameters=params)
if usernamequery[u'query'][u'users'][0][u'editcount']>1000:
usernamequery = usernamequery.submit()
if usernamequery[u'query'][u'users'][0][u'editcount']>1000:
_cache[tuple([username, 'check_user_edits'])]=True
return True
سطر ۳۱۷ ⟵ ۳۱۴:
def add_nav(preloadingGen,username_r):
for tem in preloadingGen:
tem_title=tem.title().replace(u'الگو:',u'')
#user_pass,First_user=check_user(tem)
if not re.sub(ur'[^صثقفغعهخحجچشسیبلاتنمکگظطزرذدپوژآيئؤًٌٍَُِّْٔ]',u'',tem_title).strip():
#if not user_pass:
# continue
#passport=True
enchar=u'qwertyuiopasdfghjklzxcvbnm'
tem_title=tem.title().replace(u'الگو:',u'')
if not re.sub(u'[^صثقفغعهخحجچشسیبلاتنمکگظطزرذدپوژآيئؤًٌٍَُِّْٔ]',u'',tem_title).strip():
continue
if tem_title.find(u'/')!=-1 orin tem_title.find(u or '\\')!=-1 in tem_title:
continue
try:
سطر ۳۳۱ ⟵ ۳۲۳:
except:
continue
tem_text=tem_text.replace(u'{{ ',u'{{').replace(u'{{ ',u'{{').replace(u'{{الگو:',u'{{').replace(u'{{Template:',u'{{').replace(u'{{template:',u'{{')
TempTemplates=templatequery(tem.title())
#if not user_passTempTemplates:
# continue
 
if not u'Navbox' in TempTemplates and not u'نوار جانبی' in TempTemplates:
continue
if u'Navbox' in TempTemplates:
tempetype=u'navbox'
if u'نوار جانبی' in TempTemplates:
tempetype=u'sidebar'
 
added_template=tem.title().replace(u'الگو:',u'').replace(u'template:',u'').replace(u'Template:',u'')
if tem.namespace()!=10:
continue
سطر ۳۴۷ ⟵ ۳۴۱:
redirect_list=[]
for i in redirects:
redirect_list.append(i.title().replace(u'الگو:',u'').replace(u'template:',u'').replace(u'Template:',u''))
links=tem.linkedPages()
link_t=[]
سطر ۳۵۸ ⟵ ۳۵۲:
links=[x for x in link_t if x not in link_t2]
links,delink=link_filtering(tem_text,links)
#wikipedia.output(u'-----------------------------------------')
old_tem_text=tem_text
for nonlink in delink:
tem_text=tem_text.replace(u'[['+nonlink+u']]',nonlink.split(u'|')[0])
if old_tem_text!=tem_text:
tem.put(tem_text,u'ربات:برداشتن پیوندهای نالازم')
#wikipedia.output(u'\03{lightred}delinking\03{default}')
tem.put(tem_text,u'ربات:برداشتن پیوندهای نالازم')
added_links=[]
for faTitle in links:
#wikipedia.output(u'-------------'+faTitle)
try:
fapage=wikipediapywikibot.Page(fasite, faTitle)
text=fapage.get()
except wikipediapywikibot.IsRedirectPageexceptions.IsRedirectPageError:
fapage_redi = fapage.getRedirectTarget()
try:
سطر ۳۸۰ ⟵ ۳۷۳:
continue
except:
#wikipedia.output(u'\03{lightred}link was red\03{default}')
continue
#wikipedia.output(u'\03{lightblue}--'+fapage.title()+u'---------\03{default}')
msg=u' '
text,cleaning_version,msg_clean=fa_cosmetic_changes.fa_cosmetic_changes(text,fapage,msg)
 
old_text=text
for i in redirect_list:
text=text.replace(u'{{'+i+u'}}',u'{{'+added_template+u'}}').replace(u'{{'+i+u'|',u'{{'+added_template+u'|')
fatemplates=templatequery(fapage.title())
text=text.replace(u'{{ ',u'{{').replace(u' }}',u'}}').replace(u'{{الگو:',u'{{').strip()
if not fatemplates:
continue
if text.find(u'{{'+added_template+u'}}')==-1 not in text and (not added_template in fatemplates):
addtemplate2=u'[[الگو:'+added_template+u']]'
addtemplate=u'{{'+added_template+u'}}'
addtext_result= addtext (fapage,text,addtemplate,addtemplate2,msg_clean' ',username_r,tempetype)
if addtext_result:
added_links.append(faTitle)
msg=u' '
#wikipedia.output(u'added= {{\03{lightpurple}'+added_template+u'\03{default}}}')
continue
if old_text!=text:
try:
fapage.put(text,u'ربات:اصلاح تغییرمسیر ناوباکس‌')
#wikipedia.output(u'\03{lightpurple}ربات:اصلاح تغییرمسیر ناوباکس\03{default}')
except:
pass
سطر ۴۱۱ ⟵ ۴۰۰:
my_result={}
if added_links:
my_result['msg']=u'الگو به «'+u'»، «'.join(added_links)+u'» افزوده شده!'
else:
my_result['msg']=u'الگو در همهٔ مقالات موجود است!'
print (json.dumps(my_result, ensure_ascii=False))
 
def main():
gen = None
username_r=u'User:Yamaha5'
genFactory = pagegenerators.GeneratorFactory()
for arg in wikipediasys.handleArgs()argv:
if arg.startswith('-newtem'):
arg=arg.replace(':','')
if len(arg) == 7:
genfa = pagegenerators.NewpagesPageGenerator(100site=fasite, Falsetotal=100, None,namespaces=(10))
else:
genfa = pagegenerators.NewpagesPageGenerator(site=fasite, total=int(arg[8:]), False, None,namespaces=(10))
gen = pagegenerators.PreloadingGenerator( genfa,60)
else:
gen = genFactory.handleArghandle_arg( arg )
if not gen:
wikipedia.stopme()
sys.exit()
add_nav([faPage]gen,username_r)
preloadingGen = pagegenerators.PreloadingGenerator(gen,pageNumber = 60)
#preloadingGen = pagegenerators.NamespaceFilterPageGenerator(gen,10)
add_nav(preloadingGen,username_r)
 
 
سطر ۴۴۲ ⟵ ۴۲۸:
main()
else:
faTitlefaPage =unicode pywikibot.Page(fasite, sys.argv[1],'UTF-8')
username_r=unicodeadd_nav([faPage],sys.argv[2],'UTF-8')
faPage = pywikibot.Page(fasite, faTitle)
add_nav([faPage],username_r)
</syntaxhighlight>