ویکیپدیا:درخواستهای ربات/ساخت ردههای همنام با نام مقاله
ظاهر
SELECT /*SLOW OK */ page_title FROM categorylinks JOIN page where cl_to = page_title and
cl_from NOT IN
(SELECT ll_from FROM langlinks WHERE ll_lang = "fa")
and
page_id IN
(SELECT page_id
FROM langlinks INNER JOIN page
ON page_id = ll_from
WHERE ll_lang = "fa" and page_namespace=0) GROUP BY page_title;
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Reza(User:reza1615), 2011
#
# Distributed under the terms of the CC-BY-SA 3.0 .
import MySQLdb,codecs
import catlib ,pagegenerators
import wikipedia,query
import time,string,re,query
try:
import radeh
hamsang=True
except:
wikipedia.output(u'Your bot can not file radeh.py so it can not add related categoies!')
hamsang=False
pass
wikipedia.config.put_throttle = 0
wikipedia.put_throttle.setDelay()
list=(u"Serres",u"سرس (یونان)")
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 redirect_find( enlink):
enlink=enlink.replace(u' ',u'_')
ensite = wikipedia.getSite('en')
params = {
'action': 'query',
'prop': 'info',
'titles': enlink
}
categoryname = query.GetData(params,ensite, encodeTitle = True)
try:
fanamespace=categoryname[u'query'][u'pages']
if str(fanamespace).find(u'redirect')!=-1:
wikipedia.output(u'it is redirect')
return True
else:
return False
except:
return True
def zwnj(txtTmp):
txtTmp = re.sub(u'{2,}', u'', txtTmp)
txtTmp = re.sub(u'(?![ئاآأإژزرذدوؤةبپتثجچحخسشصضطظعغفقکگلمنهیيًٌٍَُِّْٰٓٔ]|[\u0900-\u097f]|ֹ)', u'', txtTmp)
txtTmp = re.sub(u'(?<![ئبپتثجچحخسشصضطظعغفقکگلمنهیيًٌٍَُِّْٰٓٔ]|[\u0900-\u097F]|f|ֹ)', u'', txtTmp)
return txtTmp
def queries():
myquery='''
SELECT page_title FROM categorylinks JOIN page where cl_to = page_title and
cl_from NOT IN
(SELECT ll_from FROM langlinks WHERE ll_lang = "fa")
and
page_id IN
(SELECT page_id
FROM langlinks INNER JOIN page
ON page_id = ll_from
WHERE ll_lang = "fa" and page_namespace=0) GROUP BY page_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')
cur = cn.cursor()
cur.execute(myquery)
results = cur.fetchall()
cn.close()
savefile='catneededquery.txt'
with codecs.open( savefile,mode = 'w',encoding = 'utf8' ) as f:
f.write( textup )
wikipedia.output(u"\03{lightblue} query was saved!\03{default}")
del results
def main():
wikipedia.config.put_throttle = 0
wikipedia.put_throttle.setDelay()
textfa,texten=' ',' '
filesample = 'catneededquery.txt'
text2 = codecs.open( filesample,'r' ,'utf8' )
text = text2.read().replace(u'\r',u'')
list=text.split(u'\n')
del text2
del text
for i in list:
try:
caten=unicode(i,'UTF8')
except:
caten=i
catfa=englishdictionry(caten,'en','fa')
if not catfa:
continue
if englishdictionry(u'category:'+caten,'en','fa'):
continue
encatpage=wikipedia.Page( wikipedia.getSite('en'),u'Category:'+caten )
if not encatpage.exists():
wikipedia.output(encatpage.title()+' is not in enwiki')
continue
fatitle=catfa.replace(u'[[',u'').replace(u']]',u'').strip()
textfa=u"{{اصلی رده|"+catfa+u"}}\n[[en:Category:"+caten+u']]'
passp=redirect_find(caten)
if passp:
try:
pageen = wikipedia.Page( wikipedia.getSite('en'),caten )
page = pageen.getRedirectTarget()
except:
continue
if page.title()+u'es'==pageen.title() or page.title()+u's'==pageen.title():
fatitle+=u'ها'
wikipedia.output(u'++++++++++++'+caten+u' was redirect but it solved!!')
else:
wikipedia.output(u'----------'+caten+u' was redirect so it passed!')
continue
fatitle= zwnj(fatitle)
pagefa = wikipedia.Page(wikipedia.getSite('fa'),u'رده:'+fatitle)
if not pagefa.exists():
workpage=englishdictionry(pagefa.title(),'fa','en')
if not workpage:
continue
encatfalist,encatlists=radeh.encatlist(workpage,True)
if encatfalist or encatlists:
pagefa.put(textfa.strip(), u'ربات: ساختن رده بر پايه ویکیانگلیسی ([[وپ:درخواستهای ربات/ساخت ردههای همنام با نام مقاله|کد]])')
wikipedia.output( u"done=" + catfa)
wikipedia.output(str(encatfalist))
wikipedia.output(str(encatlists))
if encatlists:
radeh.run(encatlists)
if encatfalist!=False:
radeh.run(encatfalist)
else:
wikipedia.output(u'category is empty category!')
continue
if __name__ == '__main__':
#queries()
main()