Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Сетевые скрипты [PtokaX] _ Current_Weather_All_Cities

Автор: Ksan 3.1.2011, 17:31

Скрипт просмотра текущей погоды в разных городах (в чате периодически или по запросу через меню) с сервера http://mydc.ru/r/?http://pogoda.mail.ru/
Название: 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. Индексы городов находить так: поиск по городу на странице сервера http://mydc.ru/r/?http://pogoda.mail.ru/ в правом верхнем углу, в открывшейся странице в поле адреса последнее число - это индекс нужного города.
2. Таблицу городов стройте аналогично уже вписанным в скрипт.
Названия городов транслитом можно получить через этот же сайт погоды http://mydc.ru/r/?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:
- пришлось исправить пару строк в связи с переходом сайта погоды на безопасный режим, а также в связи с этим необходимо доустановить http://mydc.ru/topic3401.html
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 килобайт ) : 4
 

Автор: Ksan 19.1.2011, 6:15

UPD-2:
- подправлен чуток код, так как по запросу архивные данные по температуре могли не выводиться, даже если они есть. Также добавлена возможность выбора места вывода по запросу - в приват или чат. ( local bSendToPrivat = true )
Перезалит в первом сообщении.

Автор: BOKOREZ 22.1.2011, 5:46

Блин, скрипт как раз то что нужно, но есть проблемка...
Где можно взять http.lua , socket.dll , http.dll ?
Простите меня нуба, но я реально не знаю откуда их скачать можно) только начал заниматся хабом)

Автор: Saymon 22.1.2011, 5:54

BOKOREZ, http://mydc.ru/topic43.html

Автор: BOKOREZ 22.1.2011, 6:54

За ссылку спасибо большое, нашел уже)))
Автору за скрипт великая признательность)))

Автор: Ksan 22.1.2011, 8:36

Да, забыл я написать в первом сообщении про библиотеку...Исправил уже.
Но на всякий случай продублирую тут:
Библиотека: для работы скрипта требуется библиотека http://mydc.ru/topic43.html

Автор: Dan Claimant 23.1.2011, 1:46

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

я так понял это происходит в момент запроса на температуру в общий чат =)

Автор: Ksan 23.1.2011, 3:43

Dan Claimant, найди эти строки:

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

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

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

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

Автор: reidel_viktor 24.3.2011, 9:09

Поставил скрипт, поставил свой город. смотрю -8 в окно смотрю солнышко +2.. бред. secret_smile.gif

Автор: Ksan 24.3.2011, 9:33

Градусник должен быть в тени, а также не подогреваться снизу или отражением..
Это как рабочая версия.
Сходи по ссылке из первого сообщения и глянь температуру через сайт и сравни с тем, что сейчас видишь за окном и через скрипт... Если что и не так, всё равно скрипт тут ни при чем (если он у тебя обновлялся с ночи).

Автор: Pickayurik 17.11.2011, 6:14

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

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

Спасибо за скрипт!

Автор: Ksan 18.11.2011, 4:38

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

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


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

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

Доп. информация по поводу исправлений - в первом сообщении.

Автор: MIKHAIL 27.11.2011, 6:04

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

Вообщем, короче говоря, порядок следования названий городов в конфиге скрипта не всегда (или почти не всегда) соблюдается в контекстном меню. Почему такое происходит?..

Автор: Ksan 27.11.2011, 10:13

MIKHAIL, это зависит от структуры таблицы городов в скрипте. В данном случае таблица с названиями городов не структурирована по номерам, и отправляется юзеру в том порядке, в каком находится в памяти на данный момент. А это, в свою очередь, насколько я понимаю, зависит от предыдущих выборок юзеров при вызовах через меню.
Хотя можно было бы таблицу организовать иначе, по номерам, но лично мне пофиг, как расположены города в меню.
По большому счёту, это не имеет никакого значения, согласись?!

Автор: ustas 27.11.2011, 18:03

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

Если городов много (например штук 30), то искать в меню их все-таки удобней по алфавиту.

Автор: MIKHAIL 28.11.2011, 0:15

ustas, +1!

Автор: Dan Claimant 9.12.2011, 19:25

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

[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)

Автор: Ksan 9.12.2011, 19:34

