Главная > Технический изврат > Чиним прогноз погоды в 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. Пока что нет комментариев.

*