myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 

> Current_Weather_All_Cities, Выводит текущую погоду автом. в чат и по запросу, любые города

Рейтинг 5 V
Ksan
сообщение 3.1.2011, 17:31
Сообщение #1


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




Скрипт просмотра текущей погоды в разных городах (в чате периодически или по запросу через меню) с сервера http://pogoda.mail.ru/
Название: Current_Weather_All_Cities.lua
Платформа: PtokaX
API: API 2
Автор: Ksan (по мотивам скриптов от Nickolya и Saymon в этой теме

Библиотека: Для работы скрипта требуется библиотека Lua Socket
Библиотека: Для работы скрипта требуется библиотека SSL

Изменения от Ksan:
- добавил меню
- добавил выборку погодных явлений (облачность, осадки и т.д.)
- подправил чуток вывод градусов и мм.рт.ст
- подогнал под себя дизайн вывода
- можно смотреть текущую погоду разных городов (через меню)
- меню с разными городами строится автоматически в зависимости от таблицы городов
- добавлено ограничение частоты запросов погодного сервера
- добавил сборщик мусора
- добавлена инфа про макс. и мин. температуру в этот же день из архивов этого города (если отсутствует пр выводе, значит, нет информации в архивах)
- добавлено время восхода/захода солнца (для полярной ночи или дня будет так и написано - "Полярная ночь" , "Полярный день")
- добавлен вывод текущих даты/времени для просматриваемой местности
- добавлен вывод прогноза на ближайшее время суток

Примечания:
1. Индексы городов находить так: поиск по городу на странице сервера http://pogoda.mail.ru/ в правом верхнем углу, в открывшейся странице в поле адреса последнее число - это индекс нужного города.
2. Таблицу городов стройте аналогично уже вписанным в скрипт.
Названия городов транслитом можно получить через этот же сайт погоды http://pogoda.mail.ru/ (прописываете город в окошке ввода кириллицей, и потом получаете в адресной строке последнее слово - название города латинскими буквами).
3. И да, кому хочется показывать давление и влажность в чате (для всех), можете просто раскомментить 2 строки в функции "function SendToChat()"

ToDo:
- возможно, добавлю вывод по отдельному запросу полного прогноза на ближайшее время суток - на сейчас + на 2 из следующих времён суток - утро + день, вечер + ночь и т.д. (как на сайте сделано) СДЕЛАНО.
- есть возможность сделать отдельный вывод по запросу и на следующие дни, только не знаю, есть ли в этом смысл, ведь прогноз погоды на несколько дней - вещь рискованная..

Пример результата работы скрипта - ответ на запрос полного прогноза и вывод по времени в чат:
Код
По запросу:

[20:39:04] <Current_Weather> Погода в городе Томск (Россия, Томская область) :
        ************************************************************
        Время:  воскресенье, 22 июня 2014, 20:37
        ************************************************************

        Температура:     29°
        Погодные явления:     "малооблачно"
        Давление:         748 мм рт.ст.
        Влажность:         33% (низкая)
        Ветер:         1 м/c (СВ легкий ветер)
        Солнце:         восход:  04:29
                    заход:    22:14

        В этот же день (из архивов):
            Max.:         33°    (1982 год)
            Min.:         0°    (2008 год)
    *****************************************************************************
    НОЧЬЮ...      t°: 18°    "Ясно"
            Ветер: 3 м/c (С-СВ)  Влажн. 56%  Давл. 749 мм
    *****************************************************************************
    УТРОМ...      t°: 24°    "Ясно"
            Ветер: 4 м/c (С-СВ)  Влажн. 27%  Давл. 748 мм
    *****************************************************************************

В чате:

[18:17:46] <-Bot-> Погода в городе Томск (Россия, Томская область) :
        ************************************************************
        Температура:     30°
        Погодные явления:     малооблачно
        Ветер:         1 м/c (СВ легкий ветер)

        В этот же день (из архивов):
            Max.:         33°    (1982 год)
            Min.:         0°    (2008 год)
        ************************************************************
[Сорри, тут с форматированием некоторые проблемы на сайте, так что вид не совсем идентичный]
При запросе только текущей погоды вид такой же, только не будет нижних двух участков (прогноза на ближайшее время).
Для периодического вывода в чат вид такой же, разве что нет показа времени и параметров чуть меньше (но это всё включаемо через раскомментирование нужных строк в скрипте).

UPD:
- при попадании на просмотре через меню города без архивов погоды (есть и такие) следующие города показывались тоже без данных из архива (до перезапуска скрипта). Исправлено.
- на сайте изменили вид ссылки (теперь там вместо кодов городов - названия самих городов латиницей и без пробелов (вместо пробела - символ подчеркивания)). Скрипт переделан под это.

UPD-2:
- добавлена инфа про макс. и мин. температуру в этот же день из архивов этого города (если отсутствует при выводе, значит, нет информации в архивах), скрипт перезалит.
UPD-3:
- добавлена возможность выбора места вывода по запросу - в приват или чат ( local bSendToPrivat = true )
UPD-4:
- скрипт исправлен и добавлена как новая версия. Причина - изменение представления адреса на сайте погоды.
Но нет худа без добра - пока менял скрипт под это изменение, нашёл(и исправил) причину потери временами архивных данных при выводе информации.
UPD-5:
- скрипт исправлен и залит сюда, старые версии удалены за ненадобностью. Причина - полное изменение структуры страницы на сайте.
Пришлось всё перелопатить.
- добавил показ восхода/захода солнца.
UPD-6:
- добавил показ текущей даты/времени местности (UPD: убрал показ даты/времени для вывода в чат местнй погоды (зачем местным показывать их время, тем более, не очень точное))
- исключил вывод данных при получении ошибки с сайта (чтоб все города не получали одну и ту же погоду)
- небольшие косметические малозаметные изменения, улучшающие работу скрипта
UPD-7:
- добавил возможность выбрать через меню любой город/посёлок мира (но оставил возможность просмотра жёстко привязанных к меню городов)...для этого пришлось писать отдельный скрипт для выборки из сайта погоды и сборки в таблицу списков всех городов со странами и областями.
- в архиве есть папка с обязательными файлами (таблицы городов и цифровых кодов городов (последнее - для архивных температур))
UPD-8:
- пришлось перелопатить скрипт из-за изменений на странице погоды, в том числе и кодировки символов.
- для городов США уверенно отсутствуют архивные температуры. На сайте архивных данных сильно изменили представление страницы именно для США, для них необходимо отдельно парсить страницы и вытаскивать архив. Начал было делать эту работу, почти добил, потом подумал - а нафиг это надо кому, зачем эта лишняя работа, и забил. А так уже давно мог бы выложить исправленный скрипт, но так получилось, сорри.. плюс лень одолела в последнее время (это, скорее минус).
UPD-9:
- ввиду того, что на сайте полностью переделали интерфейс вывода погоды, изменился и код страницы, пришлось полностью перелопачивать парсинг
- теперь архивы берутся из этой же страницы (раньше для многих стран приходилось парсить другой сайт с архивом), но вот насчёт точности архивных данных не ручаюсь big_smile.gif
- добавил вывод температуры воды (для городов у моря и если этот параметр присутствует на странице погоды)
UPD-10:
- добавлена возможность запроса на выдачу (кроме текущей погоды) и прогноза на ближайшее время суток
- исправлена небольшая ошибка в коде
UPD-11:
- добавил возможность менять через меню частоту вывода текущей погоды в чат (не открывая скрипт и не перезапуская его), особенно будет удобно для тех, у кого хаб стоит далеко от своего компа.
При необходимости отмены вывода погоды в чат достаточно ввести одну цифру 0 (ноль) в данном меню вместо периода времени. Для включения нужно просто просто написать период в минутах, не равный 0 (нулю).
Файл перезалит.
UPD-12:
- сегодня вдруг скрипт стал выдавать результат с лишним словом из исходника (</span>) при годе минимальной температуры архивных данных (не знаю, почему, до этого было без таких ляпов), не стал копать глубоко, просто добавил в одну строку исправляющий код. Архив перезалил (изменение только в самом скрипте).
UPD-13:
- обнаружился баг - при попытке просмотра погоды городов из подменю "Другие города", если оставить первое окошко ввода пустым (а там надо вводить 0 или 1), то скрипт падал с ошибкой вроде этого:
Цитата
[03:45:32] <#OpChat#> ...r/ptokax/scripts/Current_Weather_All_Cities_Mint.lua:118: attempt to index local 'sCity' (a nil value)
То есть, не было "защиты от дурака". Скрипт исправил и архив перезалил. Изменение только в самом скрипте.
UPD-14:
- пришлось исправить пару строк в связи с переходом сайта погоды на безопасный режим, а также в связи с этим необходимо доустановить библиотеку SSL
UPD-15:
- пришлось изменить чуток код, ибо на сайте погоды внесли небольшие изменения в исходники страницы (добавили "+" к положительной температуре, в другом месте тоже изменили кусок и из-за этого температура воды не получалась, и была давненько появившаяся проблемка - перестало выдавать архивные температуры (для России), и тоже исправил). И да, заменил один из доп. файлов в папке, так что рекомендую у себя его заменить на мой - называется "citylist_Other.tbl")
UPD-16:
- заметил, что для некоторых местностей сайт не предоставляет данные о восходе и закате, в том числе и для заполярных территорий, поэтому везде, где эти данные отсутствуют, скрипт стал выдавать "Полярный день" и, возможно, "Полярная ночь" (зависит от даты). Дабы не вызывало недоумения, сделал выдачу типа этого - "Нет данных (либо полярный день)". Скрипт перезалит, из архива достаточно заменить основной файл (если вы изменили для себя основной скрипт на своё усмотрение, то посмотрите свой скрипт на предмет разницы). Вот изменённый участок кода:
Код
                if tonumber(os.date("%m")) > 3 and tonumber(os.date("%m")) <10 then
                    sSun = "Нет данных (либо там полярный день)"
                elseif tonumber(os.date("%m")) < 4 or tonumber(os.date("%m")) > 9 then
                    sSun = "Нет данных (либо там полярная ночь)"
                end

