O jedno słowo za dużo?

Jeżeli jesteś tutaj po raz pierwszy może chcesz przez feed RSS albo emailem dostawać info o nowych postach?

Cóż, słowo się rzekło, kobyłka u płotu. Obiecałem udostępnić skrypty z HOWTO? Obiecałem. To teraz trzeba udostępnić. Musiałem tylko trochę kod poczyścić, dzięki temu cały proces znacznie się uautomatycznił :)) przynajmniej do czasu aż PP zmieni układ strony do szukania.

OK, do rzeczy, potrzeba nam następujących składników:

  • Ruby
  • lynx
  • unixpodobne zwierzę (ja to akurat na FreeBSD wszystko robię)

Najpierw Ruby. Skrypt parse.rb ściąga stronę(y) z wynikami szukania, parsuje je a wynik zapisuje w pliku poczta_out.js w bieżącym katalogu. Do ściągnięcia potrzebuje lynxa dostępnego w ścieżce. To czego szuka skrypt na stronie PP określają dwa parametry CITY oraz REGION na twardo zaszyte w skrypt (linie 4, 5). CITY to po prostu nazwa miejscowości, a REGION to numer województwa (lista uzyskana ze źródeł formularza na stronie poczty):

02 DOLNOŚLĄSKIE
04 KUJAWSKO-POMORSKIE
06 LUBELSKIE
08 LUBUSKIE
10 ŁÓDZKIE
12 MAŁOPOLSKIE
14 MAZOWIECKIE
16 OPOLSKIE
18 PODKARPACKIE
20 PODLASKIE
22 POMORSKIE
24 ŚLĄSKIE
26 ŚWIĘTOKRZYSKIE
28 WARMIŃSKO-MAZURSKIE
30 WIELKOPOLSKIE
32 ZACHODNIOPOMORSKIE

Czemu mnożyli to przez 2 to nie wiem, ale takie numerki trzeba używać. Akurat w parse.rb zaszyte jest miasto Opole, więc kod REGION to 16.

Czyli w skrypcie ustawiamy CITI oraz REGION i odpalamy go:

$ ruby parse.rb
**** First request ****
Page 3
Page 2
W sumie 21 placówek

OK. Teraz w poczta_out.js jest tablica ze wstępnymi danymi. Trzeba ją przepuścić przez geocoder aby uzyskać współrzędne z adresów. Tutaj na ratunek przychodzi poczta_geo.html, która robi geocoding. Najpierw musimy wpisać nazwę miasta w formularz (wiem, można było przez inna zmienna przekazać przez poczta_out.js) tak aby geocoder wiedział co dopisać do zapytania i klikamy geocode. Jeśli strona ma poprawny klucz Google Maps API, licznik powinien zacząć się zmniejszać, aż do zera, a potem powinna zostać wypisana tablica z finalnymi wynikami.

Teraz krótka analiza wyników – trzeba szukać ciągu 0, 0,. Jeśli taki się pojawił w finalnej tablicy jako współrzędne, to znaczy że dla tej lokalizacji wystąpił jakiś błąd podczas wywołania geocodera. Na przykład, Google Maps nie poradziło sobie w Warszawie z adresem Stacja METRO-CENTRUM, ale chyba nie będziemy się czepiać.

Jeśli wszystko jest OK to ta tablica to dane analogiczne jak dla Warszawy wcześniejsza moja praca.

Kilka uwag:

  • Jeśli chcesz przyspieszyć działanie geocodera zmień opóźnienie w poczta_geo.html w linii 66 z 500 na mniejsze – 100 będzie OK
  • Wymieniłem maile z webmasterem Poczty Polskiej i szykują oni jakąś wizualizację ale obawiam się, że to będzie tylko link z wyników szukania do mapy z zaznaczoną placówką (takie zobacz na mapie) a nie pełne odwzorowanie na mapie. Wystarczy spojrzeć w kod HTML wyników szukania (jak słusznie zauważył Imrahil)
  • poczta_geo.html wymaga wpisania klucza GM API – linia 14
  • jedna z rzeczy których sie przy okazji nauczyłem – IE tablicę [ 1, 2, 3, 4, ] traktuje jako 5-cio elementową (dodatkowy przecinek na końcu!), a Firefoks jako 4-ro. Dlatego z finalnego rezultatu należy usunąć ostatni przecinek z końca aby IE nie dostał dodatkowego pustego rekordu

No a na koniec zostawiłem samo mięsko:

Ktoś się Poznania domagał? :))) to proszę, czekam :))

I jeszcze jedna rzecz – jeśli będziecie mi podsyłać wynik waszych walk dla różnych miast mogę to wszystko trzymać w jednym miejscu, w ten sposób powstałaby jakaś bardziej kompletna baza danych. Choć może w końcu Poczta Polska to udostępni w jakiś sensowny sposób…

Popularity: 34% [?]

Spodobało się? Podziel się z innymi: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • Gwar
  • Ma.gnolia
  • Wykop
This entry was posted in Internet, Różne, Społeczność, javascript, ruby. Bookmark the permalink.

2 Responses to O jedno słowo za dużo?

  1. Drogomir says:

    Ja bym to uniezależnił od unixopodobnych i zamiast ściągania pliku lynxem zrobił używając http://www.ruby-doc.org/core/classes/Net/HTTP.html :)

    Oprócz tego bardzo fajny tutorial :)

  2. NetManiac says:

    Gdyby to pisał od początku z myślą o tym tutorialu to pewnie bym tak zrobił, ale to jest lekko wyczyszczony ‘jednorazowy’ skrypt. Następnym razem może będę pamiętał :)

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>