Главная > Технический изврат > Чиним прогноз погоды в IP телефонах Grandstream

Чиним прогноз погоды в 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.

weather

  1. Владимир
    26 октября 2020 в 13:54 | #1

    Доброго времени суток всем) есть ситуация по данной теме
    – Grandstream GXV3275 который не показывает погоду. При попытке добавлении пишет
    (неудача) Произошла ошибка при поиске города. Попробуйте снова!
    Есть какие то мысли как решить данный вопрос?

  2. User
    26 октября 2020 в 21:17 | #2

    Для начала надо перехватить запрос и ответ и посмотреть, что не так. А там видно будет.

  3. Александр
    2 декабря 2020 в 22:56 | #3

    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)

*