xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Вывести в блоке погоду в Москве на основе данных яндекса

Опубликовано в

Пример модуля для вывода в блоке текущей погоды в Москве:

Пример блока

/**
 * Implements hook_block_info().
 */
function weather_block_info() {
  return array(
    'weather' => array(
      'info' => 'Погода в Москве',
      'cache' => DRUPAL_NO_CACHE,
    ),
  );
}
 
/**
 * Implements hook_block_view().
 */
function weather_block_view($delta = '') {
  $block = array();
  if ($delta == 'weather') {
    $weather = weather_get_weather();
    $block['subject'] = 'Погода в Москве';
    $block['content'] = '
      <img src="http://img.yandex.net/i/wiz' . $weather['image'] . '.png" alt="' . $weather['type'] . '" />
      ' . ($weather['temperature'] > 0 ? '+' . $weather['temperature'] : $weather['temperature']) . '
    ';
  }
  return $block;
}
 
/**
 * Return weather.
 */
function weather_get_weather($ignore_cache = FALSE) {
  if (!$ignore_cache && ($cache = cache_get('weather'))) {
    $weather = $cache->data;
  }
  else {
    $xml = simplexml_load_file('http://export.yandex.ru/weather-ng/forecasts/27530.xml');
    $weather = array(
      'temperature' => (string)$xml->fact->temperature,
      'image' => (string)$xml->fact->image,
      'type' => (string)$xml->fact->weather_type,
    );
    cache_set('weather', $weather);
    variable_set('weather_update_time', REQUEST_TIME);
  }
 
  return $weather;
}
 
/**
 * Implements hook_cron().
 */
function weather_cron() {
  if (REQUEST_TIME - variable_get('weather_update_time', 0) >= 60*60) {
    weather_get_weather(TRUE);
  }
}

Информация о погоде будет обновляться каждый час при ближайшем запуске крона.

Чтобы вывести погоду для другого города, достаточно в адресе xml-ки заменить 27530 на id города.

Исходники.

Написанное актуально для Drupal 7
Похожие записи

Комментарии RSS

Хотел когда-то копировать яндексовские прогнозы, но подумал, что они обидятся, раз официально нет возможности брать данные

а почему убрали вариант без крона?

так показалось универсальней

Модуль классный, поставил, все работает на УРА! Спасибо автору! И параллельно вопрос - а можно ли таким же образом выводить прогноз погоды, хотя бы на день-два вперед, в идеале на неделю?

в xml-ке есть погода на 10 дней. смотрите стуктуру

simplexml_load_file() не будет работать с удалёнными файлами, если allow_url_fopen = Off

а не могли бы вы выложить исходники варианта без крона?

Осталось понять как узнать ID города

а не могли бы вы выложить исходники варианта без крона?

удалите ф-ю weather_cron и в weather_get_weather замените условие на:

if (!$ignore_cache && ($cache = cache_get('weather')) && REQUEST_TIME - $cache->created > 60*60)

а не подскажите - есть ли подобные xml-ки для яндекс афиши и телепрограмма?
Или же поделитесь ссылкой , где есть все эти xmlки для всех сервисов яндекса

Будьте добры,а как пользоваться этим кодом,куда его помещать не подскажите?

>> Это вариант для тех, кому кажется, что в информере...

Информер особо не покастомизируешь :)

Будьте добры,а как пользоваться этим кодом,куда его помещать не подскажите?

http://xandeadx.ru/blog/drupal/256

Здравсвуйте, а как Вы узнали http://weather.yandex.ru/static/cities.xml ? И откуда брать остальные города? Список то неполный

а нет вроде все есть. но например просто москвы нет Воскресенск

все такие не нашел москву, минска а вот киев и астана есть

для москвы 4935
для минска 1845 возможно еще каких то нет. Это баг у них или где то есть список полный ?

больше данных можно получить http://export.yandex.ru/weather-ng/forecasts/26063.xml? отсюда

http://weather.yandex.ru/static/cities.xml и http://pogoda.yandex.ru/moscow/?ncrnd=5359 не совпадают и вызывают ошибку. я ошибся. И где теперь узнать недостающие?

а как можно заменить иконки на свои? не в курсе сколько иконок всего там и как называются?

свои иконки - это значит закачай к себе какие тебе нужны и выводи их.
эта ссылка у меня не работает - http://export.yandex.ru/weather-ng/forecasts/27530.xml
нашел это - http://xml.weather.co.ua/1.2/forecast/27
у там много чего есть - http://www.weather.ua/services/xml/

отличный модуль!!!
спасибо огромное!

а как сделать, чтобы можно было выводить подряд погоду из нескольких городов?

Так же интересно, как сделать выпадающим списком например, выбор городов?

Добрый день!
Очень понравился сей модуль, пользовался им на многих сайтах, но...
С мая 2016 перестал работать модуль. Поискав на просторах рунета, наткнулся на такую инфу:
http://coding.dp.ua/php/2395-ne-rabotaet-yandeks-pogoda-cherez-xml.html
Можно ли переделать модуль, чтобы снова сделать его рабочим?

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании