Граббер погоды с яндекса

Комментировать К комментариям

Небольшой граббер для погоды с сайта яндекса, делался собственноручно т.к. все аналогичное не подходило для моих нужд.
Грабится файл xml находящийся по адресу http://export.yandex.ru/weather/?city=номер_города.
Данный xml файл кэшируется на заданное время, парсинг производится при помощи регулярных выражений (для уменьшения нагрузки на сервер). Кроме того производится перекодировка данных из UTF-8 в Windows-1251.
Ниже код инициализации класса граббера, а в архиве сам класс и папка с картинками погоды яндекса.

1
2
3
4
5
6
7
8
9
10
11
include_once('weather_class.php');
	$wConf['code'] = "UTF-8";                      // Кодировка xml-а
	$wConf['curCode'] = "WINDOWS-1251";            // Текущая кодировка
	$wConf['yaUrl'] = "http://export.yandex.ru/weather/?city="; // URL файла погоды без идентификатора города
	$wConf['cityId'] = "27109";                    // Идентификатор города http://weather.yandex.ru/choose/
	$wConf['filePath'] = $_SERVER['DOCUMENT_ROOT'].'/weather.xml'; // Путь до файла кэша с названием файла
	$wConf['cacheTime'] = "3";                      // Время кэширования
	$obj = new weather($wConf);
	$arr = $obj->outWeather();
	$wStr = "<div>Сейчас в ".$arr[7]." ".$arr[12]."\xb0C <img src='wico".$arr[10]."' /><br />давление: ".$arr[13]." мм.рт.ст.<br />влажность: ".$arr[14]."%</div>";
	echo $wStr;

  weather (136,8 KiB, 2 527 скачиваний)

bezumkin Январь 13.2010 на 14:33 | #1

Спасибо, взял себе на сайт.

serg Январь 21.2010 на 03:01 | #2

Warning: fopen(/var/www/cyber-nation/data/www/cyber-nation.ix/weather.xml) [function.fopen]: failed to open stream: Permission denied in /var/www/cyber-nation/data/www/cyber-nation.ix/weather_class.php on line 41

Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/cyber-nation/data/www/cyber-nation.ix/weather_class.php on line 42

Warning: fclose(): supplied argument is not a valid stream resource in /var/www/cyber-nation/data/www/cyber-nation.ix/weather_class.php on line 43
————————————————————————
В чем причина помогите

mppks Январь 21.2010 на 12:36 | #3

У папки в которую пишется файл кэша weather.xml должны быть права на запись, в данном случае у тебя у папки cyber-nation.ix, если скриптам писать нельзя в chmod 755, то должен быть chmod 777

nestt Январь 22.2010 на 01:31 | #4

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

1. разархивировал скачанный архив, залил папку weather в корень сайта
и поставил на нее chmod 777.

2. скачал и активировал плагин Daiko’s Text Widget для Worpress — http://www.daikos.net/widgets/daikos-text-widget/
(виджет для вставки php кода)

3. вставил в виджет тот же код что и в этой статье указан

в результате получил ошибки:

Warning: Unknown(weather_class.php): failed to open stream: No such file or directory in /home/m52465/public_html/site.ru/wp-content/plugins/daikos-text-widget/daikostext.php(83) : eval()’d code on line 2

Warning: (null)() [function.include]: Failed opening ‘weather_class.php’ for inclusion (include_path=’.:/usr/lib/php:/usr/local/lib/php’) in /home/m52465/public_html/site.ru/wp-content/plugins/daikos-text-widget/daikostext.php(83) : eval()’d code on line 2

Fatal error: Cannot instantiate non-existent class: weather in /home/m52465/public_html/site.ru/wp-content/plugins/daikos-text-widget/daikostext.php(83) : eval()’d code on line 9

помогите плз.

mppks Январь 22.2010 на 04:09 | #5

В архиве лежит файл weather.php, его и приинклудь в виджете:
include_once($_SERVER['DOCUMENT_ROOT'].'/weather/weather.php');
В weather.php строка подключения класса для папки weather в корне будет такая:
include_once($_SERVER['DOCUMENT_ROOT'].'/weather/weather_class.php');
Кодировка в wordpress обычно utf-8, поэтому поменяй текущую кодировку:
$wConf['curCode'] = "UTF-8";
Путь до файла кэша:
$wConf['filePath'] = $_SERVER['DOCUMENT_ROOT'].'/weather/weather.xml';
В строке, которая выводится на экран, поменяй путь до картинки на/weather/wico, кроме того, там перед символом Цельсия стоит значок градуса — поменяй его на соответствующий в кодировке utf-8 или совсем убери.
И теперь весь файл сохрани в utf-8. Если ругнется на права у XML файла — удали его, чтобы он создался сам.

serg Январь 22.2010 на 18:20 | #6

спс разобрался вроде

nestt Январь 25.2010 на 23:46 | #7

я тоже разобрался, спасибо!

rover Март 3.2010 на 20:10 | #8

хотелось бы увидеть доработку кода, при котором можно было выбирать город. А также определение города по ip. Есть такая возможность?
а еще было бы здорово вывод на несколько дней

Петя Март 7.2010 на 16:25 | #9

спасибо, очень классно! просто мега! респект и уважуха от московских программеров!

Wex Март 15.2010 на 18:25 | #10

Огромное спасибо! Работает отлично. Выбор городов пишется элементарно…

nicko Октябрь 6.2010 на 14:40 | #11

проблема. выводит:

outWeather(); $wStr = »
Сейчас в «.$arr[7].» «.$arr[12].»\xb0C
давление: «.$arr[13].» мм.рт.ст.
влажность: «.$arr[14].»%
«; echo $wStr; ?>

wordpress. через виджет:

outWeather();
$wStr = «Сейчас в «.$arr[7].» «.$arr[12].»\xb0C давление: «.$arr[13].» мм.рт.ст.влажность: «.$arr[14].»%»;
echo $wStr;

?>

папку WEATHER в корень

в файле weather.php поменял пути

что может быть???

nicko Октябрь 6.2010 на 17:55 | #12

спасибо, разобрался

Стас Октябрь 17.2010 на 20:41 | #13

Не отображаються картинки:( в чем проблема?

Стас Октябрь 17.2010 на 20:43 | #14

Все перепробовал:( не хочет отображать:(

fatrus Апрель 22.2011 на 06:51 | #15

Странно, у меня не чего не показывает =(
Посмотрел массив:
Array ( [1] => 22 ) и все, куда все делось то?

mppks Апрель 22.2011 на 08:57 | #16

@fatrus
Яша стал отдавать xml в другом виде, на след неделе выложу измененный скрипт. Или пиши на mppks[собака]yandex.ru вышлю по почте сейчас.

Добавить комментарий для bezumkin Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*
CAPTCHA

*