UPD-17:
- на сайте погоды опять изменили код страницы (у них там руки чешутся, что ли?), пришлось вновь подправлять скрипт (правда, не сразу руки дошли, прошу прощения за это), возможно, где-то пошли уже корявости из-за частых исправлений скрипта (как правило, не по моей вине).. Но вроде работает пока. Если что не так, напишите, для какой местности и какая ошибка..

Дата заливки последней версии: 2020-04-30 14:27 (мск.)

Прикрепленные файлы
Прикрепленный файл  Current_Weather_All_Cities.rar ( 123.46 килобайт ) Кол-во скачиваний: 5
 
Go to the top of the page
+Quote Post
4 страниц V   1 2 3 > »   
Начать новую тему
Ответов
Ksan
сообщение 19.1.2011, 6:15
Сообщение #2


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




UPD-2:
- подправлен чуток код, так как по запросу архивные данные по температуре могли не выводиться, даже если они есть. Также добавлена возможность выбора места вывода по запросу - в приват или чат. ( local bSendToPrivat = true )
Перезалит в первом сообщении.
Go to the top of the page
+Quote Post
BOKOREZ
сообщение 22.1.2011, 5:46
Сообщение #3


Абсолютный новичок


Группа: Пользователи
Сообщений: 7
Регистрация: 20.1.2011
Из: Комса
Пользователь №: 8 586
Спасибо сказали: 0 раз




