Скрипт просмотра текущей погоды в разных городах (в чате периодически или по запросу через меню) с сервера
Название: Current_Weather_All_Cities.lua
Платформа: PtokaX
API: API 2
Автор: Ksan (по мотивам скриптов от Nickolya и Saymon http://mydc.ru/topic2864.htmlБиблиотека: Для работы скрипта требуется библиотека http://mydc.ru/topic43.html
Библиотека: Для работы скрипта требуется библиотека http://mydc.ru/topic3401.html
Изменения от Ksan:
- добавил меню
- добавил выборку погодных явлений (облачность, осадки и т.д.)
- подправил чуток вывод градусов и мм.рт.ст
- подогнал под себя дизайн вывода
- можно смотреть текущую погоду разных городов (через меню)
- меню с разными городами строится автоматически в зависимости от таблицы городов
- добавлено ограничение частоты запросов погодного сервера
- добавил сборщик мусора
- добавлена инфа про макс. и мин. температуру в этот же день из архивов этого города (если отсутствует пр выводе, значит, нет информации в архивах)
- добавлено время восхода/захода солнца (для полярной ночи или дня будет так и написано - "Полярная ночь" , "Полярный день")
- добавлен вывод текущих даты/времени для просматриваемой местности
- добавлен вывод прогноза на ближайшее время суток
Примечания:
1. Индексы городов находить так: поиск по городу на странице сервера
2. Таблицу городов стройте аналогично уже вписанным в скрипт.
Названия городов транслитом можно получить через этот же сайт погоды
3. И да, кому хочется показывать давление и влажность в чате (для всех), можете просто раскомментить 2 строки в функции "function SendToChat()"
ToDo:
- возможно, добавлю вывод по отдельному запросу полного прогноза на ближайшее время суток - на сейчас + на 2 из следующих времён суток - утро + день, вечер + ночь и т.д. (как на сайте сделано) СДЕЛАНО.
- есть возможность сделать отдельный вывод по запросу и на следующие дни, только не знаю, есть ли в этом смысл, ведь прогноз погоды на несколько дней - вещь рискованная..
UPD-2:
- подправлен чуток код, так как по запросу архивные данные по температуре могли не выводиться, даже если они есть. Также добавлена возможность выбора места вывода по запросу - в приват или чат. ( local bSendToPrivat = true )
Перезалит в первом сообщении.
Блин, скрипт как раз то что нужно, но есть проблемка...
Где можно взять http.lua , socket.dll , http.dll ?
Простите меня нуба, но я реально не знаю откуда их скачать можно) только начал заниматся хабом)
BOKOREZ, http://mydc.ru/topic43.html
За ссылку спасибо большое, нашел уже)))
Автору за скрипт великая признательность)))
Да, забыл я написать в первом сообщении про библиотеку...Исправил уже.
Но на всякий случай продублирую тут:
Библиотека: для работы скрипта требуется библиотека http://mydc.ru/topic43.html
[01:40:16] <OpChat> D:\()PtokaX\scripts\Temperature.lua:133: attempt to concatenate global 'sArchive' (a nil value)
я так понял это происходит в момент запроса на температуру в общий чат =)
Dan Claimant, найди эти строки:
Поставил скрипт, поставил свой город. смотрю -8 в окно смотрю солнышко +2.. бред.
Градусник должен быть в тени, а также не подогреваться снизу или отражением..
Это как рабочая версия.
Сходи по ссылке из первого сообщения и глянь температуру через сайт и сравни с тем, что сейчас видишь за окном и через скрипт... Если что и не так, всё равно скрипт тут ни при чем (если он у тебя обновлялся с ночи).
Ставил скрипт и напоролся на то, что pogoga.mail.ru теперь пишет в конце не цифры города, а название в латинской транскрипции. Попробовал в скрипте - не заработало. В общем кому все же нужен номер города - надо навести курсор на вкладу "архив погоды" на странице нужного города и увидете в конце ссылки нужный номер.
И еще, если нужный город состоит из двух слов - в названии не надо ставить пробел. Например:
Новые Васюки - не работает
Новые_Васюки - работает.
Спасибо за скрипт!
1. Pickayurik, не знаю, почему у тебя не работал, у меня работает без всяких изменений.
При запросе по ссылке со скрипта (которая с кодом в конце), ссылка на сайте преобразуется в другую (с городом в конце) и выдаёт необходимую информацию по погоде.
2. А насчёт пробела в названии населённого пункта - это нормально, что не выдаст, ибо в ссылке пробел - недопустимый символ, а символ подчеркивания издавна используется вместо пробела в таких случаях.
PS: Хотя можно и попробовать сразу добавить в скрипт новую ссылку с вытекающими отсюда небольшими изменениями...но стоит ли оно того, если и так работает?
PPS: Решил всё же подкорректировать скрипт. О результатах - ниже.
UPDATE-3:
Скрипт исправлен и перезалит, точнее, дозалит (оставил и первую версию пока)
Исправления:
- при попадании на просмотре через меню города без архивов погоды (есть и такие) следующие города показывались тоже без данных из архива (до перезапуска скрипта). Исправлено.
- на сайте изменили вид ссылки (теперь там вместо кодов городов - названия самих городов латиницей и без пробелов (вместо пробела - символ подчеркивания)). Скрипт переделан под это.
Доп. информация по поводу исправлений - в первом сообщении.
Хотелось бы узнать как сделать так, чтобы города шли в том порядке, в котором я захочу: алфавитном, или, например, так как в конфиге скрипта. Спрашиваю потому, что порядок следования в конфиге скрипта не всегда соблюдается и зависит от количества городов почему-то?..
Вообщем, короче говоря, порядок следования названий городов в конфиге скрипта не всегда (или почти не всегда) соблюдается в контекстном меню. Почему такое происходит?..
MIKHAIL, это зависит от структуры таблицы городов в скрипте. В данном случае таблица с названиями городов не структурирована по номерам, и отправляется юзеру в том порядке, в каком находится в памяти на данный момент. А это, в свою очередь, насколько я понимаю, зависит от предыдущих выборок юзеров при вызовах через меню.
Хотя можно было бы таблицу организовать иначе, по номерам, но лично мне пофиг, как расположены города в меню.
По большому счёту, это не имеет никакого значения, согласись?!
ustas, +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)
Наверно, опять что-то на сайте изменили и парсинг не выдаёт нужного..
Придётся опять править..
Наконец-то собрался и переделал скрипт.
Причина - полное изменение структуры страницы на сайте.
Пришлось всё перелопатить.
Плюс добавил показ восхода/захода солнца.
Дата заливки: 15-12-2011 06:25 (мск.)
Качайте из первого сообщения темы.
UPD:
Выявился неучтённый момент - в архивных данных могут оказаться 2 года через запятую с одинаковой температурой Max. или Min., и при попадании такого случая скрипт падает. Что сегодня и случилось с Владивостоком.
Хорошо, хоть сам город не пострадал.
Код подправил, скрипт перезалил в сообщении #1.
UPD-2:
Сделал косметическую подправку - восход/заход солнца разделил на 2 строки, а то слишком длинная получалась:
UPD:
- добавил показ текущей даты/времени местности (правда, на сервере погоды время отстаёт минут аж на 5 , но всё же...)
- исключил вывод данных при получении ошибки с сайта (чтоб все города не получали одну и ту же погоду)
- небольшие косметические малозаметные изменения, улучшающие работу скрипта.
Скрипт перезалил в сообщении #1.
UPD:
- убрал показ даты/времени для вывода в чат местной погоды (зачем местным показывать их время, тем более, не очень точное)
Скрипт перезалил в сообщении #1.
ptokax 0.4.2.0
[20:25:57] Синтаксис error loading module 'pxsocket' from file 'D:\Program Files\PtokaX_new\scripts\libs\pxsocket.dll':
Не найдена указанная процедура.
библиотеки из LuaFileSystem_1.5.0.7z и LuaSocket_2.0.2.7z и LuaSQLite3_0.8_sqlite_3.7.7.1.7z в /scripts/lib/ копировал...
посоветуете что-нить, кроме как остаться на предыдущей птоке =)
Dan Claimant, пока только так..вернуться на предыдущую версию.
Ждите звонка...ждите звонка...ждите звонка...
Тут уже неоднократно писали про то, что для версии 0420 не все библиотеки годятся.
Попробуй остаться на 0420, но вернуть Луа 5.1.3 вместо 5.2.0 с теми же библиотеками, что у тебя сейчас стоят.
PS: И ещё я не понимаю, зачем вы так рвётесь в эти новые версии? Вас там что, мёдом кормят? Плохо сидится на версии 4.1.1(2)?
на самом деле я просто поставил 0,4,2 потестировать. ну и параллельно докладываю о тех скриптах, которые перестали =)
Dan Claimant,
Ты библиотеку сокетов обновил не полностью — Lua-модули старые остались.
Alexey, спасибо, удалил всё старое и по логам раскидал новое по папкам.
Синтаксис ...rs\GSG\Downloads\0.4.2.0-x64\scripts\Temperature.lua:155: bad argument #1 to 'RemoveTimer' (number expected, got userdata)
Причина в птоке 0.4.2.0, обнови её или вернись на более раннюю.
Кроме "стабильных" версий, существуют ещё и тестовые бета-версии. Например http://mydc.ru/topic19.html?view=findpost&p=44032
Temperature.lua:171: attempt to index a nil value
метод
UPD-6:
- добавил возможность выбрать любой город/посёлок мира (но оставил возможность просмотра жёстко привязанных к меню городов)...для этого пришлось писать отдельный скрипт (он здесь не представлен) для выборки из сайта погоды и сборки в таблицу списков всех городов со странами и областями.
- в архиве есть папка с обязательными файлами (таблицы городов и цифровых кодов городов (последнее - для архивных температур))
Дата заливки последней версии: 2013-06-16 16:35 (мск.)
16.06.2013 22:40:12 - /var/ptokax/scripts/Current_Weather_All_Cities.lua:247: attempt to index local 'sity' (a nil value)
город хаба указан латиницей без пробелов как на сайте kamensk-shakhtinskiy
KCAHDEP, поподробней, плиз!
И приведите строку, на которую указывает ошибка..
UPD: Так, я понял и воспроизвёл ошибку.. Сейчас буду думать, в чём дело..
KCAHDEP, нужно строку 196 (по скрипту на форуме)
гуд, ночь отработал, полет нормальный, спс.
Работал-работал и... поломался
22.08.2013 18:05:12 - /var/ptokax/scripts/Current_Weather_All_Cities.lua:175: attempt to concatenate global 'sRegion1' (a nil value)
Температура: +24°
Погодные явления: "полупрозрачная облачность"
Давление: 740 мм рт.ст
Влажность: 56%
Ветер: 8 Рј/СЃ ЮЗ
Солнце: РІРѕСЃС…РѕРґ: 07:57, заход: 20:14
В этот же день (из архивов):
Max.: +25.2° (1960Рі.)
Min: +3.6° (1977Рі.)
ой,это другая версия уже..
Чкет у меня на 0.5.0.0 не пашет
в чате кажет !curtemp1 Okha Оха
в логах Синтаксис C:\PtokaX\scripts\Current_Weather_All_Cities.lua:174: attempt to concatenate global 'sRegion1' (a nil value)
где что и как не понятно, подскажите что не правильно делаю.
Скрипт с изменениями выложен в сообщении #1.
UPD-7:
- пришлось перелопатить скрипт из-за изменений на странице погоды, в том числе и кодировки символов.
- теперь для городов США уверенно отсутствуют архивные температуры. На сайте архивных данных сильно изменили представление страницы именно для США, для них необходимо отдельно парсить страницы и вытаскивать архив. Начал было делать эту работу, почти добил, потом подумал - а нафиг это надо кому, зачем эта лишняя работа, и забил. А так уже давно мог бы выложить исправленный скрипт, но так получилось, сорри.. плюс лень одолела в последнее время (но это скорее минус).
Дата заливки последней версии: 2013-11-01 19:00 (мск.)
Со вчерашнего дня стал скрипт выдавать такую ошибку:
[00:41] Синтаксис ...\scripts\Current_Weather_All_Cities.lua:235: attempt to index global 'msg1' (a nil value)
Причём, не выдаёт погоду города по таймеру в чат и любую погоду любого города в личку по запросу!
Сам же скрипт запускается без ошибок:
[00:37] Нет синтаксических ошибок в файле скрипта Current_Weather_All_Cities.lua
[00:37] Скрипт запущен.
До вчерашнего дня работал без проблем он. Подскажите, что надо поправить?
Marc,
Есть такая проблема. Похоже, на сайте снова изменили структуру страниц, и теперь не парсится нужный текст и получается такая ошибка.
Надо снова переписать код парсинга. Сделаю...наверно. Но не сейчас. Точнее, не сразу..попозже.
Недосуг просто пока.
Наконец-то, дошли руки переделать и привести скрипт в рабочее состояние..Прошу прощения, что заставил так долго ждать, ну так получилось!
UPD-9:
- ввиду того, что на сайте полностью переделали интерфейс вывода погоды, изменился и код страницы, пришлось полностью перелопачивать парсинг
- теперь архивы берутся из этой же страницы (раньше для многих стран приходилось парсить другой сайт с архивом), но вот насчёт точности архивных данных не ручаюсь
- добавил вывод температуры воды (для городов у моря и если этот параметр присутствует на странице погоды)
Скрипт перезалит в первом сообщении темы.
ToDo:
- возможно, добавлю вывод по отдельному запросу полного прогноза на ближайшее время суток - на сейчас + на 2 из следующих времён суток - утро + день, вечер + ночь и т.д. (как на сайте сделано)
- есть возможность сделать отдельный вывод по запросу и на следующие дни, только не знаю, есть ли в этом смысл, ведь прогноз погоды на несколько дней - вещь рискованная..
Дата заливки текущей версии: 2014-06-20 20:10 (мск.)
UPD-10:
Ksan!
Спасибо за работу!
Поставил и попробовал: смотрю, что теперь нет кодов городов, но он их видит всё равно!
Удачно получилось с прогнозом погоды: показывает погоду "Ночью" и "Утром" (это я сейчас тестил)
По запросу погоду в разных городах выдает всё отлично! Вывод погоды в чат также работает по таймеру на отлично!!
UPD-11:
- добавил возможность менять через меню частоту вывода текущей погоды в чат (не открывая скрипт и не перезапуская его), особенно будет удобно для тех, у кого хаб стоит далеко от своего компа.
При необходимости отмены вывода погоды в чат достаточно ввести одну цифру 0 (ноль) в данном меню вместо периода времени. Для включения нужно просто просто написать период в минутах, не равный 0 (нулю).
Файл перезалит.
Дата заливки последней версии: 2014-06-26 03:40 (мск.)
UPD-12:
- сегодня вдруг скрипт стал выдавать результат с лишним словом из исходника (/span) при годе минимальной температуры архивных данных (не знаю, почему, до этого было без таких ляпов), не стал копать глубоко, просто добавил в одну строку исправляющий код. Архив перезалил (изменение только в самом скрипте).
Дата заливки последней версии: 2014-11-11 23:22 (мск.)
Ksan, все поставил как сказано но при запуске скрипта в итоге получил:
[12:05:12] Синтаксис error loading module 'pxsocket' from file 'C:\0.5.0.2_Lua5.1.5\scripts\libs\pxsocket.dll':
Не найдена указанная процедура.
stack traceback:
[C]: ?
[C]: in function 'require'
C:\0.5.0.2_Lua5.1.5\scripts\libs\socket.lua:13: in main chunk
[C]: in function 'require'
C:\0.5.0.2_Lua5.1.5\scripts\libs\socket\http.lua:11: in main chunk
[C]: in function 'require'
....0.2_Lua5.1.5\scripts\Current_Weather_All_Cities.lua:71: in function <....0.2_Lua5.1.5\scripts\Current_Weather_All_Cities.lua:70>
просьба помочь в исправлении ошибки
Nikolaevich, значит не всё, библиотеки не поставил, поставь и будет работать.
UPD-13:
- обнаружился баг - при попытке просмотра погоды городов из подменю "Другие города", если оставить первое окошко ввода пустым (а там надо вводить 0 или 1), то скрипт падал с ошибкой вроде этого:
Конечно не знаю, но вот у меня уже дня три данный скрипт не работает, хотя до этого, с изменениями тут выложенными, работал исправно!
Перестал выводить погоду в чат хаба и по запросу в личку с данной ошибкой: ...\scripts\Current_Weather_All_Cities.lua:275: attempt to index a nil value
Попробовал сам подправить, но безуспешно.
Просьба или подправить или подсказать, что поправить, так как скрипт очень хороший!
Скрипт запускается без ошибок, ошибка появляется по срабатыванию таймера и по запросу погоды.
Marc,
Сайт поменял префикс с "http://" на "https://", и просто так исходник страницы не скачать...тут надо новую библиотеку применять (SSL). Подробных рекомендаций я не могу дать, но как отправную точку могу посоветовать http://mydc.ru/topic3401.html. Судя по тексту автора темы, с виндовой Птокой особой проблемы не должно быть (хотя могу ошибаться насчёт 64-бит), но вот с линуксовой версией у меня с лёту не прокатило...Как установить библиотеку под Дебиан/Убунту - для этого есть команда в комменте #2. У меня поставилась (вроде), но скрипт всё равно выдаёт ошибку, версия библиотеки, возможно, не нравится.. У меня стоит Птока мод 6 от Alex82.
Короче, возникающие вопросы нужно там задавать. Потом, если прокатит, расскажете тут, что и как вы сделали. Поделитесь опытом! А то мне сейчас чуток нет возможности плотно заняться этим.
Ksan!
Расскажу о своих действиях:
-видел, что поменялась страница на "https://" Всвязи с этим, по некоторой подсказке из другого скрипта Артёма (TempUserList2.lua) пытался внести изменения в этот твой скрипт с изменением кода:
Marc,
У меня скрипт завелся после десятиминутного колдовства. 71 строка:
alex82,
alex82!
На Win 7, при редактировании строки 270 скрипта, корректировке 71 строки, стало вновь всё работать как и раньше (в чат выводится погода, по запросу тоже)!
Спасибо за колдовство!)
Обобщая последние поправки (из-за перехода сайта погоды на безопасный режим), закинул в первое сообщение исправленный скрипт.
Исправления такие:
1. Необходимо установить библиотеку SSL. Как - читайте в теме http://mydc.ru/topic3401.html
Для линукса (дебиан/убунту/Минт) - команда установки этой библиотеки
При запросе погоды через меню городов выдает ошибку.
Sinsei, вы когда научитесь правильно презентовать проблему?
1. Как минимум нужно показывать, к какой строке относится представленная ошибка, то есть, как выглядит строка 86! (Хотя тут я понимаю, к какой строке относится, тем не менее, это не всегда очевидно)
2. Что меняли сами в коде скрипта - что-нибудь добавляли, изменяли, удаляли из исходного скрипта..
3. Подсказка - если ошибка скрипта указывает вам, что 'sCmdTemp2' (a nil value), то есть, переменная оказалась не определена, просто проверьте по скрипту, встречается ли переменная sCmdTemp2 до строки с ошибкой, и имеет ли не пустое строчное значение, если встречается..
Короче, сравните свой вариант скрипта с исходным (с форума) вариантом. И изучите изменения и потери, найдите, куда делась строка с изначальным определением переменной sCmdTemp2. Восстановите её и будет вам погода. Если ещё что-то не испортили..
Приветствую Ksan! до недавнего времени скрипт прекрасно работал, теперь пишет Current_Weather_All_Cities.lua:416: attempt to concatenate global 'sTempNow' (a nil value). Прошу помочь.
В скрипте ничего не менял.
Привет!
AndreiDC, вы хоть показывайте, как выглядит эта строка! Привыкайте при сообщениях об ошибках сразу показывать строку с той ошибкой.
В загруженной на форум скрипте в строке 416 нет такого слова - sTempNow, но зато есть в следующей, 417-й строке.
Это означает, что вы, как минимум, одну строку добавили!
Ну вот разобрался и с этим скриптом БОЛЬШОЕ СПАСИБО автору за его работу. Все причины были в самой библиотеке, которая не подходила, а с новой библиотекой заработал сразу и никаких ошибок.
Nikolaevich, посмотрел я на вашу картинку и обратил внимание на "Полярный день" для Нью-Йорка.
И сделал выводы.. Результат ниже.
UPD-16:
- заметил, что для некоторых местностей сайт не предоставляет данные о восходе и закате, в том числе и для заполярных территорий, поэтому везде, где эти данные отсутствуют, скрипт стал выдавать "Полярный день" и, возможно, "Полярная ночь" (зависит от даты). Дабы не вызывало недоумения, сделал выдачу типа этого - "Нет данных (либо полярный день)". Скрипт перезалит, из архива достаточно заменить основной файл (если вы изменили для себя основной скрипт на своё усмотрение, то посмотрите свой скрипт на предмет разницы). Вот изменённый участок кода:
UPD-17:
- на сайте погоды опять изменили код страницы (у них там руки чешутся, что ли?), пришлось вновь подправлять скрипт (правда, не сразу руки дошли, прошу прощения за это), возможно, где-то пошли уже корявости из-за частых исправлений скрипта (как правило, не по моей вине).. Но вроде работает пока. Если что не так, напишите, для какой местности и какая ошибка..
Дата заливки последней версии: 2020-04-30 14:27 (мск.)
Скрипт качать из первого поста темы.
Из исходного сайта исчез показ архивных температур, так что скрипт этот момент теперь не показывает.. С лёту не нашёл новый источник для добычи архивных данных.. Может, кто подскажет?