ويكيبيديا:بوت/التصانيف المعادلة
الاسم | التصانیف المعادلة |
---|---|
اللغة | بايثون |
الرخصة | CC-BY-SA 3.0 |
تجريب | نعم |
قدرات | اضافة التصانیف المعادلة علی اساس ویکیبدیا الانجلیزیة |
الصانع | Reza1615 |
المستخدم | عباس |
المتغيرات | یتقبل هذا البوت التصانیف الانجلیزیة و ایضاً Arguments of pywikipedia |
النتيجة | اضافة التصانیف للصفحات التی لاتملک التصنیف المعادل فی الویکی الانجلیزیة |
نموذج تحریر | نموذج |
التحميل | من هنا |
قالب:لا للتصنيف المعادل
[عدل]فی حال إضافة {{لا للتصنيف المعادل}} لأي صفحة هذا البوت یترك تلك الصفحة دون أن یجري تعدیل أي إضافة تصنیف إلیها. بعد إضافة {{لا للتصنيف المعادل}} الصفحة تلقائیًا تضاف إلى تصنيف:صفحات لا تقبل التصنيف المعادل
طریقة الاستفادة
[عدل]1. إضافة التصانیف المعادلة إلى کل الصفحات
newar.py -start:!
2. إضافة التصانیف المعادلة إلی قائمة من المقالات أکتب اسم المقالات بالعربیة وأحفظهم بملف من نوع نصي (txt). کل اسم لازم أن یوضع ب [[]]. علی سبیل المثال أعمل کالنموذج التالي وأحفظ الملف به Example.txt
[[قطر]] [[أردن]] [[كويت]] [[عراق]]
newar.py -file:Example.txt
3. إضافة التصانیف المعادلة إلی کل المقالات في کل التصانیف
newar.py -start:category:!
4. إضافة التصانیف المعادلة إلی مقالة خاصة
newar.py -page:name
بدلاً من ال name علیکم وضع اسم المقالة باستعمال هذا المبدل. علی سبیل المثال لإضافة التصانیف المعادلة لمقالة جمال عبدالناصر علینا العمل کالتالي
newar.py -page:%D8%AC%D9%85%D8%A7%D9%84%20%D8%B9%D8%A8%D8%AF%D8%A7%D9%84%D9%86%D8%A7%D8%B5%D8%B1
5. إضافة التصانیف المعادلة إلی مقالات تصنیف خاص
newar.py -cat:name
بدلاً من ال name علیکم وضع اسم التصنیف باستعمال هذا المبدل. علی سبیل المثال لاضافة التصانیف المعادلة لمقالات تصنيف:أعضاء جامعة الدول العربية علینا العمل کالتالي
newar.py -cat:%D8%A3%D8%B9%D8%B6%D8%A7%D8%A1%20%D8%AC%D8%A7%D9%85%D8%B9%D8%A9%20%D8%A7%D9%84%D8%AF%D9%88%D9%84%20%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9
الکود
[عدل]انسخ الکود التالي فی ملف بصیغة py :
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Reza(User:reza1615), 2011
#
# Distributed under the terms of the CC-BY-SA 3.0 .
# -*- coding: utf-8 -*-
"""
-file - Work on all pages given in a local text file.
Will read any [[wiki link]] and use these articles.
Argument can also be given as "-file:filename".
-cat - Work on all pages which are in a specific category.
Argument can also be given as "-cat:categoryname".
-encat - Finding the pages that uses the category in en.wikipedia and add categories to pages that they have interwiki in en wiki to home wiki
-recentcat - Useful for automatic bots and it should add with -namespace:14 -recenchanges:N (N=Number of categories that you want to work on)
-newcat - Adding article to new categories -newcat:N (N=Number of categories that you want to work on)
-page - Only edit a specific page.
Argument can also be given as "-page:pagetitle". You can give this
parameter multiple times to edit multiple pages.
-ref - Work on all pages that link to a certain page.
Argument can also be given as "-ref:referredpagetitle".
-filelinks - Works on all pages that link to a certain image.
Argument can also be given as "-filelinks:ImageName".
-links - Work on all pages that are linked to from a certain page.
Argument can also be given as "-links:linkingpagetitle".
-start - Work on all pages in the wiki, starting at a given page. Choose
"-start:!" to start at the beginning.
NOTE: You are advised to use -xml instead of this option; this is
meant for cases where there is no recent XML dump.
-except:XYZ - Ignore pages which contain XYZ. If the -regex argument is given,
XYZ will be regarded as a regular expression.
-summary:XYZ - Set the summary message text for the edit to XYZ, bypassing the
predefined message texts with original and replacements inserted.
-template:XYZ-
-blog: -checking for blog sources. if it is in page it will sent page link to defined address
-source - checking the articles sources . if it doesn't have . it will send page link to defined address
-namespace:n - Number of namespace to process. The parameter can be used
multiple times. It works in combination with all other
parameters, except for the -start parameter. If you e.g. want to
iterate over all user pages starting at User:M, use
-start:User:M.
-always - Don't prompt you for each replacement
other: -
"""
import catlib,query,config
import pagegenerators,re,sys#,fa_cosmetic_changes
import wikipedia,codecs,string,time
from xml.dom import minidom
wikipedia.config.put_throttle = 0
wikipedia.put_throttle.setDelay()
page_list_run=[]
#-----------------------------------------------version-----------------------------------------
try:
import MySQLdb
except:
wikipedia.output(u'\03{lightred}you should use this code only on toolserver\03{default}')
wikipedia.stopme()
sys.exit()
versionpage = wikipedia.Page( wikipedia.getSite('ar'),u'مستخدم:Elph/التصانیف المعادلة/version' )
lastversion=versionpage.get().strip()
version=u'٢٥'
if lastversion!=version:
wikipedia.output(u"\03{lightred}Your bot dosen't use the last verion please update me!\03{default}")
wikipedia.stopme()
sys.exit()
#-----------------------------------------------------------------------------------------------
def namespacefinder( enlink ,firstsite):
try:
enlink=unicode(str(enlink),'UTF-8').replace(u'[[',u'').replace(u']]',u'').replace(u'en:',u'').replace(u'ar:',u'')
except:
enlink=enlink.replace(u'[[',u'').replace(u']]',u'').replace(u'en:',u'').replace(u'ar:',u'')
enlink=enlink.replace(u' ',u'_')
site = wikipedia.getSite(firstsite)
params = {
'action': 'query',
'prop': 'langlinks',
'titles': enlink,
'redirects': 1,
'lllimit':500,
}
a=1
if a:
categoryname = query.GetData(params,site)
for item in categoryname[u'query'][u'pages']:
fanamespace=categoryname[u'query'][u'pages'][item]['ns']
return fanamespace
else:
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'ar:',u'')
except:
enlink=enlink.replace(u'[[',u'').replace(u']]',u'').replace(u'en:',u'').replace(u'ar:',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)
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 catquery(enlink,firstsite,hidden):
cats=[]
try:
enlink=unicode(str(enlink),'UTF-8').replace(u'[[',u'').replace(u']]',u'').replace(u'en:',u'').replace(u'ar:',u'')
except:
enlink=enlink.replace(u'[[',u'').replace(u']]',u'').replace(u'en:',u'').replace(u'ar:',u'')
enlink=enlink.split(u'#')[0].strip()
if enlink==u'':
return False
enlink=enlink.replace(u' ',u'_')
site = wikipedia.getSite(firstsite)
if hidden:
params = {
'action': 'query',
'prop': 'categories',
'titles': enlink,
'redirects': 1,
'cllimit':500,
}
else:
params = {
'action': 'query',
'prop': 'categories',
'titles': enlink,
'redirects': 1,
'clshow':'!hidden',
'cllimit':500,
}
try:
categoryname = query.GetData(params,site)
for item in categoryname[u'query'][u'pages']:
categoryha=categoryname[u'query'][u'pages'][item][u'categories']
break
for cat in categoryha:
cats.append(cat[u'title'])
return cats
except:
return False
def templatequery(enlink,firstsite):
temps=[]
try:
enlink=unicode(str(enlink),'UTF-8').replace(u'[[',u'').replace(u']]',u'').replace(u'en:',u'').replace(u'ar:',u'')
except:
enlink=enlink.replace(u'[[',u'').replace(u']]',u'').replace(u'en:',u'').replace(u'ar:',u'')
enlink=enlink.split(u'#')[0].strip()
if enlink==u'':
return False
enlink=enlink.replace(u' ',u'_')
site = wikipedia.getSite(firstsite)
params = {
'action': 'query',
'prop':'templates',
'titles': enlink,
'redirects': 1,
'tllimit':500,
}
try:
categoryname = query.GetData(params,site)
for item in categoryname[u'query'][u'pages']:
templateha=categoryname[u'query'][u'pages'][item][u'templates']
break
for temp in templateha:
temps.append(temp[u'title'].replace(u'_',u' '))
return temps
except:
return False
def subcatquery(enlink,firstsite):
cats=[]
try:
enlink=unicode(str(enlink),'UTF-8').replace(u'[[',u'').replace(u']]',u'').replace(u'en:',u'').replace(u'ar:',u'')
except:
enlink=enlink.replace(u'[[',u'').replace(u']]',u'').replace(u'en:',u'').replace(u'ar:',u'')
enlink=enlink.split(u'#')[0].strip()
if enlink==u'':
return False
enlink=enlink.replace(u' ',u'_')
site = wikipedia.getSite(firstsite)
params = {
'action': 'query',
'list': 'categorymembers',
'cmtitle': enlink,
'cmtype':'subcat',
'cmlimit': 500,
}
try:
categoryname = query.GetData(params,site)
for item in categoryname[u'query'][u'categorymembers']:
categoryha=item[u'title']
wikipedia.output(categoryha)
cats.append(categoryha)
if cats!=[]:
return cats
except:
return False
def sitop(link,wiki):
link=link.replace( u'[[',u'' ).replace( u']]',u'' ).strip()
wikipedia.config.put_throttle = 0
wikipedia.put_throttle.setDelay()
site = wikipedia.getSite(wiki)
try:
page = wikipedia.Page( site,link )
if wiki=='ar':
cats=page.categories(api=True)
else:
cats=page.categories()
return cats
except wikipedia.IsRedirectPage:
return False
except:
return False
def category(PageTitle,koltuple):
counters=0
PageTitle=PageTitle.replace( u'[[',u'' ).replace( u']]',u'' ).strip()
listacategory=[PageTitle]
listacategory2=[]
for catname in listacategory:
counters+=1
if counters>150:
break
gencat=subcatquery(catname,'ar')#---function
if not gencat:
time.sleep(5)
gencat=subcatquery(catname,'ar')
if gencat:
if len (gencat)>100:
continue
for subcat in gencat:
subcat2=u'[['+subcat+u']]'
if subcat in listacategory:
continue
else:
listacategory.append(subcat)
if subcat2 in koltuple:
listacategory2.append(subcat2)
listacategory2.append(' ')
return listacategory2
if listacategory==[]:
return False
else:
return listacategory
def pagefafinder(encatTitle):
cats=[]
try:
item=unicode(str(encatTitle),'Ascii').replace('[[en:','').replace(']]','').replace(' ','_').replace('Category:','')
except:
item=str(encatTitle).replace('[[en:','').replace(']]','').replace(' ','_').replace('Category:','')
#-----------------start sql---------------------------------------
queries ='SELECT /* SLOW_OK */ ll_title FROM page JOIN categorylinks JOIN langlinks WHERE cl_to = "'+item+'" AND cl_from=page_id AND page_namespace = 0 AND page_id =ll_from AND ll_lang = "ar" AND page_namespace = 0 GROUP BY ll_title ;'
site1 = wikipedia.getSite('en')
TS_DB_HOST = 'sql-s3'
MY_CNF = '~/.my.cnf'
#cn = MySQLdb.connect("enwiki-p.db.toolserver.org", db = site1.dbName(), read_default_file = '~/.my.cnf')#For toolserver
cn = MySQLdb.connect("enwiki.labsdb" ,db = site1.dbName(),user = config.db_username, passwd = config.db_password)#For labs
cur = cn.cursor()
cur.execute(queries)
results = cur.fetchall()
cn.close()
#------------------end of sql--------------------------------------------
for raw in results:
cats.append(raw)
if cats!=[]:
return cats
else:
return False
def duplic(catfa,radeh):
catfa=catfa.replace(u'ar:',u'')
radeht=u' '
if len(radeh.strip())<1 :
return False
if len(catfa.replace(u',',u'').strip())<1 :
return radeh
for x in catfa.split(','):
catfax=x.split('|')[0].split(']]')[0].replace('[[','').strip()
for y in radeh.split(','):
radehy=y.split('|')[0].split(']]')[0].replace('[[','').strip()
if catfax==radehy:
radeh= radeh.replace(y,'')
break
for rad in radeh.split(','):
radeht+=rad+'\n'
return radeht
def pedar(catfa,radehi,link):
link=link.replace( u'[[',u'' ).replace( u']]',u'' ).strip()
hazflist=catfa
if englishdictionry( link ,'ar','en')==False :
return hazflist
radehi=radehi.replace('\n\n','\n').replace('\n\n','\n').replace('\n\n','\n').replace('\n\n','\n').replace('\n\n','\n').strip()
kol=catfa.strip()+radehi.replace('\n',',').strip()
kol=kol.replace(',,',',').strip()
radehtest=radehi.replace('\n',',').replace(',,',',').strip().split(',')
koltuple=kol.split(',')
for x in range(0,len(radehtest)):
if radehtest[x].find(u'مقالات')!=-1 or radehtest[x].find(u'المقالات')!=-1 or radehtest[x].find(u'صفحات')!=-1:
continue
catslistx=category(radehtest[x],koltuple)#----------category function
if catslistx==False :
continue
for y in range(0,len(koltuple)):
if radehi.find(radehtest[x])==-1:
break
for catlis in catslistx:
try:
catlis=unicode(str(catlis),'UTF-8').strip()
except:
catlis=catlis.strip()
if koltuple[y].strip() == catlis:
if radehi.find(radehtest[x])!=-1:
hazfi=radehtest[x].replace(u'[[',u'').replace(u']]',u'').replace(u'تصنيف:',u'').replace(u'Category:',u'').strip()
try:
hazfi = re.search(u'\[\[ *(?:[Cc]ategory|تصنيف) *:*%s*(?:\|.*?|)\]\]'% hazfi, radehi).group(0)
radehi=radehi.replace(hazfi,'')
except:
radehi=radehi.replace(u'(',u' اااا ').replace(u')',u' بببب ')
hazfi=hazfi.replace(u'(',u' اااا ').replace(u')',u' بببب ')
hazfi = re.search(u'\[\[ *(?:[Cc]ategory|تصنيف) *:*%s*(?:\|.*?|)\]\]'% hazfi, radehi).group(0)
radehi=radehi.replace(hazfi,'')
radehi=radehi.replace(u' اااا ',u'(').replace(u' بببب ',u')')
radehi=radehi.replace('\n\n','\n').strip()
break
radehi=radehi.replace(',','\n').strip()
return radehi
def run(gen):
for pagework in gen:
radehf,catsfas,maghalehen,radeh,finallRadeh=' ',' ',' ',' ',' '
shod=False
try:
pagework=unicode(str(pagework),'UTF-8')
except:
pagework=pagework
if pagework in page_list_run:
continue
else:
page_list_run.append(pagework)
wikipedia.output(u'-----------------------------------------------')
wikipedia.output(u'opening....'+pagework)
catsfa=sitop(pagework,'ar')
if catsfa==False :
continue
for tem in catsfa:
if unicode(str(tem),'UTF-8').find(u'تصنيف:مقالات أنشئت بواسطة معالج إنشاء المقالات')!=-1:
continue
catsfas+=unicode(str(tem),'UTF-8')+','
maghalehen=englishdictionry( pagework ,'ar','en')
if not maghalehen:
continue
pageblacklist=[u'Sandbox']
passing=True
for item in pageblacklist:
if maghalehen.find(item.lower())!=-1:
passing=False
break
if not passing:
continue
if namespacefinder(maghalehen ,'en')!=namespacefinder(pagework ,'ar'):
wikipedia.output(u"\03{lightred}Interwikis have'nt the same namespace\03{default}")
continue
catsen=catquery(maghalehen,'en',False)
if not catsen:
time.sleep(5)
catsen=catquery(maghalehen,'en',False)
if not catsen:
continue
templateblacklist=[u'Wikipedia category',u'sockpuppet',u'Empty category',u'tracking category',u'container category',u'hiddencat',u'backlog subcategories',u'Stub category']
nameblcklist=[u'Current events',u'Tracking',u'articles',u'Surnames',u'Loanword',u'Words and phrases',u'Given names',u'Human names',u'stubs',u'Nicknames']
for cat in catsen:
passport=True
temples=str(templatequery(cat,'en')).replace( u'_',u' ' ).strip()
cat=cat.replace( u'_',u' ' ).strip()
if namespacefinder(pagework ,'ar')!=14:
for black in templateblacklist:
if temples.lower().find(black.lower())!=-1:
passport=False
break
for item in nameblcklist:
if cat.lower().find(item.lower())!=-1:
passport=False
break
if not passport:
continue
interwikifarsibase=englishdictionry( cat ,'en','ar')
if interwikifarsibase:
if interwikifarsibase.find(u',')!=-1:
try:
siteerror=wikipedia.getSite('ar')
errorpage=wikipedia.Page(siteerror,u'user:Elph/CategoriesWithBadNames')
texterror=errorpage.get()
if texterror.find(interwikifarsibase)==-1:
texterror+=u'\n#[[:'+interwikifarsibase+u']]'
errorpage.put(texterror,u'بوت: اعلان عن الأسم الخطأ للتصنيف')
continue
except:
continue
interwikifarsi=u'[['+interwikifarsibase+u']]'
if cat ==englishdictionry( interwikifarsibase ,'ar','en'):
radeh+=interwikifarsi+u','
radehf=duplic(catsfas,radeh)
if radehf==False:
continue
radehf=radehf.replace('\n\n','\n').replace('\n\n','\n').replace('\n\n','\n').replace('\n\n','\n').strip()
if radehf=="":
continue
if catsfas.strip()!=u'':
finallRadeh=pedar(catsfas,radehf,pagework)
else:
finallRadeh=radehf.replace(',','\n')
if finallRadeh==False:
continue
if finallRadeh.replace('\n','').strip()=='':
continue
if finallRadeh:
site = wikipedia.getSite('ar')
link=pagework.replace( u'[[',u'' ).replace( u']]',u'' ).strip()
page = wikipedia.Page( site,link )
try:
text=page.get()
except wikipedia.IsRedirectPage:
continue
except:
wikipedia.output(u'\03{lightred}Could not open page\03{default}')
continue
namespaceblacklist=[1,2,3,5,7,8,9,11,13,15,101,103]
if page.namespace() in namespaceblacklist:
continue
if text.find(u'{{لا للتصنيف المعادل}}')!=-1 or text.find(u'{{قالب:لا للتصنيف المعادل}}')!=-1 or text.find(u'{{شطب}}')!=-1 or text.find(u'{{nobots}}')!=-1 or text.find(u'{{تحويل تصنيف}}')!=-1:
wikipedia.output(u'\03{lightred}this page had {{لا للتصنيف المعادل}} or {{nobots}} so it is skipped!\03{default}' )
continue
#---------------------------------------remove repeative category-----------------
for item in finallRadeh.split(u'\n'):
item2=item.split(u'|')[0].replace(u'[[',u'').replace(u']]',u'').strip()
radehbehtar=templatequery(item2,'ar')
if radehbehtar:
if text.find(u'{{لا للتصنيف المعادل}}')!=-1 or text.find(u'{{قالب:لا للتصنيف المعادل}}')!=-1 or text.find(u'{{شطب}}')!=-1 or text.find(u'{{nobots}}')!=-1 or text.find(u'{{تصنيف بهتر')!=-1:
wikipedia.output(u'\03{lightred}this page had {{لا للتصنيف المعادل}} or {{nobots}} so it is skipped!\03{default}' )
finallRadeh=finallRadeh.replace(item,u'').replace(u'\n\n',u'\n')
continue
textremove=text.replace(u' |',u'|').replace(u' |',u'|').replace(u' |',u'|').replace(u'| ',u'|').replace(u'| ',u'|')
if textremove.find(u'{{لا للتصنيف الميلادي}}')!=-1 or textremove.find(u'{{لا للتصنيف الميلادي}}')!=-1:
if item.find(u'(الميلادي)')!=-1 or item.find(u'(قبل الميلاد)')!=-1 or item.find(u'(قبل الميلاد)')!=-1:
finallRadeh=finallRadeh.replace(item,u'').replace(u'\n\n',u'\n')
if textremove.find(u'تصنيف:وفيات')!=-1:
if item.find(u'أشخاص على قيد الحياة')!=-1 or item.find(u'أشخاص_على_قيد_الحياة')!=-1:
finallRadeh=finallRadeh.replace(item,u'').replace(u'\n\n',u'\n')
if textremove.find(item2+u']]')!=-1 or textremove.find(item2+u'|')!=-1:
finallRadeh=finallRadeh.replace(item,u'').replace(u'\n\n',u'\n')
if finallRadeh.replace(u'\r',u'').replace(u'\n',u'').strip()==u'':
continue
finallRadeh=finallRadeh.replace(u'\r',u'').replace(u'\n\n\n\n',u'\n').replace(u'\n\n\n',u'\n').replace(u'\n\n',u'\n').replace(u'\n\n',u'\n').replace(u'\n\n',u'\n').replace(u'\n\n',u'\n').replace(u'\n\n',u'\n').replace(u'\n\n',u'\n') #---------------------------------------------------------------------------------
if text.find(ur'تصنيف:')!=-1 and page.namespace()!=10:
num=text.find(ur'[[تصنيف:')
text=text[:num]+finallRadeh+'\n'+text[num:]
else:
m = re.search(ur'\[\[([a-z]{2,3}|[a-z]{2,3}\-[a-z\-]{2,}|simple):.*?\]\]', text)
if m:
if m.group(0)==u'[[en:Article]]':
try:
if string.count(text,u'[[en:Article]] --->')==1:
finallRadeh=finallRadeh.replace(u'\r',u'').replace(u'\n\n\n\n',u'\n').replace(u'\n\n\n',u'\n').replace(u'\n\n',u'\n').replace(u'\n\n',u'\n').replace(u'\n\n',u'\n').replace(u'\n\n',u'\n').replace(u'\n\n',u'\n').replace(u'\n\n',u'\n').strip()
text=text.split(u'[[en:Article]] --->')[0]+u'[[en:Article]] --->\n'+finallRadeh+text.split(u'[[en:Article]] --->')[1]
else:
if page.namespace()==10:
continue
text+='\n'+finallRadeh
except:
if page.namespace()==10:
continue
text+='\n'+finallRadeh
else:
num=text.find(m.group(0))
text=text[:num]+finallRadeh+'\n'+text[num:]
else:
if page.namespace()==10:
continue
text+='\n'+finallRadeh
wikipedia.output(u'\03{lightpurple} Added=='+finallRadeh+u"\03{default}")
radehfmsg=finallRadeh.strip().replace(u'\n',u'+')
if len(radehfmsg.split(u'+'))>4:
numadd=str(len(radehfmsg.split(u'+')))#.replace(u'0',u'۰').replace(u'1',u'۱').replace(u'2',u'۲').replace(u'3',u'۳').replace(u'4',u'۴').replace(u'5',u'۵').replace(u'6',u'۶').replace(u'7',u'۷').replace(u'8',u'۸').replace(u'9',u'۹')
radehfmsg=u' %s تصنيف'% numadd
#msg=u'ربوت [[مستخدم:Elph/التصانیف المعادلة#'+version+u'|التصانيف المعادلة ('+version+u')]] %s: + %s'
msg=u'[[مستخدم:Elph/التصانیف المعادلة|التصانیف المعادلة ('+version+u')]]'
text_new=text
'''if page.namespace()==0: #----------------cleaning
text_new,cleaning_version,msg_clean=fa_cosmetic_changes.fa_cosmetic_changes(text,page)
else:
msg_clean=u' '
msg=msg %(msg_clean,radehfmsg)
msg=msg.replace(u' ',u' ').strip()'''
text_new=text_new.replace(u']]@12@',u']]').replace(u'@34@[[',u'[[')
page.put(text_new.strip(), msg)
wikipedia.output(u'\03{lightpurple} تم أضافة التصانيف لـ ' + pagework+u"\03{default}")
#except Exception as e:
#wikipedia.output(u'\03{lightred}Could not open page\03{default}')
#continue
#------------------------------------------------------------encat part-------------------------------
def categorydown(listacategory):
listacategory=[listacategory]
count=1
for catname in listacategory:
count+=1
if count==200:
break
gencat = pagegenerators.SubCategoriesPageGenerator(catname, recurse=False)
for subcat in gencat:
try:
wikipedia.output(str(subcat))
except:
wikipedia.output(subcat)
if subcat in listacategory:
continue
else:
listacategory.append(subcat)
break
return listacategory
def encatlist(encat):
wikipedia.config.put_throttle = 0
wikipedia.put_throttle.setDelay()
count=0
listenpageTitle=[]
encat=encat.replace(u'[[',u'').replace(u']]',u'').replace(u'Category:',u'').replace(u'category:',u'').strip()
language='en'
encat = catlib.Category( wikipedia.getSite(language),encat )
#listacategory=categorydown(encat)
listacategory=[encat]
for enpageTitle in listacategory:
try:
fapages=pagefafinder(enpageTitle)
if fapages!=False:
for pages in fapages:
pages=unicode(pages[0],'UTF-8')
wikipedia.output(u'\03{lightgreen}Adding '+pages+u' to fapage lists\03{default}')
listenpageTitle.append(pages)
except:
try:
enpageTitle=unicode(str(enpageTitle),'UTF-8').split(u'|')[0].split(u']]')[0].replace(u'[[',u'').strip()
except:
enpageTitle=enpageTitle.split(u'|')[0].split(u']]')[0].replace(u'[[',u'').strip()
cat = catlib.Category( wikipedia.getSite(language),enpageTitle )
gent = pagegenerators.CategorizedPageGenerator( cat )
for pagework in gent:
count+=1
try:
link=str(pagework).split(u'|')[0].split(u']]')[0].replace(u'[[',u'').strip()
except:
pagework=unicode(str(pagework),'UTF-8')
link=pagework.split(u'|')[0].split(u']]')[0].replace(u'[[',u'').strip()
wikipedia.output(link)
fapagetitle=englishdictionry(link,'en','ar')
if fapagetitle==False:
continue
else:
wikipedia.output(u'\03{lightgreen}Adding '+fapagetitle+u' to fapage lists\03{default}')
listenpageTitle.append(fapagetitle)
if listenpageTitle==[]:
return False,False
return listenpageTitle,listacategory
#-------------------------------------------------------------------encat part finish--------------------------
def main():
wikipedia.config.put_throttle = 0
wikipedia.put_throttle.setDelay()
summary_commandline,gen,template = None,None,None
namespaces,PageTitles,exceptions = [],[],[]
encat,newcatfile='',''
autoText,autoTitle = False,False
recentcat,newcat=False,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:] )
break
elif arg.startswith( '-except:' ):
exceptions.append( arg[8:] )
elif arg.startswith( '-template:' ):
template = arg[10:]
elif arg.startswith( '-encat:' ):
encat = arg[7:].replace(u'Category:',u'').replace(u'category:',u'').replace(u'تصنيف:',u'')
break
elif arg.startswith( '-newcatfile:' ):
newcatfile = arg[12:]
break
elif arg.startswith('-recentcat'):
arg=arg.replace(':','')
if len(arg) == 10:
genfa = pagegenerators.RecentchangesPageGenerator()
else:
genfa = pagegenerators.RecentchangesPageGenerator(number = int(arg[10:]))
genfa = pagegenerators.DuplicateFilterPageGenerator(genfa)
genfa = pagegenerators.NamespaceFilterPageGenerator( genfa,[14] )
preloadingGen = pagegenerators.PreloadingGenerator( genfa,60)
recentcat=True
break
elif arg.startswith('-newcat'):
arg=arg.replace(':','')
if len(arg) == 7:
genfa = pagegenerators.NewpagesPageGenerator(100, False, None,14)
else:
genfa = pagegenerators.NewpagesPageGenerator(int(arg[7:]), False, None,14)
preloadingGen = pagegenerators.PreloadingGenerator( genfa,60)
newcat=True
break
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
if encat!='':
encatfalist,encatlists=encatlist(encat)
if encatlists:
for encat in encatlists:
encat=englishdictionry(encat,u'en',u'ar')
if encat:
run([encat])
if encatfalist!=False:
run(encatfalist)
if PageTitles:
pages = [wikipedia.Page( wikipedia.getSite(),PageTitle ) for PageTitle in PageTitles]
gen = iter( pages )
if recentcat:
for workpage in preloadingGen:
workpage=workpage.title()
cat = catlib.Category( wikipedia.getSite('ar'),workpage)
gent = pagegenerators.CategorizedPageGenerator( cat )
run( gent)
wikipedia.stopme()
sys.exit()
if newcat:
for workpage in preloadingGen:
workpage=workpage.title()
workpage=englishdictionry(workpage,'ar','en')
if workpage!=False:
encatfalist,encatlists=encatlist(workpage)
if encatlists:
for encat in encatlists:
encat=englishdictionry(encat,u'en',u'ar')
if encat:
run([encat])
if encatfalist!=False:
run(encatfalist)
wikipedia.stopme()
sys.exit()
if newcatfile:
text2 = codecs.open( newcatfile,'r' ,'utf8' )
text = text2.read()
linken = re.findall(ur'\[\[.*?\]\]',text, re.S)
if linken:
for workpage in linken:
workpage=workpage.split(u'|')[0].replace(u'[[',u'').replace(u']]',u'').strip()
workpage=englishdictionry(workpage,'ar','en')
if workpage!=False:
encatfalist,encatlists=encatlist(workpage)
if encatlists:
run(encatlists)
if encatfalist!=False:
run(encatfalist)
wikipedia.stopme()
sys.exit()
if not gen:
wikipedia.stopme()
sys.exit()
if namespaces != []:
gen = pagegenerators.NamespaceFilterPageGenerator( gen,namespaces )
preloadingGen = pagegenerators.PreloadingGenerator( gen,pageNumber = 60 )
run( preloadingGen)
if __name__ == '__main__':
main()