Блин, скрипт как раз то что нужно, но есть проблемка...
Где можно взять http.lua , socket.dll , http.dll ?
Простите меня нуба, но я реально не знаю откуда их скачать можно) только начал заниматся хабом)
Go to the top of the page
+Quote Post
Saymon21
сообщение 22.1.2011, 5:54
Сообщение #4


Site Reliability Engineer
*********

Группа: Модераторы
Сообщений: 1 772
Регистрация: 27.6.2009
Из: Чувашия, г. Чебоксары
Пользователь №: 3 719
Спасибо сказали: 479 раз




BOKOREZ, http://mydc.ru/topic43.html
Go to the top of the page
+Quote Post
BOKOREZ
сообщение 22.1.2011, 6:54
Сообщение #5


Абсолютный новичок


Группа: Пользователи
Сообщений: 7
Регистрация: 20.1.2011
Из: Комса
Пользователь №: 8 586
Спасибо сказали: 0 раз




За ссылку спасибо большое, нашел уже)))
Автору за скрипт великая признательность)))
Go to the top of the page
+Quote Post
Ksan
сообщение 22.1.2011, 8:36
Сообщение #6


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




Да, забыл я написать в первом сообщении про библиотеку...Исправил уже.
Но на всякий случай продублирую тут:
Библиотека: для работы скрипта требуется библиотека Lua Socket
Go to the top of the page
+Quote Post
Dan Claimant
сообщение 23.1.2011, 1:46
Сообщение #7


