Снова Grandstream и валюты
В один прекрасный день я снова не обнаружил курсы валют на экране своего телефона. Оказалось, что Yahoo навсегда закрыл свое валютное API, и надо было искать замену.
Покопавшись в интернете, я выбрал сервис Alpha Vantage. Они предоставляют в реальном времени различную финансовую информацию, причем бесплатно. Нужно только получить API ключ.
Данные отдаются в формате JSON в нормальном человеко-читаемом виде. Естественно, пришлось переделать скрипт для доступа к данным.
<?php $apikey = 'YOUR_KEY'; $url = "https://www.alphavantage.co/query?function=CURRENCY_EXCHANGE_RATE&apikey=${apikey}&"; $proxy_addr = 'addr:port'; $proxy_user = 'user:password'; $round = 2; $pairs = array(); $params = preg_split('/&/', $_SERVER['QUERY_STRING']); foreach ($params as $param) { $matches = array(); if (preg_match('/^s=(\w+)(\w{3})=/', $param, $matches)) { $pairs[] = 'from_currency=' . $matches[1] . '&to_currency=' . $matches[2]; } } $cm = curl_multi_init(); $cmh = array(); foreach ($pairs as $pair) { $h = curl_setup($url . $pair); curl_multi_add_handle($cm, $h); $cmh[] = $h; } $running = false; do { curl_multi_exec($cm, $running); curl_multi_select($cm); } while ($running); foreach($cmh as $h) { $content = curl_multi_getcontent($h); $parsed = json_decode($content, true); if (!$parsed) continue; $name = $parsed['Realtime Currency Exchange Rate']['1. From_Currency Code'] . $parsed['Realtime Currency Exchange Rate']['3. To_Currency Code']; $rate = $parsed['Realtime Currency Exchange Rate']['5. Exchange Rate']; if ($round) { $rate = round((float)$rate, $round); } echo "${rate},\"${name}=X\"\n"; curl_multi_remove_handle($cm, $h); } curl_multi_close($cm); // === function curl_setup($url) { global $proxy_addr, $proxy_user; $h = curl_init($url); curl_setopt($h, CURLOPT_RETURNTRANSFER, true); curl_setopt($h, CURLOPT_HEADER, false); curl_setopt($h, CURLOPT_TIMEOUT, 10); if ($proxy_addr) curl_setopt($h, CURLOPT_PROXY, $proxy_addr); if ($proxy_user) curl_setopt($h, CURLOPT_USERPWD, $proxy_user); return $h; } ?>