پرش به محتوا

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

از ویکی‌پدیا، دانشنامهٔ آزاد
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()