Участник
**

Группа: Пользователи
Сообщений: 31
Регистрация: 28.11.2009
Пользователь №: 5 196
Спасибо сказали: 1 раз




[01:40:16] <OpChat> D:\()PtokaX\scripts\Temperature.lua:133: attempt to concatenate global 'sArchive' (a nil value)

я так понял это происходит в момент запроса на температуру в общий чат =)
Go to the top of the page
+Quote Post
Ksan
сообщение 23.1.2011, 3:43
Сообщение #8


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




Dan Claimant, найди эти строки:
Код
function SendToChat()
    bArchive = GetData(tCities[sCity])
и добавь сразу под ними эту:
Код
local sArchive = ""

Когда делал последнее исправление, забыл с тестируемого скрипта скопировать эту строку сюда.

UPD: Исправил и перезалил в первом сообщении.

Тест ɐwʎ ɔ ɐvmоɔ


Спасибо сказали:
Go to the top of the page
+Quote Post
reidel_viktor
сообщение 24.3.2011, 9:09
Сообщение #9


Начинающий
*

Группа: Пользователи
Сообщений: 17
Регистрация: 6.2.2010
Из: Амурск
Пользователь №: 5 974
Спасибо сказали: 0 раз




Поставил скрипт, поставил свой город. смотрю -8 в окно смотрю солнышко +2.. бред. secret_smile.gif
Go to the top of the page
+Quote Post
Ksan
сообщение 24.3.2011, 9:33
Сообщение #10


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




Градусник должен быть в тени, а также не подогреваться снизу или отражением..
Это как рабочая версия.
Сходи по ссылке из первого сообщения и глянь температуру через сайт и сравни с тем, что сейчас видишь за окном и через скрипт... Если что и не так, всё равно скрипт тут ни при чем (если он у тебя обновлялся с ночи).
Go to the top of the page
+Quote Post
Pickayurik
сообщение 17.11.2011, 6:14
Сообщение #11


Абсолютный новичок


Группа: Пользователи
Сообщений: 3
Регистрация: 12.8.2010
Пользователь №: 7 476
Спасибо сказали: 0 раз




Ставил скрипт и напоролся на то, что pogoga.mail.ru теперь пишет в конце не цифры города, а название в латинской транскрипции. Попробовал в скрипте - не заработало. В общем кому все же нужен номер города - надо навести курсор на вкладу "архив погоды" на странице нужного города и увидете в конце ссылки нужный номер.

И еще, если нужный город состоит из двух слов - в названии не надо ставить пробел. Например:
Новые Васюки - не работает
Новые_Васюки - работает.

Спасибо за скрипт!
Go to the top of the page
+Quote Post
Ksan
сообщение 18.11.2011, 4:38
Сообщение #12


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




1. Pickayurik, не знаю, почему у тебя не работал, у меня работает без всяких изменений. big_smile.gif
При запросе по ссылке со скрипта (которая с кодом в конце), ссылка на сайте преобразуется в другую (с городом в конце) и выдаёт необходимую информацию по погоде.
2. А насчёт пробела в названии населённого пункта - это нормально, что не выдаст, ибо в ссылке пробел - недопустимый символ, а символ подчеркивания издавна используется вместо пробела в таких случаях.

PS: Хотя можно и попробовать сразу добавить в скрипт новую ссылку с вытекающими отсюда небольшими изменениями...но стоит ли оно того, если и так работает?
PPS: Решил всё же подкорректировать скрипт. О результатах - ниже.


UPDATE-3:
Скрипт исправлен и перезалит, точнее, дозалит (оставил и первую версию пока)

Исправления:
- при попадании на просмотре через меню города без архивов погоды (есть и такие) следующие города показывались тоже без данных из архива (до перезапуска скрипта). Исправлено.
- на сайте изменили вид ссылки (теперь там вместо кодов городов - названия самих городов латиницей и без пробелов (вместо пробела - символ подчеркивания)). Скрипт переделан под это.

Доп. информация по поводу исправлений - в первом сообщении.
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 27.11.2011, 6:04
Сообщение #13


KEEP CLEAR AT ALL TIMES
****

Группа: Пользователи
Сообщений: 141
Регистрация: 4.9.2011
Из: Беларусь, Минск
Пользователь №: 9 667
Спасибо сказали: 3 раза