Наверно, опять что-то на сайте изменили и парсинг не выдаёт нужного..
Придётся опять править..

Автор: Ksan 15.12.2011, 6:24


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


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

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

Автор: Ksan 19.12.2011, 11:57

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

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

Код
Солнце:             восход: 09:52
                    заход:  16:42

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

Автор: Ksan 22.12.2011, 2:15

UPD:
- добавил показ текущей даты/времени местности (правда, на сервере погоды время отстаёт минут аж на 5 big_smile.gif , но всё же...)
- исключил вывод данных при получении ошибки с сайта (чтоб все города не получали одну и ту же погоду)
- небольшие косметические малозаметные изменения, улучшающие работу скрипта.

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

UPD:
- убрал показ даты/времени для вывода в чат местной погоды (зачем местным показывать их время, тем более, не очень точное)

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

Автор: Dan Claimant 1.1.2012, 19:32

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/ копировал...
посоветуете что-нить, кроме как остаться на предыдущей птоке =)

Автор: Ksan 1.1.2012, 21:26

Dan Claimant, пока только так..вернуться на предыдущую версию.
Ждите звонка...ждите звонка...ждите звонка...
Тут уже неоднократно писали про то, что для версии 0420 не все библиотеки годятся.
Попробуй остаться на 0420, но вернуть Луа 5.1.3 вместо 5.2.0 с теми же библиотеками, что у тебя сейчас стоят.

PS: И ещё я не понимаю, зачем вы так рвётесь в эти новые версии? Вас там что, мёдом кормят? Плохо сидится на версии 4.1.1(2)?

Автор: Dan Claimant 1.1.2012, 21:53

на самом деле я просто поставил 0,4,2 потестировать. ну и параллельно докладываю о тех скриптах, которые перестали =)

Автор: Alexey 3.1.2012, 5:43

Dan Claimant,
Ты библиотеку сокетов обновил не полностью — Lua-модули старые остались.

Автор: Dan Claimant 3.1.2012, 12:07

Alexey, спасибо, удалил всё старое и по логам раскидал новое по папкам.

Автор: Sergey613 8.10.2012, 19:45

Синтаксис ...rs\GSG\Downloads\0.4.2.0-x64\scripts\Temperature.lua:155: bad argument #1 to 'RemoveTimer' (number expected, got userdata)

Автор: Alexey 8.10.2012, 21:01

Причина в птоке 0.4.2.0, обнови её или вернись на более раннюю.

Автор: Sergey613 8.10.2012, 23:00

Цитата(Alexey @ 8.10.2012, 22:01) *
Причина в птоке 0.4.2.0, обнови её или вернись на более раннюю.
Про обнови не понял. Это последняя версия. Или я не прав?
http://mydc.ru/r/?http://www.ptokax.org/downloads.html

Автор: Alexey 8.10.2012, 23:19

Кроме "стабильных" версий, существуют ещё и тестовые бета-версии. Например http://mydc.ru/topic19.html?view=findpost&p=44032

Автор: Sergey613 9.10.2012, 20:51

Цитата(Alexey @ 9.10.2012, 0:19) *
Кроме "стабильных" версий, существуют ещё и тестовые бета-версии. Например http://mydc.ru/topic19.html?view=findpost&p=44032

Вот обновился до: 0.4.2.0b401-Lua5.2.1
Результат:
Синтаксис error loading module 'pxluasocket' from file 'C:\0.4.2.0b401-Lua5.2.1\libs\pxluasocket.dll':
%1 не является приложением Win32.

Автор: Артём 22.1.2013, 15:36

Temperature.lua:171: attempt to index a nil value

Код
sTime = msg:match("forecast__time forecast__time_%S+\" datetime=\"(.-)</time>"):match(">(.-)$")

что же здесь не так?

Автор: Setuper 22.1.2013, 17:19

метод

Код
msg:match("forecast__time forecast__time_%S+\" datetime=\"(.-)</time>")
вернул nil (то есть не нашел того, что ожидалось), поэтому на вызове следующего метода валится

Автор: Ksan 16.6.2013, 15:43

