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

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

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

Автор: Wariner 13.4.2009, 19:47

Название скрипта: TopSeachMySQL
Версия скрипта: 1.0 RC1
Версия API: API2
Автор: Wariner
Особенности: работа с MySQL
Описание скрипта:
- Оснавная возможность - ведёт топ поисков на хабе
- Вывод общего топа целиком или по категориям
- Вывод топов за сегодня месяц и год целиком или по категориям
- Для работы требуется http://mydc.ru/ipb.html?act=attach&type=post&id=1785( http://mydc.ru/topic1508s0.html?start=0 ) и соответственно MySQL сервер

v 1.0 RC2
- Добавлен лог ошибок
- В базу заносятся только поиски определённой длинны (в соответствии с настройками хаба)
- Поправлена пара ошибок

PS: тестим, отписываем комментарии и пожелания))))
PPS: БД надо создавать вручную! Таблицы создадутся сами!

 TopSeachMySQL.lua ( 17.62 килобайт ) : 210
 

Автор: Setuper 13.4.2009, 20:16

хм... а что так много одинаковых таблиц? Зачем?

Автор: Wariner 13.4.2009, 20:22

в данном случае таблицы используются вместо условий.

по работе с MySQL есть замечания(оптимизация)?

Автор: Setuper 13.4.2009, 20:41

Надо было не дробить, а просто завести ещё один атрибут и вставлять в таблицу с условием WHERE в этом атрибуте

Иначи создаётся и заполняется лишняя таблица

Автор: Wariner 13.4.2009, 20:50

не понял о чём речь. можно поподробнее?

upd: понял. просто не про те таблицы подумал. попробую исправить.

Автор: BeN 14.4.2009, 17:59

Хм.. интересно)

Автор: Wariner 14.4.2009, 19:09

комментарий Ильи учтён, стало компактнее и удобнее! тестим)))

Автор: Setuper 14.4.2009, 19:14

Ну вот, совсем другое дело. Азы mysql программирования освоены.
Теперь бы тебе ещё освоить структурированное программирование (классы) big_smile.gif тогда твоим скриптам цены бы не было big_smile.gif

Автор: Wariner 14.4.2009, 19:22

буду стараться))))

Автор: OtshelnikFm 14.4.2009, 21:25

Ай да Wariner, ну и молодец! Спасибо тебе. Запустил скрипт - создал базу mysql, прописал ее в скрипте, пользователя, пароль - и всё заработало!

Цитата
[21:50:08] <SeachBot> Общиий топ поиска на хабе:

========================================
Текст Кол.
========================================
окна 1
шпаргалка 1
бумер 1
гр бумер 1
воздушная скорость avi lbgh2sn4zrracnz6dqeukazn224azbmtjmaryky 1
david vendetta 1
воздушная скорость avi 1
========================================

5 минут - полёт нормальный!Памяти кушает 140 килобайт.

Цитата
[22:17] Синтаксис ... Интернет\PtokaX 0.4.1.1\scripts\TopSeachMySQL.lua:144: bad argument #3 to 'format' (string expected, got nil)


Код
con:execute(("INSERT INTO `SeachDate` (`id_Seach`, `date_Seach`, `category`) VALUES ((SELECT `id` FROM `TopSeach` WHERE Seach = '%s'),'%s','%s')"):format(sSeach,os.date("%Y-%m-%d"),iNumber))
- вот она эта строчка

Вот что менял - добавлял только исключения:

Код
local tExceptions = {    -- Слова исключения которые в топ заносится не будут
    ["xxx"] = 1,
    ["порно"] = 1,
    ["малолетки"] = 1,
    ["porn"] = 1,
    ["анал"] = 1,
    ["ххх"] = 1,
            ["porno"] = 1,
}

Автор: Wariner 14.4.2009, 21:28

Код
function SearchArrival(tUser, sData)
    sData = sData:sub(1,-2)
    local _,_,iNumber,sSeach = sData:find("$Search .-%s%u%p%u%p%d%p(%d+)%p(.*)")
    if iNumber and sSeach then
        sSeach = String2Lower(sSeach)
        sSeach = sSeach:gsub("%p", " ")
        local _,_,sTthseach = sSeach:find("^(%a%a%a)")
        if sTthseach ~= "tth" then
            if tExceptions[sSeach] ~= 1 then
                con:execute(("INSERT INTO `TopSeach` (`Seach`) VALUES ('%s')"):format(sSeach))
                con:execute(("UPDATE `TopSeach` SET `S%s` = `S%s` + 1 WHERE `Seach` = '%s'"):format(tostring(iNumber), tostring(iNumber), sSeach))
                con:execute(("INSERT INTO `SeachDate` (`id_Seach`, `date_Seach`, `category`) VALUES ((SELECT `id` FROM `TopSeach` WHERE Seach = '%s'),'%s','%s')"):format(sSeach,os.date("%Y-%m-%d"),iNumber))
            end    
        end    
    end