Хотелось бы узнать как сделать так, чтобы города шли в том порядке, в котором я захочу: алфавитном, или, например, так как в конфиге скрипта. Спрашиваю потому, что порядок следования в конфиге скрипта не всегда соблюдается и зависит от количества городов почему-то?..

Вообщем, короче говоря, порядок следования названий городов в конфиге скрипта не всегда (или почти не всегда) соблюдается в контекстном меню. Почему такое происходит?..
Go to the top of the page
+Quote Post
Ksan
сообщение 27.11.2011, 10:13
Сообщение #14


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




MIKHAIL, это зависит от структуры таблицы городов в скрипте. В данном случае таблица с названиями городов не структурирована по номерам, и отправляется юзеру в том порядке, в каком находится в памяти на данный момент. А это, в свою очередь, насколько я понимаю, зависит от предыдущих выборок юзеров при вызовах через меню.
Хотя можно было бы таблицу организовать иначе, по номерам, но лично мне пофиг, как расположены города в меню.
По большому счёту, это не имеет никакого значения, согласись?!
Go to the top of the page
+Quote Post
ustas
сообщение 27.11.2011, 18:03
Сообщение #15


Продвинутый участник
****

Группа: Пользователи
Сообщений: 177
Регистрация: 20.5.2008
Пользователь №: 5
Спасибо сказали: 26 раз




Цитата
По большому счёту, это не имеет никакого значения, согласись?!

Если городов много (например штук 30), то искать в меню их все-таки удобней по алфавиту.
Go to the top of the page
+Quote Post
MIKHAIL
сообщение 28.11.2011, 0:15
Сообщение #16


KEEP CLEAR AT ALL TIMES
****

Группа: Пользователи
Сообщений: 141
Регистрация: 4.9.2011
Из: Беларусь, Минск
Пользователь №: 9 667
Спасибо сказали: 3 раза




ustas, +1!
Go to the top of the page
+Quote Post
Dan Claimant
сообщение 9.12.2011, 19:25
Сообщение #17


Участник
**

Группа: Пользователи
Сообщений: 31
Регистрация: 28.11.2009
Пользователь №: 5 196
Спасибо сказали: 1 раз




что-то сегодня скрипт совсем разбушевался:

[19:34] Синтаксис D:\****\PtokaX\scripts\Temperature_New.lua:105: attempt to concatenate global 'sWeather' (a nil value)

а в опчате в итоге:

[19:34:32] <OpChat> Не удалось обработать информацию о погоде. Возможно, было изменено оформление страницы.
[19:34:32] <OpChat> D:\****\PtokaX\scripts\Temperature_New.lua:105: attempt to concatenate global 'sWeather' (a nil value)
Go to the top of the page
+Quote Post
Ksan
сообщение 9.12.2011, 19:34
Сообщение #18


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




Наверно, опять что-то на сайте изменили и парсинг не выдаёт нужного..
Придётся опять править..
Go to the top of the page
+Quote Post
Ksan
сообщение 15.12.2011, 6:24
Сообщение #19


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз





Наконец-то собрался и переделал скрипт.
Причина - полное изменение структуры страницы на сайте.
Пришлось всё перелопатить.
Плюс добавил показ восхода/захода солнца.


Дата заливки: 15-12-2011 06:25 (мск.)

Качайте из первого сообщения темы.


Спасибо сказали:
Go to the top of the page
+Quote Post
Ksan
сообщение 19.12.2011, 11:57
Сообщение #20


Белый Волк
*********

Группа: Пользователи
Сообщений: 1 723
Регистрация: 11.9.2008
Из: г.Томск
Пользователь №: 516
Спасибо сказали: 657 раз




UPD:
Выявился неучтённый момент - в архивных данных могут оказаться 2 года через запятую с одинаковой температурой Max. или Min., и при попадании такого случая скрипт падает. Что сегодня и случилось с Владивостоком.
Хорошо, хоть сам город не пострадал. big_smile.gif
Код подправил, скрипт перезалил в сообщении #1.

UPD-2:
Сделал косметическую подправку - восход/заход солнца разделил на 2 строки, а то слишком длинная получалась:
Код
Солнце:             восход: 09:52
                    заход:  16:42

Скрипт перезалил в сообщении #1.


Спасибо сказали:
Go to the top of the page
+Quote Post

4 страниц V   1 2 3 > » 
Ответить в данную темуНачать новую тему
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0

 



RSS Сейчас: 26.11.2024, 23:34