UPD-6:
- добавил возможность выбрать любой город/посёлок мира (но оставил возможность просмотра жёстко привязанных к меню городов)...для этого пришлось писать отдельный скрипт (он здесь не представлен) для выборки из сайта погоды и сборки в таблицу списков всех городов со странами и областями.
- в архиве есть папка с обязательными файлами (таблицы городов и цифровых кодов городов (последнее - для архивных температур))

Дата заливки последней версии: 2013-06-16 16:35 (мск.)

Автор: KCAHDEP 16.6.2013, 21:48

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

Автор: Ksan 16.6.2013, 21:53

KCAHDEP, поподробней, плиз!
И приведите строку, на которую указывает ошибка..

UPD: Так, я понял и воспроизвёл ошибку.. Сейчас буду думать, в чём дело..

Автор: KCAHDEP 16.6.2013, 21:59

Цитата(Ksan @ 16.6.2013, 22:53) *
KCAHDEP, поподробней, плиз!
И приведите строку, на которую указывает ошибка..


if tCityCodes[sity:lower2()] then

Автор: Ksan 16.6.2013, 22:16

KCAHDEP, нужно строку 196 (по скрипту на форуме)

Код
bArchive, sErr = GetData(sHubCity)
написать так
Код
bArchive, sErr = GetData(sHubCity, sChatCity)

Естественно, выше в настройках должна присутствовать строка
Код
local sChatCity = "Каменск-Шахтинский"

Не пойму, из каких соображений пропустил раньше, и почему у меня Томск работал в таком виде. big_smile.gif

PS: Исправил скрипт, перезалил в первом сообщении.
Дата перезаливки последней версии: 2013-06-16 23:30 (мск.)

Автор: KCAHDEP 17.6.2013, 6:39

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

Автор: KCAHDEP 22.8.2013, 17:11

Работал-работал и... поломался
22.08.2013 18:05:12 - /var/ptokax/scripts/Current_Weather_All_Cities.lua:175: attempt to concatenate global 'sRegion1' (a nil value)

Код
"\t\t\tСолнце: \t\t"..(sSun or "[Ошибка. Нет данных]").."\n"

Автор: rival 20.9.2013, 10:48

Температура: +24°
Погодные явления: "полупрозрачная облачность"
Давление: 740 мм рт.ст
Влажность: 56%
Ветер: 8 Рј/СЃ ЮЗ
Солнце: РІРѕСЃС…РѕРґ: 07:57, заход: 20:14

В этот же день (из архивов):
Max.: +25.2° (1960Рі.)
Min: +3.6° (1977Рі.)

ой,это другая версия уже..

Автор: Assket 18.10.2013, 16:43

Чкет у меня на 0.5.0.0 не пашет

в чате кажет !curtemp1 Okha Оха
в логах Синтаксис C:\PtokaX\scripts\Current_Weather_All_Cities.lua:174: attempt to concatenate global 'sRegion1' (a nil value)

где что и как не понятно, подскажите что не правильно делаю.

Автор: Ksan 1.11.2013, 18:05

Скрипт с изменениями выложен в сообщении #1.
UPD-7:
- пришлось перелопатить скрипт из-за изменений на странице погоды, в том числе и кодировки символов.
- теперь для городов США уверенно отсутствуют архивные температуры. На сайте архивных данных сильно изменили представление страницы именно для США, для них необходимо отдельно парсить страницы и вытаскивать архив. Начал было делать эту работу, почти добил, потом подумал - а нафиг это надо кому, зачем эта лишняя работа, и забил. А так уже давно мог бы выложить исправленный скрипт, но так получилось, сорри.. плюс лень одолела в последнее время (но это скорее минус).

Дата заливки последней версии: 2013-11-01 19:00 (мск.)

Автор: Marc 25.4.2014, 23:47

Со вчерашнего дня стал скрипт выдавать такую ошибку:
[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] Скрипт запущен.

До вчерашнего дня работал без проблем он. Подскажите, что надо поправить?

Автор: Ksan 26.4.2014, 1:14

Marc,
Есть такая проблема. Похоже, на сайте снова изменили структуру страниц, и теперь не парсится нужный текст и получается такая ошибка.
Надо снова переписать код парсинга. Сделаю...наверно. Но не сейчас. Точнее, не сразу..попозже.
Недосуг просто пока.