end

Автор: Setuper 14.4.2009, 21:39

Достаточно было написать так:

Код
  local iNumber, sSeach = sData:match"$Search .-%s%u%p%u%p%d%p(%d+)%p(.*)"
  if iNumber then


Если iNumber будет равно nil, то и sSeach будет равно nil.
Если iNumber не nil, то и sSeach не nil.

Автор: Wariner 14.4.2009, 21:39

исправлено несколько мелочей! скрипт перезалит!

Автор: OtshelnikFm 17.4.2009, 20:04

Топ поиска документов за месяц:

Цитата
[20:47] Синтаксис ... Интернет\PtokaX 0.4.1.1\scripts\TopSeachMySQL.lua:253: attempt to index field '?' (a nil value)

Скрипт от 14.4.2009, 22:39

Автор: OtshelnikFm 20.4.2009, 19:58

А возможно чтобы слова исключения (porn и им подобные) добавлялись через меню хаба в базу mysql (и хранились там) - а не прописывались в конфиге?

(конечно оффтоп - но может кто нибудь сделать на основе данных из базы mysql сделать статистику на сайт? просил в ветке про скрипт StatPX - сделать туда дополнительно но получил отказ. Хотя эти данные из таблиц базы носят ценный характер)

Автор: Wariner 20.4.2009, 22:24

про слова сделаю)))

Автор: TMB 30.4.2009, 16:30

у меня у всех скриптов одна ошибка...библиотеки лежат в правельном месте!!! PtokaX\libs. так же в скрипте всё правельно прописано... beat_brick.gif
стоит xampp 1.6.8. Версия MySQL: 5.0.67

 

Автор: Setuper 30.4.2009, 16:49

1) Библиотека libmysql.dll должна лежать в папке libs, а папка libs должна быть создана в директории, откуда запускается ptokax, а не в директории scripts.

Вообще говоря, конфигурация папок и файлов должна быть такой:

Цитата
"корневая папка ptokax"/libs/libmysql.dll
"корневая папка ptokax"/libs/luasql/mysql.dll
"корневая папка ptokax"/scripts/TopSeachMySQL.lua


2) Откуда ptokax подгружает библиотеки можно посмотреть с помощью скрипта:
Код
Core.SendToAll(tostring(package.cpath))

3) Если все равно не загружается, то попробуй перенести содержимое папки libs в корневую папку, в которой находится ptokax.exe

4) Подобного рода ошибки могут также возникать если mysql сервер остановлен или вовсе отсутствует!

Автор: TMB 30.4.2009, 17:52

[18:50] Синтаксис error loading module 'luasql.mysql' from file 'H:\PtokaX\libs\luasql\mysql.dll':
Не найден указанный модуль.
в Ptokax такие ошибки..!
мускул включён...трекер то нормально работает... beat_brick.gif

а если перенести то так:
[18:55] Синтаксис H:\PtokaX\scripts\RankingScript.lua:46: LuaSQL: Error connecting to database. MySQL: Unknown database 'chatrang'
типа не может приконектится!!!

 

Автор: Setuper 30.4.2009, 18:08

Конечно. Нужно сначала создать базу данных, а потом уже к ней коннектиться

Автор: TMB 30.4.2009, 18:55

всё я сделал..!!! база "PtokaX" пароль прописал...

Автор: Setuper 30.4.2009, 20:53

А при чём тут база PtokaX, когда ошибка говорит, что скрипт не может соединиться с базой 'chatrang'. Или прописывай в скрипте свою базу, либо создавай базу chatrang.

Автор: TMB 30.4.2009, 20:59

в скрипте я и прописывал базу хост и пароль! в базе нужно какие либо таблицы создавать?

Автор: Setuper 30.4.2009, 21:14

Да погоди ты с таблицами - таблицы все создаются автоматически.
Разберись с базой, ведь в ошибке сказано про базу, а не про таблицы.

Автор: TMB 1.5.2009, 1:45

