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

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

MyDC.ru _ Скрипты с MySQL [PtokaX] _ WeatherInfoMySQL

Автор: Wariner 24.5.2009, 20:48

Название скрипта: WeatherInfoMySQL
Версия скрипта: 1.0 RC1
Версия API: API2
Автор: Wariner
Примечание: Скрипт основывается на скрипте Weather Info Script автора D-Light(перевод под API 2: Fodin)
Возможности:
v 1.0 RC1
- Хранит коды всех городов в БД
- Выводит погоду по названию города введённого из меню
- При запросе погоды записывает её в БД и хранит до времени обновления

Для начала работы со скриптом надо загнать бэкап БД с кодами городов из файла weather_CodeCity.xml, а так же установить библиотеку сокетов http://mydc.ru/ipb.html?act=attach&type=post&id=74

PS: скрипт особо не тестировал! Пробуйте пишите. + показалось что с такой базой начало что то подтормаживать

 weather_CodeCity.rar ( 296.35 килобайт ) : 380
 WeatherInfoMySQL.lua ( 7.08 килобайт ) : 299
 

Автор: Otshelnik-Fm 24.5.2009, 21:19

.xml файл как загнать в бд при помощи mysql administrator?

Автор: mariner 24.5.2009, 23:03

Код
24.05.2009 22:24:40 - /etc/ptokax/scripts/meteo.lua:65: bad argument #2 to 'format' (string expected, got nil)

