Programowy dostęp do kursów wymiany walut [zamknięte]


112

Konfiguruję system zamówień online, ale jestem w Australii i dla klientów międzynarodowych chciałbym wyświetlać ceny w dolarach amerykańskich lub euro, aby nie musieli podejmować wysiłków umysłowych przy przeliczaniu z dolarów australijskich.

Czy ktoś wie, czy mogę pobierać aktualne kursy wymiany z sieci gdzieś w łatwym do przeanalizowania formacie, do którego mam dostęp z mojego skryptu PHP?


UPDATE: Napisałem teraz klasę PHP, która to implementuje. Możesz pobrać kod z mojej strony internetowej .


1
@Kelly: Bardzo dobra sugestia, ponieważ Google jest bezpłatny i ma duże szanse na dalsze istnienie w najbliższej przyszłości: sugeruję, abyś przesłał ją jako odpowiedź.
Eric O Lebigot

1
Nie można edytować komentarza. Oto nowy link jarloo.com/exchange-rate-api
Kelly,

1
dzięki za udostępnienie @Adam Pierce! Czy jest sposób, aby uzyskać również kursy historyczne?
Aris

Możesz również użyć tego linku. Jest darmowy, po prostu zarejestruj się i zdobądź klucz API. jsonrates.com/docs
Gajendra K Chauhan

Użyj currencylayer.com - zapewniają kursy w czasie rzeczywistym i historyczne w formacie JSON, wraz z kilkoma przykładami PHP ( currencylayer.com/documentation )
Frank

Odpowiedzi:


71

Możesz przeliczać waluty w prostym formacie z Yahoo:

Na przykład, aby przeliczyć z GBP na EUR: http://download.finance.yahoo.com/d/quotes.csv?s=GBPEUR=X&f=sl1d1t1ba&e=.csv


To jest aktualne i łatwe do przeanalizowania. To jest to, czego szukam.
Adam Pierce

4
Mnie też to interesuje, czy są jakieś informacje o tym, jakie parametry oznaczają? W szczególności parametr „f”. Nigdzie nie mogę znaleźć żadnych informacji.
Fishcake

9
Czy czytanie tych danych jest legalne, jeśli masz komercyjną stronę internetową?
Junior Mayhé

4
Dalsze eksperymenty pokazują, że możesz zażądać wielu współczynników konwersji naraz, oddzielając symbole w parametrze „s” przecinkami, na przykład: download.finance.yahoo.com/d/…
Myster

3
Czy istnieje sposób na określenie daty?
Maxim Egorushkin

40

Ta odpowiedź jest BARDZO późna, ale w powyższych odpowiedziach brakuje kluczowych informacji.

Jeśli chcesz wyświetlać swoim klientom dokładne ceny, ważne jest, aby zrozumieć, jak działają kursy wymiany walut.

Większość serwisów walutowych podaje tylko kurs spot (w połowie między ofertą kupna i sprzedaży). Spot jest rodzajem skrótu dla kursu walutowego, ale nikt go nie otrzymuje, ponieważ możesz sprzedawać tylko po licytacji lub kupować po zapytaniu. Zwykle patrzysz na co najmniej 1% spread między nimi, więc kurs spot wynosi 0,5% dla twoich klientów.

Ale to nie koniec, Twoi klienci prawie na pewno używają karty kredytowej, a Visa / Mastercard / Amex pobierają opłaty za wymianę walut. Z mojego doświadczenia wynika, że ​​są one nietrywialne, na NAJMNIEJ 2,5%. Na przykład Citibank Australia pobiera 3,3%. Różnią się one w zależności od karty, więc nie ma sposobu, aby przewidzieć ostateczną cenę, jaką zapłacą Twoi klienci.

Jeśli chcesz podać swoim klientom „dokładną” cenę w oparciu o kurs wymiany, musisz wziąć pod uwagę powyższe i zapewnić bufor, aby w końcu nie naliczać więcej, niż podałeś.

FWIW, dodałem 4% do tego, co inaczej wskazywałaby konwersja F / X.