Автор: Ksan 20.6.2014, 19:15

Наконец-то, дошли руки переделать и привести скрипт в рабочее состояние..Прошу прощения, что заставил так долго ждать, ну так получилось!

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

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

Дата заливки текущей версии: 2014-06-20 20:10 (мск.)

Автор: Ksan 22.6.2014, 17:02

UPD-10:

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

Ещё исправил небольшую ошибку.
Скрипт перезалит в первом сообщении.
Жду комментов.

Дата заливки текущей версии: 2014-06-22 17:50 (мск.)

Автор: Marc 23.6.2014, 22:30

Ksan!
Спасибо за работу!
Поставил и попробовал: смотрю, что теперь нет кодов городов, но он их видит всё равно!
Удачно получилось с прогнозом погоды: показывает погоду "Ночью" и "Утром" (это я сейчас тестил)
По запросу погоду в разных городах выдает всё отлично! Вывод погоды в чат также работает по таймеру на отлично!!

Автор: Ksan 26.6.2014, 2:42

UPD-11:
- добавил возможность менять через меню частоту вывода текущей погоды в чат (не открывая скрипт и не перезапуская его), особенно будет удобно для тех, у кого хаб стоит далеко от своего компа.
При необходимости отмены вывода погоды в чат достаточно ввести одну цифру 0 (ноль) в данном меню вместо периода времени. Для включения нужно просто просто написать период в минутах, не равный 0 (нулю).
Файл перезалит.

Дата заливки последней версии: 2014-06-26 03:40 (мск.)

Автор: Ksan 11.11.2014, 23:29

UPD-12:
- сегодня вдруг скрипт стал выдавать результат с лишним словом из исходника (/span) при годе минимальной температуры архивных данных (не знаю, почему, до этого было без таких ляпов), не стал копать глубоко, просто добавил в одну строку исправляющий код. Архив перезалил (изменение только в самом скрипте).

Дата заливки последней версии: 2014-11-11 23:22 (мск.)

Автор: Nikolaevich 14.11.2014, 10:18

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>

просьба помочь в исправлении ошибки


Автор: Артём 14.11.2014, 15:09

Nikolaevich, значит не всё, библиотеки не поставил, поставь и будет работать.

Автор: Nikolaevich 15.11.2014, 0:48

Цитата(Артём @ 14.11.2014, 17:09) *
Nikolaevich, значит не всё, библиотеки не поставил, поставь и будет работать.

да там то и нужна то всего одна библиотека если все делать по инструкции. она лежит в папке libs но скрипт ее не видит поэтому и вылетает ошибка

Автор: Ksan 29.11.2014, 1:48

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)
То есть, не было "защиты от дурака". Скрипт исправил и архив перезалил. Изменение только в самом скрипте.

Дата заливки последней версии: 2014-11-29 01:45 (мск.)

Автор: Marc 13.12.2014, 23:23

Конечно не знаю, но вот у меня уже дня три данный скрипт не работает, хотя до этого, с изменениями тут выложенными, работал исправно!
Перестал выводить погоду в чат хаба и по запросу в личку с данной ошибкой: ...\scripts\Current_Weather_All_Cities.lua:275: attempt to index a nil value
Попробовал сам подправить, но безуспешно.
Просьба или подправить или подсказать, что поправить, так как скрипт очень хороший!
Скрипт запускается без ошибок, ошибка появляется по срабатыванию таймера и по запросу погоды.

Автор: Ksan 14.12.2014, 4:23

Marc,
Сайт поменял префикс с "http://" на "https://", и просто так исходник страницы не скачать...тут надо новую библиотеку применять (SSL). Подробных рекомендаций я не могу дать, но как отправную точку могу посоветовать http://mydc.ru/topic3401.html. Судя по тексту автора темы, с виндовой Птокой особой проблемы не должно быть (хотя могу ошибаться насчёт 64-бит), но вот с линуксовой версией у меня с лёту не прокатило...Как установить библиотеку под Дебиан/Убунту - для этого есть команда в комменте #2. У меня поставилась (вроде), но скрипт всё равно выдаёт ошибку, версия библиотеки, возможно, не нравится.. У меня стоит Птока мод 6 от Alex82.
Короче, возникающие вопросы нужно там задавать. Потом, если прокатит, расскажете тут, что и как вы сделали. big_smile.gif Поделитесь опытом! А то мне сейчас чуток нет возможности плотно заняться этим.

