egismeteo.tcl - Погода с gismeteo.ru

Решение вопросов при работе с TCL скриптами.

Модератор: Модераторы

egismeteo.tcl - Погода с gismeteo.ru

Сообщение tvrsh » 20 дек 2014 20:41

Название: egismeteo.tcl
Версия: 1.0
Автор: tvrsh
Описание: Скрипт показывает погоду с сайта gismeteo.ru, написан на смену моей погоде с яндекса.
Поддержка Suzi: Да
Пример работы:
<tvrsh> !п Сакраменто
<+bionic> Сакраменто / Калифорния: Пасмурно, +12°C, Ветер юго-восточный: 5м/с(18 км/ч), Давление: 765мм.рт.ст, Влажность: 88%, Температура воды: +11°C.

Дополнительная информация:
Пока с минимальным функционалом, постепенно буду дописывать.
Ссылка на скрипт:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: egismeteo.tcl - Погода с gismeteo.ru

Сообщение tvrsh » 21 дек 2014 18:18

Переписал скрипт для работы с бета-версией нового сайта, добавил возможность использования алиасов городов.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: egismeteo.tcl - Погода с gismeteo.ru

Сообщение Pitstopper » 22 дек 2014 16:28

В патилайне при запросе погоды выдает такое:

Tcl error [::egismeteo::egismeteo_pub]: can't read "place": no such variable
Pitstopper
 
Сообщения: 13
Зарегистрирован: 03 фев 2014 14:40
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21

Re: egismeteo.tcl - Погода с gismeteo.ru

Сообщение Vertigo » 22 дек 2014 19:14

Pitstopper писал(а):В патилайне при запросе погоды выдает такое:

Tcl error [::egismeteo::egismeteo_pub]: can't read "place": no such variable

IP твоего бота скорее всего забанен на сервере гисметео, потому и не сработал парсер в скрипте. Это уже прошедшая практика. Скриптом пользоваться в таком случае не получится.
Чтобы убедиться в этом, добавь код
set ncode [http::ncode $egismeteo_tok]
set code [http::code $egismeteo_tok]
if {$ncode != "200"} {putserv "PRIVMSG $chan :\00304HTTP-Error\003: $code"; return}

после строки
set d [::http::data $egismeteo_tok]

Вообще tvrsh ленится добавлять подобные проверки в скрипт, а они между прочим, значительно облегчают диагностику ошибок при работе скрипта.
Аватара пользователя
Vertigo
 
Сообщения: 107
Зарегистрирован: 20 авг 2008 23:49
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 37 раз.
Версия бота: Eggdrop 1.8

Re: egismeteo.tcl - Погода с gismeteo.ru

Сообщение Pitstopper » 24 дек 2014 16:02

Vertigo, после добавления твоего кода - ситуация не изменилась, никаких сообщений в патилайне не добавилось. По прежнему - Tcl error [::egismeteo::egismeteo_pub]: can't read "place": no such variable.
Pitstopper
 
Сообщения: 13
Зарегистрирован: 03 фев 2014 14:40
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21

Re: egismeteo.tcl - Погода с gismeteo.ru

Сообщение Vertigo » 24 дек 2014 19:00

Pitstopper писал(а):Vertigo, после добавления твоего кода - ситуация не изменилась, никаких сообщений в патилайне не добавилось. По прежнему - Tcl error [::egismeteo::egismeteo_pub]: can't read "place": no such variable.

