Jak uzyskać kursy wymiany walut za pośrednictwem interfejsu API, takiego jak Google Finance? [Zamknięte]


137

Teraz znalazłem interfejs API Google Finance i zacząłem go przeglądać, ale znalazłem wiele informacji o portfelach, transakcjach, pozycjach i innych rzeczach, o których nic nie wiem.

Czy patrzę na niewłaściwe dokumenty? Co muszę zrobić, aby otrzymać kanał kursów wymiany od GF? Czy to w ogóle możliwe?

EDYTOWAĆ

Żeby było trochę jaśniej. Nie interesują mnie sprawy techniczne ani nie chcę żadnego kodu.


zobacz stackoverflow.com/a/21627583/592868 dla klasy php używającej Yahoo! Finanse
Felix Geenen,

3
@George Stocker To pytanie było początkowo bardzo konkretne na temat jakiegoś głupiego Google API, które zostało wycofane jakiś czas temu AFAIK. W jakiś sposób ludzie zaczęli dodawać alternatywy do tego API i przekształciło się to w swego rodzaju indeks dotyczący API wymiany walut. Oczywiście społeczność uznała to za przydatne, ponieważ zdobyło mnóstwo głosów i faworytów ...
Bogdan

@Bogdan Co mam zrobić?
George Stocker,

4
@GeorgeStocker Cóż, możesz zostawić ją zamkniętą, jeśli uważasz, że jest to niezgodne z regułami SO, ale nie usuwaj jej; Wydaje się, że ludzie uważają to za dobre odniesienie do tego rodzaju rzeczy. Mój 2c.
Bogdan

@GeorgeStocker To nr 1 w Google pod względem walutowych interfejsów API JavaScript i niezwykle przydatne. Ten element zasługuje na aktualizację, ponieważ pomaga wielu programistom, co jest głównym powodem, dla którego powstał stackoverflow. Chociaż masz rację co do litery reguły, nie jest w duchu zamykanie tego tematu, ponieważ nie ma spamu ani upartych odpowiedzi do znalezienia. Uprzejmie proszę o ponowne otwarcie.
Jan Derk

Odpowiedzi:


821

Dzięki za wszystkie odpowiedzi.

Darmowe currencyconverterapi:

  • Stawki aktualizowane co 30 min
  • Dla darmowego serwera wymagany jest teraz klucz API.

Przykładowy adres URL konwersji to: http://free.currencyconverterapi.com/api/v5/convert?q=EUR_USD&compact=y


Dla potomnych są tutaj wraz z innymi możliwymi odpowiedziami:

  1. Yahoo Finance API Wycofane 06.11.2017 ###

Przerwane od 06.11.2017 z komunikatem

Zauważyliśmy, że ta usługa jest używana z naruszeniem Warunków korzystania z usługi Yahoo. W związku z tym usługa jest wycofywana. Wszystkie przyszłe badania danych dotyczących rynków i akcji można znaleźć na stronie finance.yahoo.com.

Żądanie: http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s=USDINR=X
Ten plik CSV był używany przez wtyczkę jQuery o nazwie [Curry] [1]. Od tego czasu (29.08.2017) Curry przeniósł się na używanie fixer.io ze względu na problemy ze stabilnością. Może być przydatny, jeśli potrzebujesz czegoś więcej niż tylko pliku CSV.

  1. ( dzięki Keyo ) Yahoo Query Language pozwala uzyskać całą masę walut naraz w formacie XML lub JSON. Dane aktualizują się co sekundę (podczas gdy Europejski Bank Centralny ma dane jednodniowe) i zatrzymuje się w weekend. Nie wymaga żadnej rejestracji.