Ponadto stawki walutowe zmieniają się cały czas, a banki mogą brać pod uwagę tylko kurs o północy czasu lokalnego. Z ~ 2% dziennej zmienności nie jest niepewność.
Alexandre C.

1
To świetna uwaga. Zdecydowanie wzmacnia potrzebę posiadania jakiegoś bufora, jeśli wyświetlasz jedną walutę, ale obciążasz inną. Co jest warte, z moim 4% wypełnieniem, nigdy nie kazałem nikomu dokonać obciążenia zwrotnego.
philoye

Nie wszystkie banki to pobierają. Na przykład karty kredytowe i debetowe z Meksyku po prostu przeliczą walutę po cenie, którą mają tego dnia, na sprzedaż waluty i nic więcej.
Francisco Zarabozo

26

Dobrze by było dodać

  http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml

do listy.

Oficjalne stopy referencyjne podawane przez Europejski Bank Centralny na podstawie regularnej codziennej procedury uzgadniania między bankami centralnymi w ramach Europejskiego Systemu Banków Centralnych i poza nim.

Kanał jest w formacie XML i kilku innych formatach .
Aktualizacja zwykle odbywa się o godzinie 14.15 (14:15) czasu EBC (= czasu frankfurckiego).


4
Właśnie sprawdzone (20 minut po Twoim komentarzu) i jest dostępne dla mnie.
Jacco

Właśnie próbowałem tego użyć, ale VB.NET odmawia poprawnego XPath. Czy to dlatego, że oba adresy URL definiujące przestrzenie nazw są 404?
Rikki

ten link zawsze pokazuje wczorajsze kursy, a nie dzisiejsze.
erkanyildiz

12

Niedawno zaimplementowałem to samo, ale używając API Google. Adres URL zapytania wygląda następująco:

http://www.google.com/ig/calculator?hl=en&q=1GBP=?USD

Przyjmuje 3 parametry. Pierwszym parametrem jest kwota, po której następuje kod waluty ISO 4217 , z którego konwertujesz, znak równości i znak zapytania oraz kod waluty, na którą konwertujesz. Listę kodów obsługiwanych przez Google można znaleźć tutaj . Odpowiedź na zapytanie będzie wyglądać następująco:

{lhs: "1 British pound",rhs: "1.6132 U.S. dollars",error: "",icc: true}

Jest to dość oczywiste, więc nie będę tutaj wchodził w szczegóły. Oto jak poradziłem sobie z odpowiedzią na zapytanie:

function convert_currency($amount, $from_code, $to_code){
    ini_set('max_execution_time', 60);
    $temp = 'http://www.google.com/ig/calculator?hl=en&q=' . $amount . $from_code . '=?' . $to_code;

    $response = file_get_contents($temp);
    $result_string = explode('"', $response);

    $final_result = $result_string['3'];

    $float_result = preg_replace("/[^0-9\.]/", '', $full_result);

    return $float_result;
}

Jestem pewien, że nie jest to najbardziej elegancki sposób, ale jestem całkiem nowy w PHP. Mam nadzieję, że to pomoże!


2
Możesz użyć json_decode zamiast eksplodować, jeśli chcesz, aby był bardziej niezawodny.
diolemo

czy są ograniczenia w tej usłudze?
witryny

To jest zbyt łatwe do sformułowania i użycia ... Dziękuję
IWIH,

5
„iGoogle zostało wycofane 1 listopada 2013 r.”, Twoja aplikacja już nie działa
yegor256,

Użyłem podobnego kodu, który został zmieniony, aby używać metody Yahoo quotes.csv z tylko dwiema liniami zmian w kodzie.
Marcus

12

kolejny świetny darmowy i otwarty link to:

