ویکیپدیا:درخواستهای ربات/ربات مختصات جغرافیا/ویرایش 3
این ربات برای استخراج مختصات از گوگل مپ و افزودن آنها به مقالات یک رده خاص، کاربرد دارد.
کتابخانه pygeocoder را از این آدرس بگیرید و در فولدر pywikipedia قرار دهید و کتابخانهٔ requests را از اینجا بگیرید و فولدر requests را در فولدر pywikipedia کپی کنید.
آرگومان[ویرایش]
به جز تغییر نام رده در خود متن ربات نیاز به هیچ آرگومان خاصی نیست.
روش کار[ویرایش]
باید تنها متغیر categoryname=u"روستاهای شهرستان اردبیل" را به نام رده مورد نظرتان تغییر دهید مثلا روستاهای شهرستان آباده تا مکانهای موجود در رده را در گوگل مپ جستجو کند و در صورت موجود بودن مختصات آنها را در مقاله وارد کند. این ربات نامهای با حروف عربی و بدون نیمفاصله را نیز جستجو میکند تا بهترین نتیجه را ارائه دهد.
کد[ویرایش]
<syntaxhighlight lang="python">
- !/usr/bin/python
- -*- coding: utf-8 -*-
- Reza(User:reza1615), 2014
- Distributed under the terms of the CC-BY-SA 3.0 .
import wikipedia,re import category,catlib,codecs,time wikipedia.config.put_throttle = 0 wikipedia.put_throttle.setDelay() from pygeocoder import Geocoder
- ------------------------------------------------category name-----------------------
categoryname=u"روستاهای شهرستان اردبیل" country=u'ایران' region=u'IR'
- ------------------------------------------------------------------------------------
def cleaner(citys):
citys=citys.split(u'|')[0].replace(u'[[',u).strip() blacklistname=[u'شهرستان',u'بخش',u'روستای',u'روستا',u'دهستان'] for item in blacklistname: citys=citys.replace(item,u) return citys
def googlemap(adress,test):
if test==u'test': test=u'(for testing)' else: test=u' ' timeforstop=5 time.sleep(timeforstop)# sleep to have less errors wikipedia.output(u'getting coordination for Farsi name of %s ....%s' % (adress,test)) #---farsi name-- try: results = Geocoder.geocode(adress) lat,lan=results[0].coordinates return lat,lan except: pass time.sleep(timeforstop)# sleep to have less errors #---arabic name-- try: adress1=adress.replace(u'ی',u'ي').replace(u'ک',u'ك') if adress1!=adress: wikipedia.output(u'getting coordination for arabic name of %s ....%s' % (adress,test)) results = Geocoder.geocode(adress1) lat,lan=results[0].coordinates return lat,lan except: pass time.sleep(timeforstop)# sleep to have less errors #---without Zwinj farsi name-- try: adress2=adress.replace(u'',u' ') if adress2!=adress: wikipedia.output(u'getting coordination for without Zwinj farsi name of %s ....%s' % (adress,test)) results = Geocoder.geocode(adress2) lat,lan=results[0].coordinates return lat,lan except: pass time.sleep(timeforstop)# sleep to have less errors #---without Zwinj arabic name-- try: adress3=adress.replace(u'ی',u'ي').replace(u'ک',u'ك').replace(u'',u' ') if adress3!=adress1: wikipedia.output(u'getting coordination for without Zwinj arabic name of %s ....%s' % (adress,test)) results = Geocoder.geocode(adress3) lat,lan=results[0].coordinates return lat,lan else: return False,False except: return False,False
def coordmaker(rpage,lat,lan,region):
if str(rpage).find(u'ایستگاه')!=-1:
types='|type:railwaystation'
elif str(rpage).find(u'دانشگاه')!=-1:
types='|type:edu'
elif str(rpage).find(u'دانشکده')!=-1:
types='|type:edu'
elif str(rpage).find(u'شهرستان')!=-1:
types=u'|type:landmark'
elif str(rpage).find(u'مدرسه')!=-1:
types='|type:edu'
elif str(rpage).find(u'دبیرستان')!=-1:
types='|type:edu'
elif str(rpage).find(u'دبستان')!=-1:
types=u'|type:edu'
else:
types=u'|type:city'
coord=u'{{#coordinates:}}: عرض جغرافیایی نامعتبر'
wikipedia.output(rpage)
wikipedia.output(coord)
return coord
def main(listOfArticles,country,region):
for rpage in listOfArticles:
wikipedia.output(u'-------------------------')
wikipedia.output(u'getting '+rpage+u' ....')
site = wikipedia.getSite('fa')
try:
pagefa = wikipedia.Page( site,rpage )
texttemple=pagefa.get(expandtemplates=True)
except wikipedia.IsRedirectPage:
pagefa = pagefa.getRedirectTarget()
texttemple=pagefa.get(expandtemplates=True)
rpage=pagefa.title().strip()
except Exception,e:
wikipedia.output(str(e))
continue
try:
if texttemple.find('')!=-1 or texttemple.find('')!=-1 :
wikipedia.output(u'it had coordination!')
continue
textfa=pagefa.get()
try:
imfa = re.search(ur'\|\s*(?:استان|بخش|شهرستان|دهستان).*?\=.*?\|', text_fa2)
mothercity=imfa.group(0).split(u'=')[1].split(u'|')[0].replace(u'[[',u).strip()
citys=mothercity+u' '+country
except:
citys=u' '+country
rpage=cleaner(rpage)
adress=rpage.replace(u'(',u' , ').replace(u')',u).replace(u'،',u',').replace(u' ',u' ').replace(u' ',u' ').replace(u', ,',u',').strip()
if adress.find(citys.strip())==-1:
adress+=u', '+citys
citys=citys.strip()
adress=adress.strip()
lat,lan=googlemap(adress,u'main')
if lat and lan:
lat1,lan1=googlemap(citys,u'test')
else:
continue
if lat1==lat and lan1==lan:
continue
if lat and lan:
coord=coordmaker(rpage,lat,lan,region)
try:
textfa=textfa.replace(u'',)
if textfa.find(u'{{مختصات-نیاز')!=-1:
mokhtasattemplate=u'{{مختصات-نیاز'+textfa.split(u'{{مختصات-نیاز')[1].split(u'}}')[0]+u'}}'
textfa=textfa.replace(mokhtasattemplate+u'\n',u)
textfa=textfa.replace(mokhtasattemplate,u)
textfa=coord+'\n'+textfa+u'\n'
pager=pagefa.put(textfa,u'ربات:افزودن مختصات برگرفته از گوگل مپ')
wikipedia.output(rpage+u' done')
except wikipedia.IsRedirectPage:
continue
except Exception,e:
wikipedia.output(str(e))
continue
except Exception,e:
wikipedia.output(str(e))
continue
if __name__ == "__main__":
try: categoryname=categoryname.replace(u'رده:',u).strip() cat = catlib.Category(wikipedia.getSite('fa'),categoryname) listOfArticles = cat.articlesList() main(listOfArticles,country,region) finally: wikipedia.stopme()