[http://query.yahooapis.com/v1/public/yql?q=select * z yahoo.finance.xchange gdzie para w („USDEUR”, „USDJPY”, „USDBGN”, „USDCZK”, „USDDKK” , „USDGBP”, „USDHUF”, „USDLTL”, „USDLVL”, „USDPLN”, „USDRON”, „USDSEK”, „USDCHF”, „USDNOK”, „USDHRK”, „USDRUB”, „USDTRY”, „ USDAUD ”,„ USDBRL ”,„ USDCAD ”,„ USDCNY ”,„ USDHKD ”,„ USDIDR ”,„ USDILS ”,„ USDINR ”,„ USDKRW ”,„ USDMXN ”,„ USDMYR ”,„ USDNZD ”,„ USDPHP ” , „USDSGD”, „USDTHB”, „USDZAR”, „USDISK”) & env = store: //datatables.org/alltableswithkeys] [1]

Tutaj jest Konstruktor zapytań YQL, gdzie możesz przetestować zapytanie i skopiować adres URL: (JUŻ NIE DOSTĘPNE)

http://developer.yahoo.com/yql/console/?q=show%20tables&env=store://datatables.org/alltableswithkeys#h=select%20*%20from%20yahoo.finance.xchange%20where%20pair% 20 w% 20% 28% 22 USDMXN% 22% 2C% 20% 22 USDCHF% 22% 29

Konsola yql nie jest już dostępna

  1. Open Source Exchange Rates API

Darmowy do użytku osobistego (1000 odsłon miesięcznie)
Zmiana „bazy” (z „USD”) nie jest dozwolona na koncie Darmowe konto
Wymaga rejestracji.
Żądanie: http://openexchangerates.org/latest.json
Odpowiedź:

   <!-- language: lang-js -->

    {
      "disclaimer": "This data is collected from various providers ...",
      "license": "all code open-source under GPL v3 ...",
      "timestamp": 1323115901,
      "base": "USD",
      "rates": {
          "AED": 3.66999725,
          "ALL": 102.09382091,
          "ANG": 1.78992886,
          // 115 more currency rates here ...
      }
    }
  1. currencylayer API

Darmowy plan na 250 odsłon miesięcznych
Zmiana „źródła” (z „USD”) nie jest dozwolona na koncie Darmowe konto.
Wymaga rejestracji.
Dokumentacja: currencylayer.com/documentation

Odpowiedź JSON:

   <!-- language: lang-js -->

    {
      [...]
      "timestamp": 1436284516,
      "source": "USD",
      "quotes": {
          "USDAUD": 1.345352401,
          "USDCAD": 1.27373397,
          "USDCHF": 0.947845302,
          "USDEUR": 0.91313905,
          "USDGBP": 0.647603397,
          // 168 world currencies
          }
      }
  1. Fixer.io API (dane Europejskiego Banku Centralnego)

Darmowy plan na 1000 odsłon miesięcznie
Zmiana „źródła” (z „USD”) nie jest dozwolona na koncie Darmowe konto. Wymaga rejestracji.

Ten punkt końcowy interfejsu API jest przestarzały i przestanie działać 1 czerwca 2018 r. Aby uzyskać więcej informacji, odwiedź: https://github.com/fixerAPI/fixer#readme)


Witryna: http://fixer.io/
Przykładowe żądanie: [http://api.fixer.io/latest?base=USD][7] Pobiera
tylko jedną wartość każdego dnia
  1. Kanał Europejskiego Banku Centralnego

Dokumenty: http://www.ecb.int/stats/exchange/eurofxref/html/index.en.html#dev
Żądanie: http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml

Odpowiedź XML :

   <!-- language: lang-xml -->

    <Cube>
      <Cube time="2015-07-07">
      <Cube currency="USD" rate="1.0931"/>
      <Cube currency="JPY" rate="133.88"/>
      <Cube currency="BGN" rate="1.9558"/>
      <Cube currency="CZK" rate="27.100"/>
    </Cube>
  1. ### exchangeatesapi.io ### Według strony internetowej:

    API kursów wymiany walut to bezpłatna usługa obejmująca aktualne i historyczne kursy walut publikowane przez Europejski Bank Centralny
    Ta usługa jest kompatybilna z fixer.io i jest naprawdę łatwa w użyciu: nie jest potrzebny klucz API. Na przykład (używa CURL, ale możesz użyć swojego ulubionego narzędzia do składania zapytań):

    > curl https://api.exchangeratesapi.io/latest?base=GBP&symbols=USD
    {"base":"GBP","rates":{"USD":1.264494191},"date":"2019-05-29"}
    
  2. ### CurrencyApi.net ### Darmowy plan na 1250 miesięcznych wyświetleń
    Walutą podstawową na bezpłatnym koncie jest USD.
    Wymaga rejestracji.
    Dokumentacja: currencyapi.net/documentation

    Odpowiedź JSON:

    {
      "valid": true,
      "timestamp": 1567957373,
      "base": "USD",
      "rates": {
              "AED": 3.673042,
              "AFN": 77.529504,
              "ALL": 109.410403,
              // 165 currencies + some cryptos
          }
      }
  3. ### Waluta z LabStack ###

Strona internetowa: https://labstack.com/currency
Dokumentacja: https://labstack.com/docs/api/currency/convert
Ceny: https://labstack.com/pricing
Żądanie: https://currency.labstack.com / api / v1 / convert / 1 / USD / INR
Odpowiedź:

```js
 {
   "time": "2019-10-09T21:15:00Z",
   "amount": 71.1488
 }
 ```

[1]: http://query.yahooapis.com/v1/public/yql?q=select * z yahoo.finance.xchange gdzie para w ("USDEUR", "USDJPY", "USDBGN", "USDCZK", „USDDKK”, „USDGBP”, „USDHUF”, „USDLTL”, „USDLVL”, „USDPLN”, „USDRON”, „USDSEK”, „USDCHF”, „USDNOK”, „USDHRK”, „USDRUB”, „USDTRY „,„ USDAUD ”,„ USDBRL ”,„ USDCAD ”,„ USDCNY ”,„ USDHKD ”,„ USDIDR ”,„ USDILS ”,„ USDINR ”,„ USDKRW ”,„ USDMXN ”,„ USDMYR ”,„ USDNZD ”, „USDPHP”, „USDSGD”, „USDTHB”, „USDZAR”, „USDISK”) & env = store: //datatables.org/alltableswithkeys


6
Oto link z bardziej użytecznym wyjaśnieniem interfejsu API finansów Yahoo.
Miranda

4
Należy pamiętać, że dane projektu Open Exchange Rate zostały przeniesione z GitHub (brak dostępnych danych) i są teraz obsługiwane przez openexchangerates.org - dzięki!
William Joss Crowcroft

17
rate-exchange.appspot już nie działa ..
letitbefornow


5
AKTUALIZACJA: Teraz Yahoo wyłączyło interfejs API z tą wiadomościąIt has come to our attention that this service is being used in violation of the Yahoo Terms of Service. As such, the service is being discontinued. For all future markets and equities data research, please refer to finance.yahoo.com.
ZenithS

66

Europejski Bank Centralny (EBC) ma również najbardziej niezawodny darmowy kanał, jaki znam. Zawiera około 28 walut i jest aktualizowany co najmniej raz dziennie.

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

Więcej formatów i narzędzi można znaleźć na stronie referencyjnej EBC: http://www.ecb.int/stats/exchange/eurofxref/html/index.en.html


3
zbyt zły fixer.io nie ma gwarancji. Nie do produkcji.
Ben Sinclair

2
Niestety nie aktualizuje się w weekendy.
Denis

Wiele rynków forex jest zamkniętych od 16:00 EST w piątek do 17:00 EST w niedzielę. Jeśli naprawdę potrzebujesz dokładniejszych stawek weekendowych, to tak, sprawdziłbym inny strumień.
Ryan

1
@Ryan Ale dlaczego nie pokazuje wszystkich walut?
Sunil Targe

4
Usługa Fixer.io jest niestety przestarzała. Istnieje alternatywa kompatybilny zamiennik Wymiana stopy API znajduje się exchangeratesapi.io
madisvain

53

Cześć @Keyo, kiedy próbuję próbkę YQL podaną w moim kodzie java, który próbuje odczytać jako adres URL, otrzymuję wyjątek IO (serwer zwrócił kod odpowiedzi HTTP: 400 dla adresu URL: query.yahooapis.com/v1/public/ yql? q = select * from yahoo.finance.xchange, gdzie para w ("USDEUR") & env = store: //datatables.org/alltableswithkeys), która działa, jeśli po prostu skopiuję ten adres URL do przeglądarki
Malik Firose

'public static void main (String [] args) {String currencyPair = "USDEUR"; Adres ciągu = " query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.xchange, gdzie para w (\" "+ currencyPair +" \ ") & env = store: //datatables.org/ alltableswithkeys "; try {// String response = URLReader.read (adres); // System.out.println (odpowiedź); URL url = nowy adres URL (adres); BufferedReader in = new BufferedReader (new InputStreamReader (url.openStream ())); } catch (Exception e) {// TODO Automatycznie wygenerowany blok catch e.printStackTrace (); }} '
Malik Firose

Cześć @Keyo, czy istnieje sposób na uzyskanie wysokiej / niskiej stawki dla określonego przedziału czasu w YQL?
entpnomad

3
Niestety Yahoo zakończyło wczoraj swoją usługę bez ostrzeżenia, narażając tysiące firm na niebezpieczeństwo.
FlorianB

Wygląda na to, że ten interfejs API jest trwale wyłączony.
aktywność zmniejszająca

47

Jeśli potrzebujesz bezpłatnego i prostego interfejsu API do konwersji jednej waluty na inną, wypróbuj free.currencyconverterapi.com .

Zastrzeżenie, jestem autorem tej witryny i używam jej na jednej z innych moich witryn.

Usługa jest bezpłatna nawet w zastosowaniach komercyjnych, ale nie zapewnia żadnej gwarancji. Ze względu na wydajność wartości są aktualizowane tylko co godzinę.

Przykładowy adres URL konwersji to: http://free.currencyconverterapi.com/api/v6/convert?q=EUR_PHP&compact=ultra&apiKey=sample-api-key, który zwróci wartość w formacie json, np. {"EUR_PHP": 60.849184}


1
Dzięki. Jakie jest źródło współczynników konwersji? Daje nam to możliwość zmierzenia niezawodności Twojej usługi.
s3m3n

1
Działa w listopadzie 2017 r. Dziękujemy za udostępnienie. Ale prosimy o dalsze udostępnianie go, ponieważ witryny od niego zależą. Korzystałem z Yahoo Finance, które właśnie umarło.
Tuntable

1
Potężny. Dzięki autorowi
james Oduro

1
Wkrótce przejdę na premium.
James Oduro

1
To NIE jest już darmowe. Wersja bezpłatna jest przeznaczona tylko do testów / wersji demonstracyjnych. Jeśli zażądasz więcej, zwróci 400 i wyświetli błąd: „System wykrył, że to żądanie stanowi nadużycie bezpłatnej usługi. Jeśli potrzebujesz więcej żądań, rozważ skorzystanie z usługi płatnej. Sprawdź stronę currencyconverterapi.com/pricing więcej informacji. Dziękuję. ” i zablokuj swój adres IP i klucz api.
Swifty

25

Mam tę zawartość z http://www.scriptarticle.com/2012/05/03/get-live-currency-rates-and-currency-conversion-using-php-and-apis/

<?php

function get_currency($from_Currency, $to_Currency, $amount) {
    $amount = urlencode($amount);
    $from_Currency = urlencode($from_Currency);
    $to_Currency = urlencode($to_Currency);

    $url = "http://www.google.com/finance/converter?a=$amount&from=$from_Currency&to=$to_Currency";

    $ch = curl_init();
    $timeout = 0;
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt ($ch, CURLOPT_USERAGENT,
                 "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $rawdata = curl_exec($ch);
    curl_close($ch);
    $data = explode('bld>', $rawdata);
    $data = explode($to_Currency, $data[1]);

    return round($data[0], 2);
}

// Call the function to get the currency converted
echo get_currency('USD', 'INR', 1);

?>

5
Gdy iGoogle jest poza pętlą, jest to najlepsza opcja, poprzednia opcja www.google.com/ig już nie działa.
raphie

1
www.google.com/finance już nie działa. We wrześniu 2017 r. Adres URL finansów został zmieniony na finance.google.com. : D bryanveloso.com/2017/09/14/…
jehzlau

2
Przeniesienie się Google na finance.google.com zaskoczyło mnie i złamało żądanie zawinięcia. Aby to naprawić, poproś curl o podążanie za przekierowaniami: curl_setopt ($ curl, CURLOPT_FOLLOWLOCATION, true);
jaybong

1
Właśnie wypróbowany google.com/finance/converter?a=1&from=INR&to=USD nie działa, otwiera okno dialogowe.
Tuntable

4
www.google.com/finance/converter i finance.google.com/finance/converter nie są już dostępne.
Christian

16

Oto kilka interfejsów API wymiany z przykładem PHP.

[ Open Exchange Rates API ]

Zapewnia bezpłatnie 1000 żądań miesięcznie. Musisz zarejestrować się i pobrać identyfikator aplikacji. Podstawowa waluta USD dla darmowego konta. Sprawdź obsługiwane waluty i dokumentację .

// open exchange URL // valid app_id * REQUIRED *
$exchange_url = 'https://openexchangerates.org/api/latest.json';
$params = array(
    'app_id' => 'YOUR_APP_ID'
);

// make cURL request // parse JSON
$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => $exchange_url . '?' . http_build_query($params),
    CURLOPT_RETURNTRANSFER => true
));
$response = json_decode(curl_exec($curl));
curl_close($curl);

if (!empty($response->rates)) {
    // convert 150 USD to JPY ( Japanese Yen )
    echo $response->rates->JPY * 150;
}

150 USD = 18039,09015 JPY

[ Currency Layer API ]

Zapewnia bezpłatnie 1000 żądań miesięcznie. Musisz się zarejestrować i pobrać klucz dostępu. Niestandardowa waluta podstawowa nie jest obsługiwana na koncie darmowym. Sprawdź dokumentację .

$exchange_url = 'http://apilayer.net/api/live';
$params = array(
    'access_key' => 'YOUR_ACCESS_KEY',
    'source' => 'USD',
    'currencies' => 'JPY',
    'format' => 1 // 1 = JSON
);

// make cURL request // parse JSON
$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_URL => $exchange_url . '?' . http_build_query($params),
    CURLOPT_RETURNTRANSFER => true
));
$response = json_decode(curl_exec($curl));
curl_close($curl);

