Блогът на Фил

Nothing to see here, move along
  • rss
  • Home
  • About
  • profiles

Автоматично сваляне на POI-та за забележителности

felipe

Хората, които ме познават лично знаят, че последните години пътувам в чужбина като турист. Когато отивам в нов град, за да зная какво забележителности има за гледане, проверявам английската уикипедия за този град и после хвърлям и един поглед на wikitravel. Но в общи линии основната ми процедура е да отворя статията в уикипедия и да нащракам всички връзки в нея, които не са за понятия, а за обекти. Повечето от тях са геотагнати и след като прочета малко за тях и реша дали ми харесват си записвам координатите им и после ги въвеждам в телефона ми като POI-та. Което е ужасно бавно и досадно, а и за съжаление не е унифициран формата на координатите и съществуват статии с различен формат, което налага да превключвам формата в настройките на програмата ми (Mappero), което е още по-досадно. Отдавна се каня да напиша някакъв код, който да ми автоматизира процеса и вчера най-накрая се наканих. Написаната програмка/скрипт/апликейшън/солюшън :-D е на python и е пробвана под Линукс.
Тя прави следното:

  • пуска заявка към geonames за името на града, получен като единствен параметър от командния ред и по този начин получава координатите
  • получените координати пуска като заявка към XML API на wikilocation. От там получава всички статии в радиус от 5 километра то центъра на града.
  • Обхожда XML файла и генерира файл с име poi.gpx, в който има се съдържат всички статии като точки с техните координати, с име името на статията и с описание хипервръзката към статията в уикипедия.

    Файлът poi.gpx директно се внася в mappero.
    Кодът е даден по-долу:
    from lxml import etree
    from os.path import basename
    from urlparse import urlsplit
    import urllib2
    import sys

    def url2name(url):
    return basename(urlsplit(url)[2])

    def download(url, localFileName = None):
    localName = url2name(url)
    req = urllib2.Request(url)
    r = urllib2.urlopen(req)
    f = open(localFileName, 'wb')
    f.write(r.read())
    f.close()

    city_str=sys.argv[1]
    download("http://api.geonames.org/search?q="+city_str+"&maxRows=1&fuzzy=0.8&username=XXXXXXXXXX", "./geoname")
    city = etree.parse("geoname")
    element = city.getroot()
    city_lat =city.find("geoname/lat")
    city_lon =city.find("geoname/lng")
    download("http://api.wikilocation.org/articles?lat="+city_lat.text+"&lng="+city_lon.text+"&limit=50&radius=5000&format=xml", "articles")
    context = etree.iterparse("articles")
    article_dict = {}
    articles = []

    for action, elem in context:
    if not elem.text:
    text = "None"
    else:
    text = elem.text
    article_dict[elem.tag] = text
    if elem.tag == "article":
    articles.append(article_dict)
    article_dict = {}

    f = open('poi.gpx', 'w')
    f.write("")
    f.write("")
    for a in articles:
    f.write(" ")
    f.write(""+a["title"].encode('utf8')+"")
    f.write(""+a["url"].encode('utf8')+"")
    f.write("")

    f.write("")
    f.close()


    Забележка:
    Трябва ви потребитеско име, за да използвате API-тата на geonames. В кода трабва да смените XXXXXXXXXX с вашето потребителско име.

    Comments
    No Comments »
    Categories
    пътуване, софтуер
    Tags
    GPS, Mappero, N900, POI, wikipedia, wikitravel
    Comments rss Comments rss
    Trackback Trackback

    SpaceX Falcon 9 Launches

     
    The SpaceX Falcon 9 rocket soared into space from Space Launch Complex-40 on Cape Canaveral Air Force Station in Florida, carrying the Dragon capsule to orbit at 3:44 a.m. EDT on Tuesday, May 22, 2012. The launch is the company's second demonstration test flight for NASA's Commercial Orbital Transportation Services, or COTS, Program. During the flight, there will be a series of check-out procedures to test and prove Dragon's systems, including rendezvous and berthing with the International Space Station. If the capsule performs as planned, the cargo and experiments it is carrying will be transferred to the station. Image Credit: NASA/Alan Ault
    Read More

    Случаен цитат

    It is difficult to get a man to understand something when his salary depends upon his not understanding it. — Upton Sinclair

    I am reading now

    Cryptonomicon
    635 / Pages
    Cryptonomicon

     

    November 2011
    M T W T F S S
    « Oct   Dec »
     123456
    78910111213
    14151617181920
    21222324252627
    282930  

    чурулик

    • Абе каква е тая буря, снощи земетресение, сега потоп със светкавици... Подготовката за извънземното нашествие протича нормално :-)
    • more shaking
    • f#@!%ing scary earthquake in Sofia at 3:00 - 5.8 magnitude

    Blogroll

    • Блогът на Дино
    • Блогът на Камен
    • Блогът на Краси
    • Търсене в интернет

    User-submitted Links

    No recommended links yet. Add one?

    • Newest
    • Hot
    • Current
    • Top ranked

    Spam

    7,797
    SPAM BLOCKED
    rss Comments rss valid xhtml 1.1 design by jide powered by Wordpress get firefox