sobota, 19 lipca 2008

Kursy walut

Już kiedyś kombinowałem z kursami walut używając do tego plugina Firefoxa. Teraz potrzebowałem czegoś co możnaby uruchmić jako skrypt, korzystający przy tym z jakiegoś wiarygodnego źródła danych i to najlepiej poprzez XML/API a nie html scraping (cf. np. Screen scraping with Perl), bo to ostatnie może nagle przestać działać jak się layout strony zmieni. Krótkie rozpoznanie w ww. kierunku dało w rezultacie następujące potencjalne rozwiązania:

1. Skrypt Johna Bokmy działający w oparciu o dane ze strony www.xe.com (wykorzystuje html scraping). Xe.com wygląda -- sądząc po zawartości serwisu WWW -- na renomowaną firmę ale skrypt nie działa, a nawet gdyby działał to Xe.com zabrania korzystania z ich strony w ten sposób (o czym zresztą John Bokma też pisze).

2. Pakiet Perla pn. Finance-Currency-Convert-WebserviceX, korzystający z kolei z danych ze strony webservicex.net. Nie znam firmy Generic Objects Technologies Ltd, która animuje serwis webservicex.net. Ponieważ wydało mi się, że firma nie jest specjalnie wiarygodna -- zapewne niesłusznie -- nie instalowałem ww. biblioteki Perla i szukałem dalej.

3. Pakiet Finance::Currency::Convert::Yahoo. Korzysta z danych Yahoo Finance i wykorzystuje html scraping. Ponieważ do Yahoo mam większe zaufanie, postanowiłem toto wypróbować:


perl -MCPAN -e 'install Finance::Currency::Convert::Yahoo'
perl -e 'use Finance::Currency::Convert::Yahoo; \
print Finance::Currency::Convert::Yahoo::convert(1,'USD','PLN');'

Wygląda, że działa i to mimo tego, że ostatnia wersja pakietu jest z roku 2005.

4. Dane z NBP udostępnione na stronie www.nbp.pl/Kursy/Kursya.html. Na dole tej strony jest link do pliku XML. Problem przy zautomatyzowaniu pobierania pliku jest z jego nieprzewidywalnie dziwną nazwą, np. a140z080718.xml. Powyższe oznacza, że to tabela o numerze 140 z dnia 2008/07/18. Oczywiście data to pryszcz (bieżąca) gorzej z numerem tabeli, który wydaje się być trudny do wyznaczenia.

Reasumując: niby prosta i potrzebna sprawa ale podejrzanie brak jest serwisu, który by oferowałby konwersję walut via API (wyjątek: webservicex.net, ale imho podejrzany:-). Pozostaje html scraping albo NBP. Google coś tajemniczo nic ,,w tym temacie'' nie ma -- może nieudolnie szukałem.

Dopisane 20 lipca 2008: czytelnik bloga Krzysztof R. (nazwisko do wiadomości Redakcji:-) już wczoraj zwrócił słusznie uwagę, że Przykładowe zapytanie: http://www.google.com/search?q=1 pln in usd&hl=en zwróci następujący ciąg znaków w treści strony: 1 Polish zloty = 0.495565 U.S. dollars. Ciąg ten można łatwo wydobyć przy pomocy wyrażenia regularnego.
Dziękuję za powyższą wskazówkę...

Brak komentarzy:

Prześlij komentarz