https://raw.github.com/currencybot/open-exchange-rates/master/latest.json
(znalazłem o tym tutaj: http://josscrowcroft.github.com/open-exchange-rates/ )

[Aktualizacja] :
Dane projektu Open Exchange Rate zostały przeniesione z GitHub.
Jest już dostępny pod adresem : http://openexchangerates.org/
Dane w formacie JSON są dostępne pod adresem : http://openexchangerates.org/latest.json

Bez opłat za dostęp, bez limitów kursów , bez brzydkiego XML - po prostu darmowe , aktualizowane co godzinę kursy wymiany w formacie JSON.
To nie jest teraz „całkowicie” darmowe. Zgodnie z nową licencją dozwolonych jest do 1000 odsłon miesięcznie, za które trzeba zapłacić. Musisz również zapłacić, jeśli chcesz skorzystać z przelicznika jednej waluty (podstawowa funkcjonalność).

[Uwaga: możesz również spojrzeć na odpowiedź. ]


1
Być może już nie działa
shasi kanth

1
Dzięki @dskanth za przypomnienie. Zaktualizowano łącze i informacje. :)
zeFree

1
Wolne Plan OpenExchangeRates dostępna jest tutaj z 1000 wniosków miesięcznie .. jego malutkie ogniwo, więc nie będzie go dostrzec w większości przypadków .. openexchangerates.org/signup/free
theFlash

6

Dodałem tabelę Open Data do YQL, możesz jej użyć do pobrania danych kursów wymiany z yahoo.finance.

Wypróbuj w konsoli YQL

Format rozdzielany przecinkami jest lepszy od „gdzie para w ('EURUSD', 'GBPUSD')”, ale w każdym razie możesz używać obu, a nawet mieszać je.


Dzięki stary. To w połączeniu z dokumentacją YQL na PHP pomogło mi bardzo dobrze!
miCRoSCoPiC_eaRthLinG Kwietnia

cześć, czy możemy dodać parametr daty np. chcę uzyskać historyczny kurs wymiany.
Elisa,



3

Wypróbuj ten RESTful (nie jestem pewien, czy to naprawdę REST, ponieważ otrzymałem to pierwotnie z SOAP, po prostu próbowałem uzyskać do niego dostęp za pomocą HTTP GET)


Nie widzę, gdzie podałeś „kwotę” do przeliczenia, ale odzyskujesz jakąś liczbę ... czy możesz to wyjaśnić?
SpokaneDude

1
Nie przyjmuje kwoty. Konwertuje to tylko zCurrency na toCurrency, gdzie kwota fromCurrency wynosi zawsze jeden (1). Następnie od Ciebie zależy, czy opracujesz algorytm konwersji kwoty
Kevin

Dziękuję ... to ma sens. teraz ...
SpokaneDude

3

iGoogle został wycofany 1 listopada 2013 r. Ten interfejs API już nie działa.

Aby uzyskać kurs wymiany, możesz użyć czegoś takiego:

function get_exchange_rate($from, $to){
    $data = file_get_contents("http://www.google.com/ig/calculator?hl=en&q=1{$from}=?{$to}");
    preg_match('/rhs\:\s?"([0-9\.]+)/', $data, $m);
    return $m[1];
}

Możesz dodać tam pamięć podręczną DB, aby upewnić się, że nie zostaniesz dławiony itp.

Jak zauważono w innych postach / komentarzach, będziesz wtedy używał tego kursu do obliczania swoich walut




1

coinnill.com ma swego rodzaju usługę internetową.

http://coinmill.com/rss/AUD_USD.xml

poda na przykład kurs AUD -> USD. Będziesz musiał tylko przeanalizować XML, który wróci.


Te dane wydają się nieaktualne. Mówi się, że AUD to 0,77, ale wiem, że dzisiaj jest to 0,69.
Adam Pierce

Poza tym użyteczne dane (kursy wymiany) są jedynymi bitami niekodowanymi w XML! To tylko zwykły tekst w CDATA ...
Rikki

1

Czuję się zmuszony dodać:

http://www.exchangerate-api.com/

Śmiertelnie prosty w użyciu z czystym interfejsem API RESTful, a rejestracja zajmuje 5 sekund. Zawiera przykłady kodowania dla większości głównych języków, większość ma 2-3 wiersze.

Stawki są aktualizowane co godzinę, więc jest to dobre dla większości zastosowań, a miesięcznie można uzyskać 30000 zapytań za 7 USD miesięcznie. Nigdy nie potrzebowałem więcej, ale stawki są bardzo rozsądne w przypadku większych ilości.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.