if (!empty($response->quotes)) {
    // convert 150 USD to JPY ( Japanese Yen )
    echo '150 USD = ' . $response->quotes->USDJPY * 150 . ' JPY';
}

150 USD = 18036,75045 JPY


14
Kwota trafień bardzo łatwo ... niezalecane.
Ayush Goyal

7
@AyushGoyal Jeśli trafiasz do API dla każdej konwersji, to i tak robisz to źle. Skonfiguruj cronjob, aby co godzinę wysyłać zapytania do API i przechowywać aktualne kursy wymiany w tabeli bazy danych, a kiedy musisz wykonywać obliczenia wymiany, wyciągaj dane z tabeli tak często, jak chcesz. W ten sposób nigdy nie przekroczysz miesięcznego limitu.
uczestnik

1

Możesz spróbować geoplugin

Oprócz geolokalizacji wykonanej przez IP (ale IP jest adresem IP dostawcy, więc nie jest tak dokładne), zwracają również waluty i mają przelicznik walut: patrz przykłady.

Mają zaktualizowane 111 walut.


0

Jeśli szukasz rozwiązania tego problemu w oparciu o ruby, polecam skorzystanie z metody Google Calculator w rozwiązaniu podobnym do następującego: http://j.mp/QIC564

require 'faraday'
require 'faraday_middleware'
require 'json'