Это, оно ошу пропускает. Надо поправить. Чтоб писало, что нет такого города, если опечатка.
Потом - меню стоит вывести тоже в начало, чтоб погоду мона было для города названичть.
ну и ктоме того - оно как то не очень показывает :(


Очень проши сохранить базу с кодами в виде sql! А то ваще, капец. phpMyAdmin тока его и импортирует :(

 weather_CodeCity.rar ( 41.8 килобайт ) : 82


вот! Перегнал из xml в csv! Теперь это можно экспортировать в таблицу через phpMyAdmin.

Автор: Wariner 24.5.2009, 23:17

перезалил базу в первом посту(просто не догадался сразу в архив запхать а так форум не загружал)
меняем 65 строку на

Код
local sEr = ("%s %s"):format(sCmd, sCityName)

а эту надпись
Код
Core.SendToUser(tUser,("<%s> Произошла ошибка в тексте запроса! Команда не будет выполнена! Сообщите администратору!"):format(sBot))

такого города нет в базе!

насчёт меню имеется ввиду для одного города или нескольких выбранных?

PS: я предупреждаю ещё раз скрипт очень сырой!!!

Автор: Setuper 24.5.2009, 23:50

Смысла в коде мало:

Код
local sEr = ("%s %s"):format(sCmd, sCityName)

Сейчас объясню почему. Метод format используется для того, чтобы избежать выделения памяти под лишний мусор, в остальных случаях выстрее будет работать оператор конкатенации. В данном случае лучше использовать оператор, так как под переменные sCmd и sCityName память уже выделена, в дополнении к этому память выделится под строку "%s %s", однако если написать так:
Код
sCmd.." "..sCityName
то в этом случае под переменные sCmd и sCityName память также уже выделилась, и выделится ещё под строку " ".

Поэтому, в данном случае, разницы в выделении памяти нет, однако операторы всегда выполняются быстрее, чем вызовы функции. Поэтому в данном случае лучше использовать конкатенацию.


Приведу пример, в котором наоборот надо использовать метод.
Код
("<%s> %s"):format(sNick, sMsg)
Тут опять же память выделена под переменные sNick и sMsg, в довесок выделится под строку "<%s> %s". Если же в данном случае записать через конкатенацию, то получим:
Код
"<"..sNick.."> "..sMsg
Память выделена под переменные sNick и sMsg, но кроме этого память выделится под 2 строки: "<" и "> ". Поэтому тут предпочтительнее использовать метод.


Надеюсь понятно изложил?

Автор: mariner 27.5.2009, 22:03

В общем детектирую проблему - после некоторого времени работы скрипт пишет, что в базе нет таких городов. Перезапускаешь - все норм. Чудно как то.... Может коннект к базе теряется?

Автор: Wariner 27.5.2009, 22:23

да я замечаю некую странность, например если сделать два запроса большого количества инфы в короткое время скрипты выдают ошибки! Я не знаю почему так((( Ваши мнения?

Автор: Setuper 27.5.2009, 22:34

Нужно смотреть что за ошибки

Автор: Wariner 27.5.2009, 22:36

нет ошибок просто проскакивает команда в чат а данные не выводятся! Т.е проблема в этом месте

Код
            local cur = con:execute(("SELECT * FROM `%sWeatherCity` WHERE `id_City` = (SELECT `id` FROM `%sCodeCity` WHERE `CityName` = '%s')"):dbformat(sPrefixTable,sPrefixTable,sCityName))

порой просто запрос не проходит(может конечно я не правильно выражаюсь)
пришлось ввести после этого такую конструкцию
Код
            if not cur then
                local sEr = ("%s %s"):format(sCmd, sCityName)
                con:execute(("INSERT INTO `%sErrors` (`Datetime`, `Error`) VALUES ('%s','%s')"):dbformat(sPrefixTable, os.date("%Y-%m-%d %H:%M:%S"), sEr))
                Core.SendToUser(tUser,("<%s> Произошла ошибка в тексте запроса! Команда не будет выполнена! Сообщите администратору!"):format(sBot))
                return true
            end

думал может в запрос подставляется что то противопоказанное, но нет, всё впорядке. Может какой нибудь таймаут нужен?

Автор: Setuper 27.5.2009, 22:42

Она не может просто проскакивать, ведь в скрипте прописаны инструкции, которым должна удовлетворять команда. Если она проскакивает, то это означает, что либо в скрипте ошибка, либо скрипт отключен. Возможен второй вариант. Скрипт не успел обработать первый запрос, а ему уже поступил второй, второй запрос начинает выполняться параллельно первому...

Автор: Wariner 27.5.2009, 22:54

а два одновременно он выполнить не может? и если не может как это ограничить?

Автор: Setuper 27.5.2009, 23:34

По идее должен

Автор: Wariner 28.5.2009, 6:15

странно блин(((((((((((((((((

Автор: Al-j® 8.7.2009, 20:12

Это мне одному так сильно повезло или есть ещё кто-то, у кого в файле weather_CodeCity какие-то логи, причем мой блокнот не распознаёт кодировку русского языка

Зато чётко видны время, IP и ники

Цитата
(1,'2009-04-25','21:02:47','-=Wariner=-','127.0.0.1','1'),
(2,'2009-04-25','21:02:48','-=Wariner=-','127.0.0.1','2'),
(3,'2009-04-25','21:02:49','-=Wariner=-','127.0.0.1','3'),
(4,'2009-04-25','21:04:33','-=Wariner=-','127.0.0.1','3'),
(5,'2009-04-25','21:04:33','-=Wariner=-','127.0.0.1','4'),
(6,'2009-04-25','21:04:34','-=Wariner=-','127.0.0.1','5'),
(7,'2009-04-26','21:04:34','-=Wariner=-','127.0.0.1','6'),
(8,'2009-04-26','21:04:34','-=Wariner=-','127.0.0.1',''),
(9,'2009-04-26','20:03:07','-=Wariner=-','127.0.0.1','^_^'),
(10,'2009-04-26','20:03:11','-=Wariner=-','127.0.0.1','>_<'),
(11,'2009-04-26','20:03:16','-=Wariner=-','127.0.0.1',':пацталом:'),
(12,'2009-04-26','20:04:22','-=Wariner=-','127.0.0.1','Молодцы мужики качественный хаб!!! (для админов):орден:'),
(13,'2009-04-28','20:55:48','-=Wariner=-','127.0.0.1','!me ssssssssssssssssssssss'),
(14,'2009-04-28','20:57:43','-=Wariner=-','127.0.0.1','[!+]me'),
(15,'2009-04-28','21:01:24','-=Wariner=-','127.0.0.1','ghbdtn'),
(16,'2009-04-28','21:01:36','-=Wariner=-','127.0.0.1','!me sssssssssssssssss'),
(17,'2009-05-04','21:09:31','-=Wariner=-','10.2.100.240','1'),
(18,'2009-05-04','21:09:32','-=Wariner=-','10.2.100.240','2'),
(19,'2009-05-04','21:09:32','-=Wariner=-','10.2.100.240','3'),
(20,'2009-05-04','21:09:54','[Slutkey]','10.3.20.202','Р˜Р»СЊСЏ РґР° ты гений'),
(21,'2009-05-04','21:10:01','[Slutkey]','10.3.20.202','ты цифры знаешь'),
(22,'2009-05-04','21:10:03','[Slutkey]','10.3.20.202','))))))))))'),
(23,'2009-05-04','21:10:21','[Slutkey]','10.3.20.202','а мы только буквами в чате да буквами'),
(24,'2009-05-04','21:10:26','-=Wariner=-','10.2.100.240','лог проверял'),
(25,'2009-05-04','21:21:10','BIMMERв„ў','10.8.2.244','=)'),
(26,'2009-05-04','21:21:14','BIMMER™','10.8.2.244','привет всем'),
(27,'2009-05-04','21:21:58','[glu]XuTRbIu^','10.4.178.254','BIMMERв„ў: Р·РґРѕСЂРѕРІР°'),
(28,'2009-05-04','21:22:03','BIMMERв„ў','10.8.2.244','3'),
(29,'2009-05-04','21:22:04','BIMMERв„ў','10.8.2.244','2'),
(30,'2009-05-04','21:22:04','BIMMERв„ў','10.8.2.244','1'),
(31,'2009-05-04','21:47:40','[SoV]=RoD(1)K=','10.2.34.216','Люди,кто курсовые делает??'),
(32,'2009-05-04','21:47:44','[SoV]=RoD(1)K=','10.2.34.216','в лс плиз'),
(33,'2009-05-04','21:52:36','Dj.Mania','10.3.5.18','народ . есть у кого нить новый комфорт..???'),


[22:58] Синтаксис E:\Рабочий стол\0.4.1.1\scripts\WeatherInfoMySQL.lua:33: module 'luasql.mysql' not found:
no field package.preload['luasql.mysql']
no file 'E:\Рабочий стол\0.4.1.1\luasql\mysql.lua'
no file 'E:\Рабочий стол\0.4.1.1\libs\luasql\mysql.lua'
no file 'E:\Рабочий стол\0.4.1.1\scripts\libs\luasql\mysql.lua'
no file 'E:\Рабочий стол\0.4.1.1\luasql\mysql.dll'
no file 'E:\Рабочий стол\0.4.1.1\libs\luasql\mysql.dll'
no file 'E:\Рабочий стол\0.4.1.1\scripts\libs\luasql\mysql.dll'
no file 'E:\Рабочий стол\0.4.1.1\luasql.dll'
no file 'E:\Рабочий стол\0.4.1.1\libs\luasql.dll'
no file 'E:\Рабочий стол\0.4.1.1\scripts\libs\luasql.dll'
=============
Единственное что я понял из этого, что нет dll beat_brick.gif

Да и ещё
У гисметео сменились коды городов, может и не все, но код Екатеринбурга теперь не 28440 а 4517
Простите, что только информирую, но на активное участие нет времени :(

Автор: fixx 8.7.2009, 20:21

По поводу логов ничего не могу сказать, а по поводу ошибки вот:
http://mydc.ru/topic1851.html

Автор: Al-j® 9.7.2009, 9:37

Цитата(fixx @ 8.7.2009, 23:21) *
По поводу логов ничего не могу сказать, а по поводу ошибки вот:
http://mydc.ru/topic1851.html


у меня установлены библиотеки

Автор: Wariner 9.7.2009, 9:42

Цитата(Al-j® @ 8.7.2009, 21:12) *
[22:58] Синтаксис E:\Рабочий стол\0.4.1.1\scripts\WeatherInfoMySQL.lua:33: module 'luasql.mysql' not found:
no field package.preload['luasql.mysql']
no file 'E:\Рабочий стол\0.4.1.1\luasql\mysql.lua'
no file 'E:\Рабочий стол\0.4.1.1\libs\luasql\mysql.lua'
no file 'E:\Рабочий стол\0.4.1.1\scripts\libs\luasql\mysql.lua'
no file 'E:\Рабочий стол\0.4.1.1\luasql\mysql.dll'
no file 'E:\Рабочий стол\0.4.1.1\libs\luasql\mysql.dll'
no file 'E:\Рабочий стол\0.4.1.1\scripts\libs\luasql\mysql.dll'
no file 'E:\Рабочий стол\0.4.1.1\luasql.dll'
no file 'E:\Рабочий стол\0.4.1.1\libs\luasql.dll'
no file 'E:\Рабочий стол\0.4.1.1\scripts\libs\luasql.dll'

судя по этим ошибкам нет! или у тебя нет файла mysql.lua

Автор: Setuper 9.7.2009, 12:03

Какой mysql.lua?

По этим ошибкам могу на 200% сказать, что у не установлены либы!

Цитата
no file 'E:\Рабочий стол\0.4.1.1\libs\luasql\mysql.dll'
no file 'E:\Рабочий стол\0.4.1.1\libs\luasql.dll'


То, что они установлены можешь говорить сколько угодно, а ошибки показывают, что ptokax не может их обнаружить по указанным путям!

Автор: mariner 9.7.2009, 13:51

Цитата(Setuper @ 9.7.2009, 13:03) *
Какой mysql.lua?


Я догадываюсь, что т.к. это порт ил линукса, то оно ищет mysql.lua (это файл вот такого содержания, пример от luamd5)
Код
----------------------------------------------------------------------------
-- $Id: md5.lua,v 1.4 2006/08/21 19:24:21 carregal Exp $
----------------------------------------------------------------------------

local core = require"md5.core"
local string = require"string"

module ("md5")

----------------------------------------------------------------------------
-- @param k String with original message.
-- @return String with the md5 hash value converted to hexadecimal digits

function sumhexa (k)
  k = core.sum(k)
  return (string.gsub(k, ".", function (c)
           return string.format("%02x", string.byte(c))
         end))
end


Кроме того, в таких файлах попадаются указания на то, где лежит необхидимая библиотека big_smile.gif

Автор: Setuper 9.7.2009, 16:12

При чём тут линукс?
По ошибкам можно понять, что скрипт ищет dll либы, в линуксе он бы искал сошки.

никакого файла mysql.lua нету, не было и не будет! Не сбивай с толку людей.

Нужно правильно положить нужные либы в нужные папки.

Автор: mariner 9.7.2009, 18:38

Цитата(Setuper @ 9.7.2009, 17:12) *
При чём тут линукс?
По ошибкам можно понять, что скрипт ищет dll либы, в линуксе он бы искал сошки.

никакого файла mysql.lua нету, не было и не будет! Не сбивай с толку людей.

Нужно правильно положить нужные либы в нужные папки.


тут я не согласен, но этот спор не для этой ветки

Автор: Al-j® 9.7.2009, 22:22

Цитата(Setuper @ 9.7.2009, 19:12) *
При чём тут линукс?
По ошибкам можно понять, что скрипт ищет dll либы, в линуксе он бы искал сошки.

никакого файла mysql.lua нету, не было и не будет! Не сбивай с толку людей.

Нужно правильно положить нужные либы в нужные папки.


С этого места поподробней, пожалуйста)

Автор: SABB 25.8.2009, 19:42

А у меня тупо ничего не происходит. Нажимаешь - погода - выпрыгивает окно для введения города, вводишь город, нажимаешь ОК и фсё!!! - тишина.
Вроде все правильно сделал, создал базу, загнал в нее бэкап из файла weather_CodeCity. в скрипте прописал логин и пароль базы
Библиотеки все стоят, скрипт включается, без каких либо ошибок.
Посоветуйте, мож чо ни то сделал?
плиииз...

Автор: Wariner 25.8.2009, 19:48

ошибок нет?

Автор: SABB 25.8.2009, 19:54

Цитата(Wariner @ 26.8.2009, 0:48) *
ошибок нет?

Нет ошибок никаких не выдает.
Не при включении, не после запроса погоды. тупо тишина.

Автор: SABB 28.8.2009, 19:17

<Погода> Произошла ошибка в тексте запроса! Команда не будет выполнена! Сообщите администратору!
хоть ты тресни <<

Автор: mariner 29.8.2009, 21:03

а будет обновление базы погоды? а то ведь коды сменились

Автор: Wariner 29.8.2009, 21:47

я не обижусь если кто то сделает базу))))))
помнится я писал скрипт для перегона из текстового файла в БД но я его потерял уже))))

Автор: (Andrew) 6.10.2009, 23:24

Куда надо именно коды вставлять я не понял?Объясни пороще

Автор: Wariner 7.10.2009, 8:12

надо создать БД для скрипт(название должно совпадать с настройками в скрипте) после чего загнать коды городов в эту БД

Автор: (Andrew) 11.10.2009, 1:27

Цитата(Wariner @ 7.10.2009, 5:12) *
надо создать БД для скрипт(название должно совпадать с настройками в скрипте) после чего загнать коды городов в эту БД


А что такое БД и как создать?

Во че пишет:
no file 'C:\Documents and Settings\Андрей\Рабочий стол\Мой хаб\luasql\mysql.lua'
no file 'C:\Documents and Settings\Андрей\Рабочий стол\Мой хаб\libs\luasql\mysql.lua'
no file 'C:\Documents and Settings\Андрей\Рабочий стол\Мой хаб\scripts\libs\luasql\mysql.lua'
no file 'C:\Documents and Settings\Андрей\Рабочий стол\Мой хаб\luasql\mysql.dll'
no file 'C:\Documents and Settings\Андрей\Рабочий стол\Мой хаб\libs\luasql\mysql.dll'
no file 'C:\Documents and Settings\Андрей\Рабочий стол\Мой хаб\scripts\libs\luasql\mysql.dll'
no file 'C:\Documents and Settings\Андрей\Рабочий стол\Мой хаб\luasql.dll'
no file 'C:\Documents and Settings\Андрей\Рабочий стол\Мой хаб\libs\luasql.dll'
no file 'C:\Documents and Settings\Андрей\Рабочий стол\Мой хаб\scripts\libs\luasql.dll'

Автор: mariner 11.10.2009, 2:31

В шапке раздела есть подробные объяснения!

Автор: KCAHDEP 15.10.2012, 3:54

Цитата(Wariner @ 29.8.2009, 22:47) *
я не обижусь если кто то сделает базу))))))
помнится я писал скрипт для перегона из текстового файла в БД но я его потерял уже))))


Никто не сделал новую базу с кодами? ))