ویکیپدیا:درخواستهای ربات/ردهساز
ظاهر
ساخت رده و افزودن میانویکی بر پایه مترجم گوگل و میانویکی (هم اکنون مترجم گوگل کار نمیکند)
#!/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()