После добавления моего кода, ошибка будет выводиться в канал, если она есть (ответ сервера отличен от 'HTTP/1.1 200 OK'. Ты бота рехашил после добавления кода?
Если это все равно не помогло, добавь строчку
set place [list]
перед строчкой
foreach {null aa} [regexp -all -inline -start 1 -- {<a class="js-crumb link b" .*?>(.*?)</a>} $d] {
Аватара пользователя
Vertigo
 
Сообщения: 107
Зарегистрирован: 20 авг 2008 23:49
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 37 раз.
Версия бота: Eggdrop 1.8

Re: egismeteo.tcl - Погода с gismeteo.ru

Сообщение tvrsh » 27 дек 2014 14:08

Учел все замечания и добавил показ остальных городов через -2, -3, -4 и т.д.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: egismeteo.tcl - Погода с gismeteo.ru

Сообщение Pitstopper » 27 дек 2014 17:36

Теперь в патилайне такое:
Tcl error [::egismeteo::egismeteo_pub]: can't read "e": no such variable
Pitstopper
 
Сообщения: 13
Зарегистрирован: 03 фев 2014 14:40
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21

Re: egismeteo.tcl - Погода с gismeteo.ru

Сообщение Vertigo » 27 дек 2014 17:47

Pitstopper, подозреваю, что у тебя бот не умеет работать с гзипом. В переменной с данными получается нечитаемая ксунта, поэтому парсер и не работает. В патилане набери .status и покажи строку с "Tcl version:". А в качестве панацеи попробуй заменить в скрипте
catch {set egismeteo_tok [::http::geturl "http://beta.gismeteo.ru/search/[::http::formatQuery $text]" -timeout "15000"]} error
на
catch {set egismeteo_tok [::http::geturl "http://beta.gismeteo.ru/search/[::http::formatQuery $text]" -timeout "15000" -headers [list "Accept-Encoding" None]]} error
и
catch {set egismeteo_tok [::http::geturl "http://beta.gismeteo.ru[lindex $f $r]" -timeout "15000"]} error
на
catch {set egismeteo_tok [::http::geturl "http://beta.gismeteo.ru[lindex $f $r]" -timeout "15000" -headers [list "Accept-Encoding" None]]} error

Если это все равно не поможет, могу посоветовать установить более новый тикль (8.6+) или пакет critctl.
Аватара пользователя
Vertigo
 
Сообщения: 107
Зарегистрирован: 20 авг 2008 23:49
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 37 раз.
Версия бота: Eggdrop 1.8

Re: egismeteo.tcl - Погода с gismeteo.ru

Сообщение Pitstopper » 27 дек 2014 17:58

OS: Linux 3.12.28+
Библиотека Tcl: /usr/local/lib/tcl8.6
Версия Tcl: 8.6.0 (версия заголовка 8.6.0)
Tcl is threaded.

И да, ошибка все равно остается.
Pitstopper
 
Сообщения: 13
Зарегистрирован: 03 фев 2014 14:40
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21

Re: egismeteo.tcl - Погода с gismeteo.ru

Сообщение Vertigo » 27 дек 2014 18:03

Чтоб поставить точку в этом вопросе, добавь следующий код (сохранив полученные данные в файл), чтоб не гадать что и как.
set f [open egismeteo.txt w+]; puts $f $d; flush $f; close $f

Добавь эту строчку после строчки
set d [::http::data $egismeteo_tok]

И выложи сюда или проанализируй сам содержимое файла egismeteo.txt в корневой директории бота.
Аватара пользователя
Vertigo
 
Сообщения: 107
Зарегистрирован: 20 авг 2008 23:49
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 37 раз.
Версия бота: Eggdrop 1.8

Re: egismeteo.tcl - Погода с gismeteo.ru

Сообщение Pitstopper » 27 дек 2014 18:09

Ок, прикрепляю.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Pitstopper
 
Сообщения: 13
Зарегистрирован: 03 фев 2014 14:40
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21

Re: egismeteo.tcl - Погода с gismeteo.ru

Сообщение Vertigo » 27 дек 2014 18:17

Pitstopper, у тебя в полученных данных в исходном коде страницы <div class="frame-current-weather">, а в скрипте парсится <div class="current-weather">. Могу посоветовать заменить строчку
regexp {<div class="current-weather">(.*?)<!-- frame forecast -->} $d "" e
на
regexp {<div.*?current-weather">(.*?)<!-- frame location -->} $d "" e
. Наверно гисметео отдаёт разные варианты страницы в зависимости от геолокации клиента. Не факт, что это поможет, ибо дальше тоже, вероятно будет ошибка в парсере. Мне, если честно, править лень чужой код ).

За это сообщение автора Vertigo поблагодарил:
Pitstopper (27 дек 2014 18:26)
Аватара пользователя
Vertigo
 
Сообщения: 107
Зарегистрирован: 20 авг 2008 23:49
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 37 раз.
Версия бота: Eggdrop 1.8

Re: egismeteo.tcl - Погода с gismeteo.ru

Сообщение Pitstopper » 27 дек 2014 18:23

В патилайне ошибок нет, а в канал выдает такое: /: /A=>, . Что ж, будем ждать, когда автор поправит. Спасибо за помощь!
Pitstopper
 
Сообщения: 13
Зарегистрирован: 03 фев 2014 14:40
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21

Re: egismeteo.tcl - Погода с gismeteo.ru

Сообщение Bart » 15 апр 2015 23:10

Pitstopper писал(а):Tcl error [::egismeteo::egismeteo_pub]: can't read "e": no such variable

Тоже бывает такая ошибка, но не постоянно. Например, после рестарта некоторое время работает, потом отваливается.
Аватара пользователя
Bart
 
Сообщения: 24
Зарегистрирован: 05 фев 2014 01:35
Благодарил (а): 17 раз.
Поблагодарили: 0 раз.
Версия бота: Eggdrop 1.6.21+suzi


Вернуться в TCL скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

cron