понятно...буду разбераться..но просто странно...! много каких скриптов стоит на php которые используют mysql но с ними проблем никогда не возникало!!!
можно ли использовать не локалхост а базу на другом серваке...допустим у представителей представляющих услуги хостинга?
от версии mysql ничего не зависит? можно использовать как 4 версию так и 5?
не дружу я с этой mysql...вот с php да...

Автор: Wariner 1.5.2009, 9:16

по поводу адреса сервера уже где то писали! Можно вписать любой!

Автор: TMB 2.5.2009, 12:05

кодировка базы какая должна быть? а то у меня русские ники не прописывает! знаки вопросов вместо ника!

Код
    »«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«» «»«»«»«»«
    1    0    Новичок        ?a????????
    2    0    Новичок        ™??®ku†™
    3    2    Новичок        Twilight
    4    2    Новичок        Boiler
    5    15    Новичок        ORB
    6    24    Новичок        NoNaMe
    7    24    Новичок        DeMoN_tmb
    »«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«» «»«»«»«»«

Автор: Setuper 2.5.2009, 12:46

cp1251

Автор: TMB 2.5.2009, 14:24

всеравно так же и осталось!!!

Код
    1    0    Новичок        ????
    2    2    Новичок        AliFFka
    3    3    Новичок        NoNaMe


кодировку ставлю: cp1251_general_ci

Автор: OtshelnikFm 2.5.2009, 14:55

Цитата(TMB @ 2.5.2009, 13:05) *
кодировка базы какая должна быть? а то у меня русские ники не прописывает! знаки вопросов вместо ника!

Код
    »«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«» «»«»«»«»«
    1    0    Новичок        ?a????????
    2    0    Новичок        ™??®ku†™
    3    2    Новичок        Twilight
    4    2    Новичок        Boiler
    5    15    Новичок        ORB
    6    24    Новичок        NoNaMe
    7    24    Новичок        DeMoN_tmb
    »«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«» «»«»«»«»«

Чето я непомню чтобы в топе поиска такое было?

У меня все в utf8 и все выводит без проблем. Смотри настройки mysql файл my.ini

Автор: TMB 2.5.2009, 17:50

Спасибо!
в топе поиска тоже не отображались русские буквы!!!

Автор: ustas 3.5.2009, 19:10

работает только общий топ, остальные команды почему-то не работают

Код
[20:04:37] <SeachBot> Топ поиска файлов без категории:

    ============================================================
      Текст        Кол.
    ============================================================
      2009        2
      2008        2
      видео        2
    ============================================================

[20:04:42 | 10.3.23.10 | Gsp] <ustas> !intervaltopseach 1 1
[20:04:52 | 10.3.23.10 | Gsp] <ustas> !intervaltopseach 1 2
[20:04:56 | 10.3.23.10 | Gsp] <ustas> !intervaltopseach 1

[20:04] Синтаксис E:\Programm\NewPtokaX\scripts\TopSeachMySQL.lua:247: attempt to index field '?' (a nil value)
247-я строка
Код
        sMsg = ("%s\t%s\t\t\t\t%s\r\n"):format(sMsg,tTemp[i][1],tTemp[i][2])

Автор: Wariner 3.5.2009, 20:20

хм у меня работает! Правда при запросах памяти жрёт много. надо что то менять. В первом посту версия с парой исправлений!

перезалито ещё раз

upd: 137 строчка:

Код
sMsg = sMsg.."$UserCommand 1 3 "..sMenu.."\\Посмотреть ошибки скрипта$<%[mynick]> !errorsseachtop&#124;|"


базы будут новые с префиксами!

Автор: Setuper 3.5.2009, 20:35

Код
sMsg = sMsg..("$UserCommand 1 3 %s\\Посмотреть ошибки скрипта$<%[mynick]> !errorsseachtop&#124;|"):format(sMenu)

Автор: Wariner 3.5.2009, 20:50

