Чиним прогноз погоды в IP телефонах Grandstream
Через некоторое время после починки курсов валют обновилось погодное API Yahoo, и пришлось подставлять очередной быстро состряпанный костыль.
Конфигурационный файл nginx:
server { listen 8000; access_log /var/log/nginx/proxy.access.log main; error_log /var/log/nginx/proxy.error.log notice; # для погоды location /forecastrss { proxy_pass http://localhost/grandstream/weather.php; } # для валют location /d/333.txt { proxy_pass http://localhost/grandstream/currency.php; } }
Файл weather.php:
<?php header('Content-Type: text/xml'); if (!isset($_GET['u'])) $_GET['u'] = 'c'; $url = 'http://query.yahooapis.com/v1/public/yql?format=xml&q=SELECT%20*%20FROM%20weather.forecast%20WHERE%20u=%27' . $_GET['u'] . '%27%20AND%20woeid%20=%20' . '%27' . $_GET['p'] . '%27'; $proxy_addr = 'addr:port'; $proxy_user = 'user:password'; $h = curl_setup($url); $content = curl_exec($h); if ($content === false) { $errno = curl_error($ch); echo "Curl error: ($errno) " . curl_strerror($errno); } else { $sp = strpos($content, '<channel>'); $ep = strpos($content, '</channel>'); if (($sp === false) || ($ep === false)) { echo "Parse error"; } else { $c = substr($content, 0, $ep + strlen('</channel>')); $c = substr($c, $sp); echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><rss version="2.0" xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">'; echo $c; echo '</rss>'; } } curl_close($h); // === 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; } ?>
Также надо упомянуть, что перестали работать старые буквенно-цифровые коды городов, во всяком случае меня постоянно закидывало куда-то в Канаду. Новый код города можно узнать на сайте, нажав кнопку Change location.
Доброго времени суток всем) есть ситуация по данной теме
– Grandstream GXV3275 который не показывает погоду. При попытке добавлении пишет
(неудача) Произошла ошибка при поиске города. Попробуйте снова!
Есть какие то мысли как решить данный вопрос?
Для начала надо перехватить запрос и ответ и посмотреть, что не так. А там видно будет.
api от yahoo больше не работает пока работает временно но и это решение прикроют https://techarks.ru/qa/vipolnenie-zaprosa-api-yahoo-MD/
Ищу решение если кто то нашёл можно написать мне в телегу \ https://t.me/aleynikov2020
Message: GXP1450_SERVICE:[——————–][1.0.8.9][-XML Application-] curl perform err code 6, url is http://query.yahooapis.com/v1/public/yql?q=select+*+from+weather.forecast+where+woeid+in+(select+woeid+from+geo.places+where+text+%3d+'USMA0046'+limit+1)+AND+u+%3d+'f'+limit+5&format=xml, error message is Could not resolve host: query.yahooapis.com (DNS server returned answer with no data)