# Debug: 
# require "pry"


country_code_src = "USD"
country_code_dst = "INR"
connection = Faraday.get("http://www.google.com/ig/calculator?hl=en&q=1#{country_code_src}=?#{country_code_dst}")

currency_comparison_hash = eval connection.body #Google's output is not JSON, it's a hash

dst_currency_value, *dst_currency_text = *currency_comparison_hash[:rhs].split(' ')
dst_currency_value = dst_currency_value.to_f
dst_currency_text = dst_currency_text.join(' ')

puts "#{country_code_dst} -> #{dst_currency_value} (#{dst_currency_text} to 1 #{country_code_src})"

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


0

Oto jeden prosty skrypt PHP, który pobiera kurs wymiany między GBP a USD

<?php
$amount = urlencode("1");
$from_GBP0 = urlencode("GBP");
$to_usd= urlencode("USD");
$Dallor = "hl=en&q=$amount$from_GBP0%3D%3F$to_usd";
$US_Rate = file_get_contents("http://google.com/ig/calculator?".$Dallor);
$US_data = explode('"', $US_Rate);
$US_data = explode(' ', $US_data['3']);
$var_USD = $US_data['0'];
echo $to_usd;
echo $var_USD;
echo '<br/>'; 
?>

Kursy walut Google nie są dokładne. Google samo mówi ==> Google nie może zagwarantować dokładności kursów wymiany używanych przez kalkulator. Przed dokonaniem jakichkolwiek transakcji, na które mogą mieć wpływ zmiany kursów wymiany, należy potwierdzić aktualne kursy. Kursy walut obcych podane przez Citibank NA są wyświetlane w ramach licencji. Ceny służą wyłącznie do celów informacyjnych i mogą ulec zmianie bez powiadomienia. Stawki za rzeczywiste transakcje mogą się różnić, a Citibank nie oferuje zawarcia żadnej transakcji po wyświetlonym kursie.


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

-1

Dla wszystkich początkujących facetów, którzy szukają wskazówek dotyczących przeliczania walut, spójrz na ten link. Datavoila

To bardzo pomogło w przypadku mojego własnego projektu w C #. Na wypadek, gdyby strona zniknęła, dodam kod poniżej. Po prostu dodaj poniższe kroki do własnego projektu. Przepraszamy za formatowanie.

const string fromCurrency = "USD";
const string toCurrency = "EUR";
const double amount = 49.95;
// For other currency symbols see http://finance.yahoo.com/currency-converter/
// Clear the output editor //optional use, AFAIK
Output.Clear();

// Construct URL to query the Yahoo! Finance API
const string urlPattern = "http://finance.yahoo.com/d/quotes.csv?s={0}{1}=X&f=l1";
string url = String.Format(urlPattern, fromCurrency, toCurrency);

// Get response as string
string response = new WebClient().DownloadString(url);

// Convert string to number
double exchangeRate =
    double.Parse(response, System.Globalization.CultureInfo.InvariantCulture);

// Output the result
Output.Text = String.Format("{0} {1} = {2} {3}",
                            amount, fromCurrency,
                            amount * exchangeRate, toCurrency);
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.