ویکی‌پدیا:درخواست‌های ربات/رده‌ساز

از ویکی‌پدیا، دانشنامهٔ آزاد

ساخت رده و افزودن میان‌ویکی بر پایه مترجم گوگل و میان‌ویکی (هم اکنون مترجم گوگل کار نمی‌کند)

#!/usr/bin/python
# -*- coding: utf-8  -*-
#
# Reza(User:reza1615), 2011
#
# Distributed under the terms of the CC-BY-SA 3.0 .
# -*- coding: utf-8 -*-
import catlib
import pagegenerators,re
import wikipedia,pprint,codecs,string
from xgoogle.translate import Translator
self = ''
def duplic(catfa,radeh):
    radeht=' '
    if len(radeh)<1 :
        return False
    if len(catfa)<1 :
        return radeh
    for x in range(0,len(catfa)):
        catfax=str(catfa[x]).split('|')[0].split(']]')[0].replace('[[','').strip()
        for y in range(0,len(radeh)):
            radehy=str(radeh[y]).split('|')[0].split(']]')[0].replace('[[','').strip()
            if catfax==radehy:
                radeh.remove(radeh[y])
                break
    for rad in radeh:
         radeht+=str(rad)+'\n'
    return radeht

def sitop(link,wiki):
        link=str(link).replace( '[[','' ).replace( ']]','' ).strip()
        site = wikipedia.getSite(wiki) 
        try:
            page = wikipedia.Page( site,link )
            interwikis=page.interwiki()
            cats=page.categories()
            text=page.get()
            cats=page.categories()
            return interwikis,cats,text
        except wikipedia.IsRedirectPage:
            page = page.getRedirectTarget()
            try:
                    interwikis=page.interwiki()
                    cats=page.categories()
                    text=page.get()
                    return interwikis,cats,text
            except:
                    a=1
        except:
            a=1
#----------------------------------------------------------------------------------translation------------------
def translation(forTranslate):
    forTranslate=str(forTranslate).replace( '[[EN:','' ).replace( 'EN:','' ).replace( '[[EN :','' ).replace( ']]','' ).replace( '[[en:','' ).replace( '[[en :','' ).replace( 'en:','' ).replace( '[[','' ).strip()
    
    #forTranslate=forTranslate.replace('category:','').replace('Category:','').strip()
    resultfa = InterwikiTranslation( forTranslate )
    if forTranslate == resultfa:
         resultfa = googleEn2Fa( forTranslate )
    if forTranslate == resultfa:
        rison = 'The same result'   
        return False,rison
    else:
        alfas = 'aeouirtypsdfghjklzxcvbnmqwQWERTYUIOPASDFGHJKLZXCVBNM'
        for alfa in alfas:#---------------If english charcter was in result it will regect
            if resultfa.find( alfa ) != -1:
                    rison = 'English Alfabet found'
                    return False,rison
        rison='translated'
        return resultfa,rison

def InterwikiTranslation( enlink ):
    site = wikipedia.getSite( 'en' )
    enlink2 = enlink 
    apage = wikipedia.Page( site,enlink2 )
    NOPAGE = False
    try:
        atext = apage.get()
    except wikipedia.IsRedirectPage:
        apage = apage.getRedirectTarget()
        try:
                atext = apage.get()
        except:
                return enlink
    except:
        return enlink
    if not NOPAGE == True:
       if atext.find( '[[fa:' ) != -1: 
            falink = atext.split( '[[fa:' )[1]
            falink = falink.split( ']]' )[0]
            return falink
       else:
            return enlink
    else:
        return enlink
    
    
def googleEn2Fa( text ):
       #--------------------------------------------------------------مترجم گوگل----------------------------
       text=text.replace('category:','').replace('Category:','').strip()
       for textkhord in getSplits( text ):# خرد کننده متن به 700 کلمه
            translate = Translator().translate
            try:
                translated2fa = translate( textkhord,lang_to = "fa" )
            except:
                translated2fa = textkhord
       pprint.pprint( translated2fa )
       return '[[رده:'+translated2fa+']]'    
def getSplits( text,splitLength = 700 ):
    ''' Translate Api has a limit on length of text(4500 characters)
         that can be translated at once, '''
    return ( text[index:index + splitLength]
            for index in xrange( 0,len( text ),splitLength ) )
#------------------------------------------------------------------------------------------------------------------
            
def copycontent(falink,enlink,catgs):
    content=[]
    textmain=' '
    textfadd=' '
    interwikis,cats,text=sitop(enlink,'en')
    try:
        interwikisfa,catsfa,textfa=sitop(falink,'fa')
    except:
         interwikisfa,catsfa,textfa=' ',' ',' '
    for link in text.split( '[[' ):
                link = link.split( ']]' )[0].split( '|' )[0].strip()
                linkeng = '[[' + link + ']]'
                if linkeng.find('[[Category:')==-1:
                    continue
                resultfa,rison=translation(link)
                if resultfa==False:
                       with codecs.open( 'Category not Translated.txt',mode = 'a',encoding = 'utf8' ) as f:
                               f.write( 'not translated [[:'+Title+']]\n')
                       continue
                else:
                       content.append(resultfa)
                

    enlink='[['+enlink+']]\n'
    for item in content:
        item='[['+item+']]'
        textfa=textfa.replace(item,'')
        textfadd=item+'\n'+textfadd
    textfadd=textfadd.replace('[[[[','[[').replace(']]]]',']]')
    textfa=textfadd.strip()+'\n'+textfa.strip()
    textfa=textfa.replace(enlink,'')
    textfa=textfa+'\n'+enlink
    site = wikipedia.getSite('fa') 
    page = wikipedia.Page( site,falink)
    page.put(textfa,'ربات:افزودن رده بر اساس ویکی‌پدیای انگلیسی ([[وپ:درخواست‌های ربات/رده‌ساز|کد]])')
                 
def catt(cat):
            gen = pagegenerators.SubCategoriesPageGenerator(cat,recurse=False)
            for Title in gen:
               Title=str(Title).replace( '[[','' ).replace( ']]','' ).strip()
               interwikis,cats,text=sitop(Title,'en')
               if text.find('[[fa:')!=-1:
                   falink=text.split('[[fa:')[1].split(']]')[0].strip()
                   copycontent(falink,Title,cats)
                   continue
               else:
                   faresult,resion=translation(Title)
                   if faresult==False:
                       with codecs.open('Category not Translated.txt',mode = 'a',encoding = 'utf8' ) as f:
                               f.write('not translated [[:'+Title+']]\n' )
                   else:
                       faresult=str(faresult).replace( '[[','' ).replace( ']]','' ).strip()
                       copycontent(faresult,Title,cats)
                       
def main():
    wikipedia.config.put_throttle = 0
    wikipedia.put_throttle.setDelay()
    siteen = wikipedia.getSite('en')
    #PageTitle =raw_input('Past Category Name> ').decode('utf-8')
    PageTitles =u'Category:Theoretical chemistry'
    PageTitles= [PageTitles.replace('[[','').replace(']]','').strip()]
    
    
    for PageTitle in PageTitles:
        try:
               cat = catlib.Category( siteen,PageTitle )
               catt(cat)
        except:
            continue
            
if __name__ == '__main__':
    try:
        main()
    finally:
        wikipedia.stopme()