что то у меня сегодня косяк на косяке((( перезалил ещё раз

2Setuper: Будет ли оптимизация в этом скрипте при применении ООП? Если да покажи плиз))

Автор: OtshelnikFm 4.5.2009, 0:50

хм.. Работает версия rc1. Съедает 115 килобайт памяти...

Из пожеланий - в каждой категории вывести "общее количество поиска". К примеру "топ поиска видео за день"

Цитата
============================================================
Текст Кол.
============================================================
17
2009 15
знамение 8
обитаемый остров 8
ангелы и демоны 7
звездный путь 7
общее количество видео поиска 147
============================================================

еще заметил когда по категории небыло поиска - то вываливается это:
Цитата
[01:48] Синтаксис ... Интернет\PtokaX 0.4.1.1\scripts\TopSeachMySQL.lua:253: attempt to index field '?' (a nil value)
- топ видеопоиска за сегодня

Автор: skonda 9.5.2009, 15:02

пытаюсь перевести этот скрипт под API1. Сделал как здесь написано http://mydc.ru/topic605.html Однако пишет "Приложению не удалось запуститься, поскольку LIBMYSQL.dll не найден". Хотя в PtokaX\libs этот файл есть. Какую библиотеку MYSQL качать, чтобы под 0.3.6.0 запустился скрипт?

Автор: mariner 9.5.2009, 16:22

никак. MySQL старая птока не тянет

Автор: Setuper 9.5.2009, 17:00

В данном случае выход только один: переезжать на новую ptokax 0.4.1.1

Автор: Lesh™ 15.8.2009, 1:59

Ошибки скрипта ChatLogs.lua:

====================================================================================================
№ Дата и время Ошибка
====================================================================================================
1. 2009-08-15 01:48:03 IntervaShowTopSeach 3 8
2. 2009-08-15 01:48:03 :285: bad argument #1 to 'SendToUser' (table expected, got nil)
3. 2009-08-15 01:49:31 :283: bad argument #2 to 'format' (string expected, got nil)
4. 2009-08-15 01:51:14 :283: bad argument #2 to 'format' (string expected, got nil)
5. 2009-08-15 01:51:21 IntervaShowTopSeach 3 7
6. 2009-08-15 01:51:21 :285: bad argument #1 to 'SendToUser' (table expected, got nil)
7. 2009-08-15 01:51:29 IntervaShowTopSeach 1 1
8. 2009-08-15 01:51:29 :285: bad argument #1 to 'SendToUser' (table expected, got nil)
9. 2009-08-15 01:51:50 :283: bad argument #2 to 'format' (string expected, got nil)
====================================================================================================

Автор: exxxx 30.10.2009, 17:02

[17:02:09] <eX_> !intervaltopseach 1

Цитата
[17:02] Синтаксис G:\PtokaX\scripts\TopSeachMySQL.lua:280: bad argument #2 to 'format' (string expected, got nil)



Автор: steppnov 14.11.2009, 22:28

а php кто нить может дать??? чтобы выводил топ поиска beat_plaster.gif пжлст очень надо

Автор: MIXER 7.12.2009, 15:53

Цитата(exxxx @ 30.10.2009, 17:02) *
[17:02:09] <eX_> !intervaltopseach 1

Как с этим бороться?


Автор: Saymon 25.3.2010, 2:28

[02:18] Синтаксис D:\SERVER\Magnets\scripts\TopSeachMySQL.lua:234: bad argument #1 to 'SendToUser' (table expected, got nil)

Автор: KCAHDEP 22.10.2012, 21:56

22.10.2012 22:48:38 - /var/ptokax/scripts/TopSeachMySQL.lua:282: bad argument #1 to 'SendToUser' (table expected, got nil) один раз сработал и помер с такой вот ошибкой

Автор: Alexey 23.10.2012, 3:30

Saymon21, KCAHDEP,
В указанных строках надо заменить

Код
Core.SendToUser(tUser,
на
Код
Core.SendToOps(

Автор: KCAHDEP 23.10.2012, 7:11

Alexey, Спасибо помогло, но ненадолго, теперь вот так
23.10.2012 08:04:31 - /var/ptokax/scripts/TopSeachMySQL.lua:175: bad argument #2 to 'format' (string expected, got boolean)

Автор: Alexey 23.10.2012, 15:17

Замени

Код
            Core.SendToUser(tUser, ("<%s> %s"):format(sBot,IntervaShowTopSeach(sType,sNum)))

на
Код
            local Value = IntervaShowTopSeach(sType,sNum)
            if Value and type(Value) ~= "boolean" then
                Core.SendToUser(tUser, ("<%s> %s"):format(sBot,Value))
            end

Когда подобная ошибка выскочит в других местах — сделай по аналогии.

Автор: KCAHDEP 23.10.2012, 17:10

Цитата(Alexey @ 23.10.2012, 16:17) *
Замени
Код
            Core.SendToUser(tUser, ("<%s> %s"):format(sBot,IntervaShowTopSeach(sType,sNum)))

на
Код
            local Value = IntervaShowTopSeach(sType,sNum)
            if Value and type(Value) ~= "boolean" then
                Core.SendToUser(tUser, ("<%s> %s"):format(sBot,Value))
            end

Когда подобная ошибка выскочит в других местах — сделай по аналогии.

Спасибо, вроде помогло.