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ę...