Снова 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;
}
?>