Автор: Marc 14.12.2014, 5:49

Ksan!
Расскажу о своих действиях:
-видел, что поменялась страница на "https://" Всвязи с этим, по некоторой подсказке из другого скрипта Артёма (TempUserList2.lua) пытался внести изменения в этот твой скрипт с изменением кода:

Код
function OnStartup()
        https = require("ssl.https")

-библиотека для работы с "ssl.https" установлена
-запуск скрипта идёт без ошибки, как на х32 так и на х64 Win 7
-но, при срабатывании таймера или при попытке вывести погоду в лс идёт такое следующее сообщение: "Произошла ошибка при обновлении информации о погоде. Причина: wrong version number"

Это я описал свои действия, которые предпринимал при попытке поправить изменение страницы на "https://"
Может поможет при анализе...
Других ошибок не наблюдалось. Проверял на PtokaX 0.4.1.2

Автор: Ksan 14.12.2014, 7:36

Marc,

Цитата
Причина: wrong version number
Это мне Артём уже показывал. Откуда идёт, не знаю, но это не от скрипта, текст ошибки писан либо на сайте, либо в библиотеке.
У вас винда, и у вас хотя бы до этого места доходит.. big_smile.gif В отличие от моей убунто-минтовой Птоки..

Автор: alex82 14.12.2014, 9:00

У меня скрипт завелся после десятиминутного колдовства. 71 строка:

Код
    http = require("ssl.https")

270 строка:
Код
    local msg,err = http.request("https://pogoda.mail.ru/prognoz/"..index.."/")


Вывод: при решении подобного рода проблем нужно ВНИМАТЕЛЬНО смотреть на то, что находится в адресной строке Вашего браузера, который, в отличие от отлаживаемого скрипта, смог нормально загрузить страницу. Говновебмастеры очень любят переименовывать страницы, и делать редиректы на них со старых адресов. Браузеры молча переходят по новым адресам, вставляя их в адресную строку, а библиотека сокетов так делать, увы, не умеет.

Автор: Ksan 14.12.2014, 13:12

alex82,

Цитата
У меня скрипт завелся после десятиминутного колдовства.

Но у тебя же Винда, или я ошибаюсь?
Хотя у некоторых и на винде не катит, судя по комментам..
Надо завтра мне тоже на винде проверить у себя. С линуховой версией скрипта (точнее, библиотеки) пока не справился.

Автор: Marc 14.12.2014, 14:23

alex82!
На Win 7, при редактировании строки 270 скрипта, корректировке 71 строки, стало вновь всё работать как и раньше (в чат выводится погода, по запросу тоже)!
Спасибо за колдовство!)

Автор: Артём 14.12.2014, 14:46

Цитата(alex82 @ 14.12.2014, 9:00) *
У меня скрипт завелся после десятиминутного колдовства. 71 строка:
Код
    http = require("ssl.https")

270 строка:
Код
    local msg,err = http.request("https://pogoda.mail.ru/prognoz/"..index.."/")


Спасибо, это помогло, нормально выдаёт теперь погоду.

Автор: Ksan 5.1.2015, 2:47

Обобщая последние поправки (из-за перехода сайта погоды на безопасный режим), закинул в первое сообщение исправленный скрипт.
Исправления такие:
1. Необходимо установить библиотеку SSL. Как - читайте в теме http://mydc.ru/topic3401.html
Для линукса (дебиан/убунту/Минт) - команда установки этой библиотеки

Цитата
sudo apt-get install liblua5.1-sec1

2. В функции function OnStartup() строку
Код
http = require("socket.http")
заменил (первоначальную строку можно просто закомментировать или удалить) этой строкой
Код
http = require("ssl.https")
И также заменил 270-ю строку (номер может быть у вас иным)
Код
local msg,err = http.request("http://pogoda.mail.ru/prognoz/"..index)
на строку
Код
local msg,err = http.request("https://pogoda.mail.ru/prognoz/"..index.."/")

