#!/usr/bin/python
# -*- coding: utf-8 -*-
__version__ = '$Id: cat_generator.py, v1.0 2011/06/03$'
from BeautifulSoup import UnicodeDammit
import sys, re, urllib2, httplib, socket, codecs, ftplib
import wikipedia, catlib, pagegenerators, noreferences,category
import subprocess, tempfile, os ,config
# SETTINGS
locDic = {u'Angola':u'آنگولا',
u'France':u'فرانسه',
u'Honduras':u'هندوراس',
u'Denmark':u'دانمارک',
u'Venezuela':u'ونزوئلا',
u'Vietnam':u'ویتنام',
u'Romania':u'رومانی',
u'Jamaica':u'جامائیکا',
u'Japan':u'هندوراس',
u'Jordan':u'اردن',
u'Kenya':u'کنیا',
u'Kuwait':u'کویت',
u'Laos':u'لائوس',
u'Lebanon':u'لبنان',
u'Lithuania':u'لیتوانی',
u'Ecuador':u'اکوادور',
u'Egypt':u'مصر',
u'Ethiopia':u'اتیوپی',
u'Germany':u'آلمان',
u'Ghana':u'غنا',
u'Greece':u'یونان',
u'Guatemala':u'گواتمالا',
u'Iceland':u'ایسلند',
u'India':u'هند',
u'Indonesia':u'اندونزی',
u'Ireland':u'ایرلند',
u'Italy':u'ایتالیا',
u'Uganda':u'اوگاندا',
u'Ukraine':u'اوکراین',
u'the United Kingdom':u'بریتانیا',
u'the United States':u'آمریکا',
u'Uruguay':u'اوروگوئه',
u'Uzbekistan':u'ازبکستان',
u'Thailand':u'تایلند',
u'Tunisia':u'تونس',
u'Turkey':u'ترکیه',
u'Malaysia':u'مالزی',
u'Mongolia':u'مغولستان',
u'Morocco':u'مراکش',
u'Nepal':u'نپال',
u'the Netherlands':u'هلند',
u'Nicaragua':u'نیکاراگوئه',
u'Nigeria':u'نیجریه',
u'Norway':u'نروژ',
u'Mexico':u'مکزیک',
u'Chile':u'شیلی',
u'Colombia':u'کلمبیا',
u'Cuba':u'کوبا',
u'the Czech Republic':u'جمهوری چک',
u'Peru':u'پرو',
u'the Philippines':u'فیلیپین',
u'Poland':u'لهستان',
u'Bangladesh':u'بنگلادش',
u'Bahrain':u'بحرین',
u'Belarus':u'بلاروس',
u'Belgium':u'بلژیک',
u'Brazil':u'برزیل',
u'Bulgaria':u'بلغارستان',
u'Saudi Arabia':u'عربستان سعودی',
u'Senegal':u'سنگال',
u'Singapore':u'سنگاپور',
u'Slovakia':u'اسلوواکی',
u'Slovenia':u'اسلوونی',
u'South Africa':u'آفریقای جنوبی',
u'Spain':u'اسپانیا',
u'Sweden':u'سوئد',
u'Switzerland':u'سوئیس',
u'South Korea':u'کره جنوبی',
u'Greenland':u'گرینلند',
u'Syria':u'سوریه',
u'Kazakhstan':u'قزاقستان',
u'Kyrgyzstan':u'قرقیزستان',
u'Tajikistan':u'تاجیکستان',
u'Somalia':u'سومالی',
u'Libya':u'لیبی',
u'Serbia':u'صربستان',
u'Hong Kong':u'هنگ کنگ',
u'Portugal':u'پرتغال',
u'the United Arab Emirates':u'امارات متحده عربی'}
# vars.
faChrs = u'ءاآأإئؤبپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی'
text = ''
R = re.compile(ur'\[\[(.+?)(?:\]\]|\|)')
enSite = wikipedia.getSite('en')
def catFinder(a):
apage = wikipedia.Page(enSite, a)
NOPAGE = False
try:
atext = apage.get()
except wikipedia.NoPage:
NOPAGE = True
except wikipedia.IsRedirectPage:
apage = apage.getRedirectTarget()
atext = apage.get()
if not NOPAGE == True:
if re.search(ur'\[\[fa:(.+?)(?:\]\]|\|)',atext):
R = re.compile(ur'\[\[fa:(.+?)(?:\]\]|\|)')
for aaa in R.findall(atext):
return aaa
else:
return u'shar'
else:
return u'shar'
def main():
for enLoc in locDic:
faLoc = locDic[enLoc]
enName = u'Airports in ' + enLoc
faName = u'فرودگاههای ' + faLoc
faName = u'رده:' + faName
enpage = wikipedia.Page(enSite, u'Category:'+enName)
try:
enText = enpage.get()
except:
print u'ERROR: enpage.get()'
continue
enPagePermalink = enpage.permalink()
enPagePermalink = enPagePermalink.replace(u'&redirect=no&useskin=monobook', u'')
text = enText
if u'[[fa:' in text:
print u"ERROR: u'[[fa:' in text"
continue
# Delete English text
text = re.sub(u'(?<=\n)[^\{\[]+.*?(?=\n)', u'', text)
# Templates
text = re.sub(ur'{{ ?(?:[Cc]ommons?|انبار|ویکی انبار) ?\|', u'{{ویکیانبار|', text)
text = re.sub(ur'{{ ?(?:[Cc]ommons?[\- ]?(?:[Cc]ats?|[Cc]ategory)|(?:ویکی[ ]?|)انبار[\- ]?رده) ?\|', u'{{ویکیانبار-رده|', text)
text = re.sub(u'{{Airports[_ ]by[_ ]country[_ ]category[_ ]description ?\| ?'+enLoc+u'}}', u'{{توضیحات رده فرودگاهها بر پایه کشور|'+enLoc+u'|'+faLoc+u'}}', text)
if u'{{توضیحات رده فرودگاهها بر پایه کشور|' in text:
text = re.sub(u'{{(?:ویکیانبار.*?|GeoGroupTemplate|[Kk][Mm][Ll])}}', u'', text)
# Categories
RF = re.compile(ur'\[\[[Cc]ategory:(.+?)(?:\]\]|\|)')
for enCatNameTmp in RF.findall(enText):
enCatName = u'Category:' + enCatNameTmp
if not catFinder(enCatName) == u'shar':
text = text.replace(u'[['+enCatName, u'[['+catFinder(enCatName))
# prefix
text = re.sub(u'(?<=\[\[[Cc]ategory:)[Aa]irports in (?=.*?\]\])', u'فرودگاههای ', text)
text = re.sub(u'(?<=\[\[[Cc]ategory:)[Tt]ransport(?: infrastructure)? in (?=.*?\]\])', u'ترابری در ', text)
text = re.sub(u'(?<=\[\[[Cc]ategory:)[Tt]ourism in (?=.*?\]\])', u'گردشگری در ', text)
text = re.sub(u'(?<=\[\[[Cc]ategory:)[Aa]viation in (?=.*?\]\])', u'هوانوردی در ', text)
text = re.sub(u'(?<=\[\[[Cc]ategory:)[Bb]uildings? and [Ss]tructures? in (?=.*?\]\])', u'بناها و سازهها در ', text)
# suffix
text = re.sub(u'(\[\[[Cc]ategory:(?:.*?\W)?)'+enLoc+u'(?=(?:\W.*?)?\]\])', ur'\1'+faLoc, text)
text = re.sub(u'(\[\[[Cc]ategory:(?:.*?\W)?)Europe(?=(?:\W.*?)?\]\])', ur'\1اروپا', text)
text = re.sub(u'(\[\[[Cc]ategory:(?:.*?\W)?)Asia(?=(?:\W.*?)?\]\])', ur'\1آسیا', text)
text = re.sub(u'(\[\[[Cc]ategory:(?:.*?\W)?)Africa(?=(?:\W.*?)?\]\])', ur'\1آفریقا', text)
text = re.sub(u'(\[\[[Cc]ategory:(?:.*?\W)?)North America(?=(?:\W.*?)?\]\])', ur'\1آمریکای شمالی', text)
text = re.sub(u'(\[\[[Cc]ategory:(?:.*?\W)?)South America(?=(?:\W.*?)?\]\])', ur'\1آمریکای جنوبی', text)
text = re.sub(u'(\[\[[Cc]ategory:(?:.*?\W)?)Central America(?=(?:\W.*?)?\]\])', ur'\1آمریکای مرکزی', text)
text = re.sub(u'(\[\[[Cc]ategory:(?:.*?\W)?)Oceania(?=(?:\W.*?)?\]\])', ur'\1اقیانوسیه', text)
text = re.sub(u'(\[\[[Cc]ategory:(?:.*?\W)?)Caribbean(?=(?:\W.*?)?\]\])', ur'\1کارائیب', text)
# prefix
text = re.sub(u'(?<=\[\[[Cc]ategory:)[Aa]irports (?=.*?\]\])', u'فرودگاهها ', text)
text = re.sub(u'(?<=\[\[[Cc]ategory:)[Tt]ransport(?: infrastructure)? (?=.*?\]\])', u'ترابری ', text)
text = re.sub(u'(?<=\[\[[Cc]ategory:)[Tt]ourism (?=.*?\]\])', u'گردشگری ', text)
text = re.sub(u'(?<=\[\[[Cc]ategory:)[Aa]viation (?=.*?\]\])', u'هوانوردی ', text)
text = re.sub(u'(?<=\[\[[Cc]ategory:)[Bb]uildings? and [Ss]tructures? (?=.*?\]\])', u'بناها و سازهها ', text)
# suffix
text = re.sub(u'(\[\[[Cc]ategory:(?:.*?\W)?)by continent(?=(?:\W.*?)?\]\])', ur'\1بر پایه قاره', text)
text = re.sub(u'(\[\[[Cc]ategory:(?:.*?\W)?)by country(?=(?:\W.*?)?\]\])', ur'\1بر پایه کشور', text)
text = re.sub(u'(\[\[[Cc]ategory:(?:.*?\W)?)by city(?=(?:\W.*?)?\]\])', ur'\1بر پایه شهر', text)
# after "|"
text = re.sub(u'(\[\[[Cc]ategory:.*?\| ?)'+enLoc+'(?= ?\]\])', ur'\1'+faLoc, text)
if u'|'+enLoc+u']]' in text:
text = text.replace(u'|'+enLoc+u']]', u'|'+faLoc+u']]')
text = re.sub(u'(\[\[[Cc]ategory:.*?\| ?)[Aa]irports(?= ?\]\])', ur'\1فرودگاهها', text)
text = re.sub(u'(\[\[[Cc]ategory:.*?\| ?)[Ll]ists(?= ?\]\])', ur'\1فهرستها', text)
# other
text = re.sub(u'(\[\[[Cc]ategory:.*?) \(country\)(?=.*?\]\])', ur'\1 (کشور)', text)
text = re.sub(u'(\[\[[Cc]ategory:.*?) the (?=.*?\]\])', ur'\1', text)
# category -> رده
text = re.sub(u'(?<=\[\[)[Cc]ategory:(?=['+faChrs+u' \|\-]*?\]\])', u'رده:', text)
text += u'\n[[en:Category:' + enName + u']]\n'
if not u'[[رده:' in text:
text = u'[[رده:برای بازبینی انسان (رده)]]\n\n' + text
print u'bazbini'
elif u'[[Category:' in text or u'[[category:' in text:
text = u'[[رده:برای بازبینی انسان (رده)]]\n\n' + text
print u'bazbini'
# Submit the page
page = wikipedia.Page(wikipedia.getSite(), faName)
try:
pagetext = page.get()
except:
page.put(text, u'ربات: ایجاد خودکار رده، برگرفته از: %s ([[وپ:درخواستهای ربات/cat generator.py|کد]])' % enPagePermalink)
f = codecs.open(u'cats.txt', 'a', 'utf-8')
f.write(u'\n[['+page.title()+u']]')
try:
main()
except KeyboardInterrupt:
pywikibot.stopme()