Скрипт заработал благодаря ценным советам от Alex82, так что ему большое спасибо! big_smile.gif
А то я уже чуть было не взялся писать другой скрипт погоды..

Автор: Sinsei 7.6.2015, 6:55

При запросе погоды через меню городов выдает ошибку.

Код
\scripts\Current_Weather_All_Cities.lua:86: attempt to concatenate global 'sCmdTemp2' (a nil value)

Автор: Ksan 7.6.2015, 7:14

Sinsei, вы когда научитесь правильно презентовать проблему?
1. Как минимум нужно показывать, к какой строке относится представленная ошибка, то есть, как выглядит строка 86! (Хотя тут я понимаю, к какой строке относится, тем не менее, это не всегда очевидно)
2. Что меняли сами в коде скрипта - что-нибудь добавляли, изменяли, удаляли из исходного скрипта..
3. Подсказка - если ошибка скрипта указывает вам, что 'sCmdTemp2' (a nil value), то есть, переменная оказалась не определена, просто проверьте по скрипту, встречается ли переменная sCmdTemp2 до строки с ошибкой, и имеет ли не пустое строчное значение, если встречается..

Короче, сравните свой вариант скрипта с исходным (с форума) вариантом. И изучите изменения и потери, найдите, куда делась строка с изначальным определением переменной sCmdTemp2. Восстановите её и будет вам погода. Если ещё что-то не испортили..

Автор: AndreiDC 10.11.2015, 13:09

Приветствую Ksan! до недавнего времени скрипт прекрасно работал, теперь пишет Current_Weather_All_Cities.lua:416: attempt to concatenate global 'sTempNow' (a nil value). Прошу помочь.
В скрипте ничего не менял.

Автор: Ksan 10.11.2015, 23:43

Привет!
AndreiDC, вы хоть показывайте, как выглядит эта строка! Привыкайте при сообщениях об ошибках сразу показывать строку с той ошибкой.
В загруженной на форум скрипте в строке 416 нет такого слова - sTempNow, но зато есть в следующей, 417-й строке.
Это означает, что вы, как минимум, одну строку добавили!

Промежуточный ответ
Со своей стороны, согласен, есть одна проблемка, связанная с получением температуры воды. Выдаёт вместе неё кусок кода (что означает, на сайте погоды что-то изменили)..
Тем не менее, скрипт не выдаёт ошибку, которую вы тут показали, и работает в штатном режиме (кроме указанного мной артефакта вместо температуры воды) и выдаёт текущую погоду..

Над исправлением выдачи температуры воды работаю.
А вы, со своей стороны, выдайте сюда строку с ошибкой и ещё - при каких запросах ошибку показывает (на каких городах, странах, приморские ли эти города или без моря, или ошибка при любом запросе)..

UPD-15:
- пришлось изменить чуток код, ибо на сайте погоды внесли небольшие изменения в исходники страницы (добавили "+" к положительной температуре, в другом месте тоже изменили кусок и из-за этого температура воды не получалась, и была давненько появившаяся проблемка - перестало выдавать архивные температуры (для России), и тоже исправил). И да, заменил один из доп. файлов в папке, так что рекомендую у себя его заменить на мой - называется "citylist_Other.tbl")
Скрипт перезалит, ссылка в первом комменте.

Дата заливки последней версии: 2015-11-10 23:40 (мск.)

Автор: Nikolaevich 20.5.2016, 23:42

Ну вот разобрался и с этим скриптом БОЛЬШОЕ СПАСИБО автору за его работу. Все причины были в самой библиотеке, которая не подходила, а с новой библиотекой заработал сразу и никаких ошибок.

 

Автор: Ksan 21.5.2016, 1:11

Nikolaevich, посмотрел я на вашу картинку и обратил внимание на "Полярный день" для Нью-Йорка. big_smile.gif
И сделал выводы.. Результат ниже.
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

Дата заливки последней версии: 2016-05-21 01:07 (мск.)

Автор: Ksan 30.4.2020, 14:35

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

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

Автор: Ksan 21.12.2021, 9:09

Из исходного сайта исчез показ архивных температур, так что скрипт этот момент теперь не показывает.. С лёту не нашёл новый источник для добычи архивных данных.. Может, кто подскажет?