myDC.ru

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

 
2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему

> NewsMix, API2 | Новости с двух сайтов

Теги
Tsd
сообщение 20.9.2012, 17:00
Сообщение #1


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

Группа: Пользователи
Сообщений: 176
Регистрация: 11.7.2008
Пользователь №: 171
Спасибо сказали: 182 раза




Название скрипта: NewsMix
Автор: Tsd (Рига, Латвия)
Версия скрипта: 1.0
Версия API: API2
Описание скрипта: Скрипт выводит в чат по таймеру новости с двух новостных порталов в случае, если:
1. В чате за время таймера написано сообщений меньше, чем в настройках.
2. Дневное время суток (ночью скрипт молчит, чтобы не флудить в чате).
3. Новость на сайте изменилась.
Если не нужны новости с Латвийского портала - просто закомментируйте строку в таблице sAddr или измените на другой портал по аналогии. (В этом случае необходимо изменить так же строку 45).

Протестировано на PtokaX 0.4.2.0
Tsd © 20.09.2012
Прикрепленные файлы
Прикрепленный файл  NewsMix_1.lua ( 6.58 килобайт ) Кол-во скачиваний: 207
 


Спасибо сказали:
Go to the top of the page
+Quote Post
Booth
сообщение 9.10.2012, 16:28
Сообщение #2


Начинающий
*

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




А у меня проблема с этим скриптом на PtokaX 0.4.2.0 API 2. Библиотеки все стоят.
Цитата
\NewsMix_1.lua:40: attempt to index global 'http' (a boolean value)

Как можно решить проблему? Спасибо!
Go to the top of the page
+Quote Post
Ksan
сообщение 9.10.2012, 17:15
Сообщение #3


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

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




Booth, вот только что скачал, ничего не меняя, вставил в папку скриптов и запустил, - работает без проблем (да, только уменьшил периодичность с 45 минут до 1 минуты, чтоб не ждать действия скрипта)...
Возможно, у вас там ошибка загрузки библиотеки socket.http. Проверьте наличие файлов необходимых библиотек.
Go to the top of the page
+Quote Post
Booth
сообщение 9.10.2012, 18:26
Сообщение #4


Начинающий
*

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




Цитата(Ksan @ 9.10.2012, 18:15) *
Booth, вот только что скачал, ничего не меняя, вставил в папку скриптов и запустил, - работает без проблем (да, только уменьшил периодичность с 45 минут до 1 минуты, чтоб не ждать действия скрипта)...
Возможно, у вас там ошибка загрузки библиотеки socket.http. Проверьте наличие файлов необходимых библиотек.

Библиотеки от сюда http://mydc.ru/topic43.html , сам хаб http://mydc.ru/topic19s80.html?p=44032#entry44032 . Библиотеки лежат в \ptokax\libs. Файла socket.http не нашёл. В логах только это ошибка, когда по времени скрипт должен грузить с инета.
Go to the top of the page
+Quote Post
Ksan
сообщение 9.10.2012, 19:21
Сообщение #5


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

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




Booth, библиотеку берите отсюда.
Не обращайте внимания, что она для Русхаба, для вашей Птоки тоже пойдёт.
Та библиотека, что у вас сейчас стоит, она годится для более ранних версий Птоки, но не для вашей.


Спасибо сказали:
Go to the top of the page
+Quote Post
Alex Dancer
сообщение 15.10.2012, 2:05
Сообщение #6


Начинающий
*

Группа: Пользователи
Сообщений: 16
Регистрация: 13.10.2012
Пользователь №: 10 908
Спасибо сказали: 0 раз




А у меня не получилось запустить этот скрипт. Ставил библиотеку отсюда и отсюда, и всё равно ошибки.
На версии библиотек с первой ссылки лог такой:
] Нет синтаксических ошибок в файле скрипта News.lua
] Скрипт запущен.
потом ошибка: Прикрепленный файл  Error1.JPG ( 21.21 килобайт ) Кол-во скачиваний: 415

и лог
] Синтаксис error loading module 'socket.core' from file '...\Ptokax 0.4.2.0\scripts\libs\socket\core.dll':
Не найден указанный модуль. (хотя файл как-раз таки на месте)

] Синтаксис ...\Ptokax 0.4.2.0\scripts\News.lua:39: loop or previous error loading module 'socket.http'
] Синтаксис ...\Ptokax 0.4.2.0\scripts\News.lua:39: loop or previous error loading module 'socket.http'
] Скрипт остановлен. (в ручную мной)

Со второй ссылки такой:
] Нет синтаксических ошибок в файле скрипта News.lua
] Скрипт запущен.
] Синтаксис ...\Ptokax 0.4.2.0\scripts\libs\socket.lua:18: attempt to index global 'socket' (a nil value)


всё, что я поменял в скрипте это время и адрес
Код
bTimer = 1

sAddr = {
    {"http://xox.uz/rss.xml","windows-1251","2"},
    {"http://kids.xox.uz/engine/rss.php","windows-1251","2"},
    {"http://news.olam.uz/rss/all.rss","windows-1251","2"},
}


В чём может быть причина???

P.S.
Windows XP SP3 x32
PtokaX 0.4.2.0 build 241
Go to the top of the page
+Quote Post
Tsd
сообщение 16.10.2012, 10:00
Сообщение #7


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

Группа: Пользователи
Сообщений: 176
Регистрация: 11.7.2008
Пользователь №: 171
Спасибо сказали: 182 раза




To Alex Dancer
1. Скрипт парсит только два сайта. Если вы меняете адреса сайтов, то при некорректном выводе информации необходимо так же поменять захват (строки 45 и 58). Последнее значение в адресах сайтов - это порядковый номер в таблице.
2. Насчет библиотек почитайте тут. Постом выше можно скачать Ptokax 0.4.2.0 build 401 с Lua 5.1.5
Go to the top of the page
+Quote Post
Alex Dancer
сообщение 16.10.2012, 17:28
Сообщение #8


Начинающий
*

Группа: Пользователи
Сообщений: 16
Регистрация: 13.10.2012
Пользователь №: 10 908
Спасибо сказали: 0 раз




Цитата(Tsd @ 16.10.2012, 12:00) *
To Alex Dancer
1. Скрипт парсит только два сайта. Если вы меняете адреса сайтов, то при некорректном выводе информации необходимо так же поменять захват (строки 45 и 58). Последнее значение в адресах сайтов - это порядковый номер в таблице.
2. Насчет библиотек почитайте тут. Постом выше можно скачать Ptokax 0.4.2.0 build 401 с Lua 5.1.5


что-то я не понял, а что менять-то в 45 строке???

Вот мой скрипт

Код
--[[    Название скрипта: NewsMix
    Автор: Tsd (Рига, Латвия)
    Версия скрипта: 1.0
    Версия API: API2
    Описание скрипта: Скрипт выводит в чат по таймеру новости с двух новостных порталов в случае, если:
    1. В чате написано сообщений меньше, чем в настройках.
    2. Дневное время суток (ночью скрипт молчит, чтобы не флудить в чате).
    3. Новость на сайте изменилась.
    Если не нужны новости с Латвийского портала - просто задокумментируйте строку в таблице sAddr или измените на другой портал по аналогии.
    (в этом случае необходимо изменить также строку 45).
]]

    -- Общие настройки
sBotName = ""        -- Имя бота. Если "" то имя основного бота хаба.
bTimer = 1        -- Выдача по таймеру (в минутах).
AntiFl = 50        -- Если в чате было написано столько или более сообщений за время таймера, то новости не будут выданы.
StartDay = 7        -- С какого часа до полуночи скрипт будет выдавать новости.
sAddr = {
    {"http://xox.uz/rss.xml","windows-1251","1"},
    {"http://news.olam.uz/rss/all.rss/","windows-1251","2"},
}
---------------------------

function OnStartup()
    if sBotName == "" then sBotName = SetMan.GetString(21) end
    tmr = TmrMan.AddTimer(bTimer*60000)
    sMsg1,sMsg2,sOldDesc1,sOldDesc2,n = "","","","",0
end

function ChatArrival()
    n = n+1
    collectgarbage("collect")
end

function OnTimer(tmr)
    local hour = tonumber(os.date("%H"))
    if (n <= AntiFl) and (hour >= StartDay) then
        http = require("socket.http")
        assert(http,"Ошибка загрузки библиотеки socket.http. Проверьте наличие файлов необходимых библиотек.")
        http.TIMEOUT = 3    
        for i in pairs(sAddr) do
            local msg = http.request(sAddr[i][1])
            if msg then
                if (sAddr[i][3]) == "1" then
                    _,_,Link,Description = string.find(msg,"<item>.-<link>(.-)</link>.-<description>(.-)</p.-</item>(.*)")
                    if Link and Description then
                        sMsg = Description
                        if Description == sOldDesc1 then sMsg1 = ""
                            else
                            sOldDesc1 = Description
                            RepChars()
                            if (sAddr[i][2]) == "UTF-8" then sMsg = Utf8ToAnsi(sMsg) end
                            sMsg1 = "•••    "..sMsg.."\n\t\tПодробнее: "..Link
                        end
                    end
                end
                if (sAddr[i][3]) == "2" then
                    _,_,Link,Description = string.find(msg,"<item>.-<link>(.-)</link>.-<description>(.-)</description>.-</item>(.*)")    
                    if Link and Description then
                        sMsg = Description
                        if Description == sOldDesc2 then sMsg2 = ""
                            else
                            sOldDesc2 = Description
                            RepChars()
                            if (sAddr[i][2]) == "UTF-8" then sMsg = Utf8ToAnsi(sMsg) end
                            sMsg2 = "•••    "..sMsg.."\n\t\tПодробнее: "..Link  
                        end
                
                    end
                end
            end
        end
        if sMsg1 ~= "" or sMsg2 ~= "" then
            if sMsg1 ~= "" and sMsg2 == "" then    sMsg1 = "\n\n"..sMsg1.."\n"   end
            if sMsg2 ~= "" and sMsg1 == "" then    sMsg2 = "\n\n"..sMsg2.."\n"   end
            if sMsg1 ~= "" and sMsg2 ~= "" then    
                sMsg1 = "\n\n"..sMsg1.."\n"
                sMsg2 = "\n"..sMsg2.."\n"
            end
            Core.SendToAll("<"..sBotName..">"..sMsg1..sMsg2)
            sMsg1 = ""
            sMsg2 = ""
        end
    end
    n = 0
    collectgarbage("collect") return string.format("%-.2f Kb.",collectgarbage("count"))
end

function RepChars()
    sMsg = string.gsub (sMsg, "__g", "ig")
    sMsg = string.gsub (sMsg, ("%[b%]"), " ")
    sMsg = string.gsub (sMsg, ("%[/b%]"), "  ")
    sMsg = string.gsub (sMsg, "<br>", "\r\n\t")
    sMsg = string.gsub (sMsg, "<br />", "\r\n\t")
    sMsg = string.gsub (sMsg, "<", "<")
    sMsg = string.gsub (sMsg, ">", ">")
    sMsg = string.gsub (sMsg, "&quot;", string.char (34))
    sMsg = string.gsub (sMsg, "&", "")
    sMsg = string.gsub (sMsg, " ", " ")
    sMsg = string.gsub (sMsg, "nbsp;", " ")
    sMsg = string.gsub (sMsg, "$", "$")
    sMsg = string.gsub (sMsg, "'", "`")
    sMsg = string.gsub (sMsg, "'", "`")
    sMsg = string.gsub (sMsg, "|", "")
    sMsg = string.gsub (sMsg, "|", "")
    sMsg = string.gsub (sMsg, "<!%[CDATA%[", "")
    sMsg = string.gsub (sMsg, "%]%]>", "")
    sMsg = string.gsub (sMsg, "<a target=\"_blank\" href=", "")
    sMsg = string.gsub (sMsg, ">paparazzi.ru</a>", " ")
    sMsg = string.gsub (sMsg, "<strong>", "")
    sMsg = string.gsub (sMsg, "</strong>", "")
    sMsg = string.gsub (sMsg, "- <a href=", "")
    sMsg = string.gsub (sMsg, "target=\"_blank\">", " ")
    sMsg = string.gsub (sMsg, "</a> –", "")
    sMsg = string.gsub (sMsg, "<p>","")
end

local utf8_decode={
  [128]={[147]="\150",[148]="\151",[152]="\145",[153]="\146",[154]="\130",[156]="\147",[157]="\148",[158]="\132",[160]="\134",[161]="\135",[162]="\149",[166]="\133",[176]="\137",[185]="\139",[186]="\155"},
  [130]={[172]="\136"},
  [132]={[150]="\185",[162]="\153"},
  [194]={[152]="\152",[160]="\160",[164]="\164",[166]="\166",[167]="\167",[169]="\169",[171]="\171",[172]="\172",[173]="\173",[174]="\174",[176]="\176",[177]="\177",[181]="\181",[182]="\182",[183]="\183",[187]="\187"},
  [208]={[129]="\168",[130]="\128",[131]="\129",[132]="\170",[133]="\189",[134]="\178",[135]="\175",[136]="\163",[137]="\138",[138]="\140",[139]="\142",[140]="\141",[143]="\143",[144]="\192",[145]="\193",[146]="\194",[147]="\195",[148]="\196",
    [149]="\197",[150]="\198",[151]="\199",[152]="\200",[153]="\201",[154]="\202",[155]="\203",[156]="\204",[157]="\205",[158]="\206",[159]="\207",[160]="\208",[161]="\209",[162]="\210",[163]="\211",[164]="\212",[165]="\213",[166]="\214",
    [167]="\215",[168]="\216",[169]="\217",[170]="\218",[171]="\219",[172]="\220",[173]="\221",[174]="\222",[175]="\223",[176]="\224",[177]="\225",[178]="\226",[179]="\227",[180]="\228",[181]="\229",[182]="\230",[183]="\231",[184]="\232",
    [185]="\233",[186]="\234",[187]="\235",[188]="\236",[189]="\237",[190]="\238",[191]="\239"},
  [209]={[128]="\240",[129]="\241",[130]="\242",[131]="\243",[132]="\244",[133]="\245",[134]="\246",[135]="\247",[136]="\248",[137]="\249",[138]="\250",[139]="\251",[140]="\252",[141]="\253",[142]="\254",[143]="\255",[144]="\161",[145]="\184",
    [146]="\144",[147]="\131",[148]="\186",[149]="\190",[150]="\179",[151]="\191",[152]="\188",[153]="\154",[154]="\156",[155]="\158",[156]="\157",[158]="\162",[159]="\159"},[210]={[144]="\165",[145]="\180"}
}

local nmdc = {
  [36] = "$",
  [124] = "|"
}

function Utf8ToAnsi(s)
  local a, j, r, b = 0, 0, ""
  for i = 1, s and s:len() or 0 do
    b = s:byte(i)
    if b < 128 then
      if nmdc[b] then
        r = r..nmdc[b]
      else
        r = r..string.char(b)
      end
    elseif a == 2 then
      a, j = a - 1, b
    elseif a == 1 then
      a, r = a - 1, r..utf8_decode[j][b]
    elseif b == 226 then
      a = 2
    elseif b == 194 or b == 208 or b == 209 or b == 210 then
      j, a = b, 1
    else
      r = r.."_"
    end
  end
  return r
end



И что нужно добавить, чтобы выводило с трёх сайтов?
Go to the top of the page
+Quote Post
Tsd
сообщение 17.10.2012, 18:14
Сообщение #9


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

Группа: Пользователи
Сообщений: 176
Регистрация: 11.7.2008
Пользователь №: 171
Спасибо сказали: 182 раза




Цитата(Alex Dancer @ 16.10.2012, 17:28) *
что-то я не понял, а что менять-то в 45 строке???

Вот мой скрипт

Код
--[[    Название скрипта: NewsMix
    Автор: Tsd (Рига, Латвия)
    Версия скрипта: 1.0
    Версия API: API2
    Описание скрипта: Скрипт выводит в чат по таймеру новости с двух новостных порталов в случае, если:
    1. В чате написано сообщений меньше, чем в настройках.
    2. Дневное время суток (ночью скрипт молчит, чтобы не флудить в чате).
    3. Новость на сайте изменилась.
    Если не нужны новости с Латвийского портала - просто задокумментируйте строку в таблице sAddr или измените на другой портал по аналогии.
    (в этом случае необходимо изменить также строку 45).
]]

    -- Общие настройки
sBotName = ""        -- Имя бота. Если "" то имя основного бота хаба.
bTimer = 1        -- Выдача по таймеру (в минутах).
AntiFl = 50        -- Если в чате было написано столько или более сообщений за время таймера, то новости не будут выданы.
StartDay = 7        -- С какого часа до полуночи скрипт будет выдавать новости.
sAddr = {
    {"http://xox.uz/rss.xml","windows-1251","1"},
    {"http://news.olam.uz/rss/all.rss/","windows-1251","2"},
}
---------------------------

function OnStartup()
    if sBotName == "" then sBotName = SetMan.GetString(21) end
    tmr = TmrMan.AddTimer(bTimer*60000)
    sMsg1,sMsg2,sOldDesc1,sOldDesc2,n = "","","","",0
end

function ChatArrival()
    n = n+1
    collectgarbage("collect")
end

function OnTimer(tmr)
    local hour = tonumber(os.date("%H"))
    if (n <= AntiFl) and (hour >= StartDay) then
        http = require("socket.http")
        assert(http,"Ошибка загрузки библиотеки socket.http. Проверьте наличие файлов необходимых библиотек.")
        http.TIMEOUT = 3    
        for i in pairs(sAddr) do
            local msg = http.request(sAddr[i][1])
            if msg then
                if (sAddr[i][3]) == "1" then
                    _,_,Link,Description = string.find(msg,"<item>.-<link>(.-)</link>.-<description>(.-)</p.-</item>(.*)")
                    if Link and Description then
                        sMsg = Description
                        if Description == sOldDesc1 then sMsg1 = ""
                            else
                            sOldDesc1 = Description
                            RepChars()
                            if (sAddr[i][2]) == "UTF-8" then sMsg = Utf8ToAnsi(sMsg) end
                            sMsg1 = "•••    "..sMsg.."\n\t\tПодробнее: "..Link
                        end
                    end
                end
                if (sAddr[i][3]) == "2" then
                    _,_,Link,Description = string.find(msg,"<item>.-<link>(.-)</link>.-<description>(.-)</description>.-</item>(.*)")    
                    if Link and Description then
                        sMsg = Description
                        if Description == sOldDesc2 then sMsg2 = ""
                            else
                            sOldDesc2 = Description
                            RepChars()
                            if (sAddr[i][2]) == "UTF-8" then sMsg = Utf8ToAnsi(sMsg) end
                            sMsg2 = "•••    "..sMsg.."\n\t\tПодробнее: "..Link  
                        end
                
                    end
                end
            end
        end
        if sMsg1 ~= "" or sMsg2 ~= "" then
            if sMsg1 ~= "" and sMsg2 == "" then    sMsg1 = "\n\n"..sMsg1.."\n"   end
            if sMsg2 ~= "" and sMsg1 == "" then    sMsg2 = "\n\n"..sMsg2.."\n"   end
            if sMsg1 ~= "" and sMsg2 ~= "" then    
                sMsg1 = "\n\n"..sMsg1.."\n"
                sMsg2 = "\n"..sMsg2.."\n"
            end
            Core.SendToAll("<"..sBotName..">"..sMsg1..sMsg2)
            sMsg1 = ""
            sMsg2 = ""
        end
    end
    n = 0
    collectgarbage("collect") return string.format("%-.2f Kb.",collectgarbage("count"))
end

function RepChars()
    sMsg = string.gsub (sMsg, "__g", "ig")
    sMsg = string.gsub (sMsg, ("%[b%]"), " ")
    sMsg = string.gsub (sMsg, ("%[/b%]"), "  ")
    sMsg = string.gsub (sMsg, "<br>", "\r\n\t")
    sMsg = string.gsub (sMsg, "<br />", "\r\n\t")
    sMsg = string.gsub (sMsg, "<", "<")
    sMsg = string.gsub (sMsg, ">", ">")
    sMsg = string.gsub (sMsg, "&quot;", string.char (34))
    sMsg = string.gsub (sMsg, "&", "")
    sMsg = string.gsub (sMsg, " ", " ")
    sMsg = string.gsub (sMsg, "nbsp;", " ")
    sMsg = string.gsub (sMsg, "$", "$")
    sMsg = string.gsub (sMsg, "'", "`")
    sMsg = string.gsub (sMsg, "'", "`")
    sMsg = string.gsub (sMsg, "|", "")
    sMsg = string.gsub (sMsg, "|", "")
    sMsg = string.gsub (sMsg, "<!%[CDATA%[", "")
    sMsg = string.gsub (sMsg, "%]%]>", "")
    sMsg = string.gsub (sMsg, "<a target=\"_blank\" href=", "")
    sMsg = string.gsub (sMsg, ">paparazzi.ru</a>", " ")
    sMsg = string.gsub (sMsg, "<strong>", "")
    sMsg = string.gsub (sMsg, "</strong>", "")
    sMsg = string.gsub (sMsg, "- <a href=", "")
    sMsg = string.gsub (sMsg, "target=\"_blank\">", " ")
    sMsg = string.gsub (sMsg, "</a> –", "")
    sMsg = string.gsub (sMsg, "<p>","")
end

local utf8_decode={
  [128]={[147]="\150",[148]="\151",[152]="\145",[153]="\146",[154]="\130",[156]="\147",[157]="\148",[158]="\132",[160]="\134",[161]="\135",[162]="\149",[166]="\133",[176]="\137",[185]="\139",[186]="\155"},
  [130]={[172]="\136"},
  [132]={[150]="\185",[162]="\153"},
  [194]={[152]="\152",[160]="\160",[164]="\164",[166]="\166",[167]="\167",[169]="\169",[171]="\171",[172]="\172",[173]="\173",[174]="\174",[176]="\176",[177]="\177",[181]="\181",[182]="\182",[183]="\183",[187]="\187"},
  [208]={[129]="\168",[130]="\128",[131]="\129",[132]="\170",[133]="\189",[134]="\178",[135]="\175",[136]="\163",[137]="\138",[138]="\140",[139]="\142",[140]="\141",[143]="\143",[144]="\192",[145]="\193",[146]="\194",[147]="\195",[148]="\196",
    [149]="\197",[150]="\198",[151]="\199",[152]="\200",[153]="\201",[154]="\202",[155]="\203",[156]="\204",[157]="\205",[158]="\206",[159]="\207",[160]="\208",[161]="\209",[162]="\210",[163]="\211",[164]="\212",[165]="\213",[166]="\214",
    [167]="\215",[168]="\216",[169]="\217",[170]="\218",[171]="\219",[172]="\220",[173]="\221",[174]="\222",[175]="\223",[176]="\224",[177]="\225",[178]="\226",[179]="\227",[180]="\228",[181]="\229",[182]="\230",[183]="\231",[184]="\232",
    [185]="\233",[186]="\234",[187]="\235",[188]="\236",[189]="\237",[190]="\238",[191]="\239"},
  [209]={[128]="\240",[129]="\241",[130]="\242",[131]="\243",[132]="\244",[133]="\245",[134]="\246",[135]="\247",[136]="\248",[137]="\249",[138]="\250",[139]="\251",[140]="\252",[141]="\253",[142]="\254",[143]="\255",[144]="\161",[145]="\184",
    [146]="\144",[147]="\131",[148]="\186",[149]="\190",[150]="\179",[151]="\191",[152]="\188",[153]="\154",[154]="\156",[155]="\158",[156]="\157",[158]="\162",[159]="\159"},[210]={[144]="\165",[145]="\180"}
}

local nmdc = {
  [36] = "$",
  [124] = "|"
}

function Utf8ToAnsi(s)
  local a, j, r, b = 0, 0, ""
  for i = 1, s and s:len() or 0 do
    b = s:byte(i)
    if b < 128 then
      if nmdc[b] then
        r = r..nmdc[b]
      else
        r = r..string.char(b)
      end
    elseif a == 2 then
      a, j = a - 1, b
    elseif a == 1 then
      a, r = a - 1, r..utf8_decode[j][b]
    elseif b == 226 then
      a = 2
    elseif b == 194 or b == 208 or b == 209 or b == 210 then
      j, a = b, 1
    else
      r = r.."_"
    end
  end
  return r
end



И что нужно добавить, чтобы выводило с трёх сайтов?

Разобраться как работает скрипт в первом посте. Прикрутить можно хоть сто сайтов.
Go to the top of the page
+Quote Post
Артём
сообщение 17.10.2012, 19:09
Сообщение #10


Наруто на аваторке
***********

Группа: Пользователи
Сообщений: 2 606
Регистрация: 11.10.2008
Из: Харькова
Пользователь №: 771
Спасибо сказали: 774 раза




Alex Dancer, сколько сайтов, столько и
Код
                if (sAddr[i][3]) == "№RSS" then
                    _,_,Link,Description = string.find(msg,"<item>.-<link>(.-)</link>.-<description>(.-)</description>.-</item>(.*)")

в function OnTimer(tmr)
Понял? big_smile.gif
Go to the top of the page
+Quote Post
nafig
сообщение 19.10.2012, 7:20
Сообщение #11


Активный участник
***

Группа: Пользователи
Сообщений: 62
Регистрация: 23.1.2011
Пользователь №: 8 626
Спасибо сказали: 4 раза




Цитата(Alex Dancer @ 16.10.2012, 17:28) *
что-то я не понял, а что менять-то в 45 строке???

Вот мой скрипт

Код
--[[    Название скрипта: NewsMix
    Автор: Tsd (Рига, Латвия)
    Версия скрипта: 1.0
    Версия API: API2
    Описание скрипта: Скрипт выводит в чат по таймеру новости с двух новостных порталов в случае, если:
    1. В чате написано сообщений меньше, чем в настройках.
    2. Дневное время суток (ночью скрипт молчит, чтобы не флудить в чате).
    3. Новость на сайте изменилась.
    Если не нужны новости с Латвийского портала - просто задокумментируйте строку в таблице sAddr или измените на другой портал по аналогии.
    (в этом случае необходимо изменить также строку 45).
]]

    -- Общие настройки
sBotName = ""        -- Имя бота. Если "" то имя основного бота хаба.
bTimer = 1        -- Выдача по таймеру (в минутах).
AntiFl = 50        -- Если в чате было написано столько или более сообщений за время таймера, то новости не будут выданы.
StartDay = 7        -- С какого часа до полуночи скрипт будет выдавать новости.
sAddr = {
    {"http://xox.uz/rss.xml","windows-1251","1"},
    {"http://news.olam.uz/rss/all.rss/","windows-1251","2"},
}
---------------------------

function OnStartup()
    if sBotName == "" then sBotName = SetMan.GetString(21) end
    tmr = TmrMan.AddTimer(bTimer*60000)
    sMsg1,sMsg2,sOldDesc1,sOldDesc2,n = "","","","",0
end

function ChatArrival()
    n = n+1
    collectgarbage("collect")
end

function OnTimer(tmr)
    local hour = tonumber(os.date("%H"))
    if (n <= AntiFl) and (hour >= StartDay) then
        http = require("socket.http")
        assert(http,"Ошибка загрузки библиотеки socket.http. Проверьте наличие файлов необходимых библиотек.")
        http.TIMEOUT = 3    
        for i in pairs(sAddr) do
            local msg = http.request(sAddr[i][1])
            if msg then
                if (sAddr[i][3]) == "1" then
                    _,_,Link,Description = string.find(msg,"<item>.-<link>(.-)</link>.-<description>(.-)</p.-</item>(.*)")
                    if Link and Description then
                        sMsg = Description
                        if Description == sOldDesc1 then sMsg1 = ""
                            else
                            sOldDesc1 = Description
                            RepChars()
                            if (sAddr[i][2]) == "UTF-8" then sMsg = Utf8ToAnsi(sMsg) end
                            sMsg1 = "•••    "..sMsg.."\n\t\tПодробнее: "..Link
                        end
                    end
                end
                if (sAddr[i][3]) == "2" then
                    _,_,Link,Description = string.find(msg,"<item>.-<link>(.-)</link>.-<description>(.-)</description>.-</item>(.*)")    
                    if Link and Description then
                        sMsg = Description
                        if Description == sOldDesc2 then sMsg2 = ""
                            else
                            sOldDesc2 = Description
                            RepChars()
                            if (sAddr[i][2]) == "UTF-8" then sMsg = Utf8ToAnsi(sMsg) end
                            sMsg2 = "•••    "..sMsg.."\n\t\tПодробнее: "..Link  
                        end
                
                    end
                end
            end
        end
        if sMsg1 ~= "" or sMsg2 ~= "" then
            if sMsg1 ~= "" and sMsg2 == "" then    sMsg1 = "\n\n"..sMsg1.."\n"   end
            if sMsg2 ~= "" and sMsg1 == "" then    sMsg2 = "\n\n"..sMsg2.."\n"   end
            if sMsg1 ~= "" and sMsg2 ~= "" then    
                sMsg1 = "\n\n"..sMsg1.."\n"
                sMsg2 = "\n"..sMsg2.."\n"
            end
            Core.SendToAll("<"..sBotName..">"..sMsg1..sMsg2)
            sMsg1 = ""
            sMsg2 = ""
        end
    end
    n = 0
    collectgarbage("collect") return string.format("%-.2f Kb.",collectgarbage("count"))
end

function RepChars()
    sMsg = string.gsub (sMsg, "__g", "ig")
    sMsg = string.gsub (sMsg, ("%[b%]"), " ")
    sMsg = string.gsub (sMsg, ("%[/b%]"), "  ")
    sMsg = string.gsub (sMsg, "<br>", "\r\n\t")
    sMsg = string.gsub (sMsg, "<br />", "\r\n\t")
    sMsg = string.gsub (sMsg, "<", "<")
    sMsg = string.gsub (sMsg, ">", ">")
    sMsg = string.gsub (sMsg, "&quot;", string.char (34))
    sMsg = string.gsub (sMsg, "&", "")
    sMsg = string.gsub (sMsg, " ", " ")
    sMsg = string.gsub (sMsg, "nbsp;", " ")
    sMsg = string.gsub (sMsg, "$", "$")
    sMsg = string.gsub (sMsg, "'", "`")
    sMsg = string.gsub (sMsg, "'", "`")
    sMsg = string.gsub (sMsg, "|", "")
    sMsg = string.gsub (sMsg, "|", "")
    sMsg = string.gsub (sMsg, "<!%[CDATA%[", "")
    sMsg = string.gsub (sMsg, "%]%]>", "")
    sMsg = string.gsub (sMsg, "<a target=\"_blank\" href=", "")
    sMsg = string.gsub (sMsg, ">paparazzi.ru</a>", " ")
    sMsg = string.gsub (sMsg, "<strong>", "")
    sMsg = string.gsub (sMsg, "</strong>", "")
    sMsg = string.gsub (sMsg, "- <a href=", "")
    sMsg = string.gsub (sMsg, "target=\"_blank\">", " ")
    sMsg = string.gsub (sMsg, "</a> –", "")
    sMsg = string.gsub (sMsg, "<p>","")
end

local utf8_decode={
  [128]={[147]="\150",[148]="\151",[152]="\145",[153]="\146",[154]="\130",[156]="\147",[157]="\148",[158]="\132",[160]="\134",[161]="\135",[162]="\149",[166]="\133",[176]="\137",[185]="\139",[186]="\155"},
  [130]={[172]="\136"},
  [132]={[150]="\185",[162]="\153"},
  [194]={[152]="\152",[160]="\160",[164]="\164",[166]="\166",[167]="\167",[169]="\169",[171]="\171",[172]="\172",[173]="\173",[174]="\174",[176]="\176",[177]="\177",[181]="\181",[182]="\182",[183]="\183",[187]="\187"},
  [208]={[129]="\168",[130]="\128",[131]="\129",[132]="\170",[133]="\189",[134]="\178",[135]="\175",[136]="\163",[137]="\138",[138]="\140",[139]="\142",[140]="\141",[143]="\143",[144]="\192",[145]="\193",[146]="\194",[147]="\195",[148]="\196",
    [149]="\197",[150]="\198",[151]="\199",[152]="\200",[153]="\201",[154]="\202",[155]="\203",[156]="\204",[157]="\205",[158]="\206",[159]="\207",[160]="\208",[161]="\209",[162]="\210",[163]="\211",[164]="\212",[165]="\213",[166]="\214",
    [167]="\215",[168]="\216",[169]="\217",[170]="\218",[171]="\219",[172]="\220",[173]="\221",[174]="\222",[175]="\223",[176]="\224",[177]="\225",[178]="\226",[179]="\227",[180]="\228",[181]="\229",[182]="\230",[183]="\231",[184]="\232",
    [185]="\233",[186]="\234",[187]="\235",[188]="\236",[189]="\237",[190]="\238",[191]="\239"},
  [209]={[128]="\240",[129]="\241",[130]="\242",[131]="\243",[132]="\244",[133]="\245",[134]="\246",[135]="\247",[136]="\248",[137]="\249",[138]="\250",[139]="\251",[140]="\252",[141]="\253",[142]="\254",[143]="\255",[144]="\161",[145]="\184",
    [146]="\144",[147]="\131",[148]="\186",[149]="\190",[150]="\179",[151]="\191",[152]="\188",[153]="\154",[154]="\156",[155]="\158",[156]="\157",[158]="\162",[159]="\159"},[210]={[144]="\165",[145]="\180"}
}

local nmdc = {
  [36] = "$",
  [124] = "|"
}

function Utf8ToAnsi(s)
  local a, j, r, b = 0, 0, ""
  for i = 1, s and s:len() or 0 do
    b = s:byte(i)
    if b < 128 then
      if nmdc[b] then
        r = r..nmdc[b]
      else
        r = r..string.char(b)
      end
    elseif a == 2 then
      a, j = a - 1, b
    elseif a == 1 then
      a, r = a - 1, r..utf8_decode[j][b]
    elseif b == 226 then
      a = 2
    elseif b == 194 or b == 208 or b == 209 or b == 210 then
      j, a = b, 1
    else
      r = r.."_"
    end
  end
  return r
end



И что нужно добавить, чтобы выводило с трёх сайтов?

замени на этот

Код
-- Общие настройки
sBotName = ""    -- Имя бота. Если "" то имя основного бота хаба.
bTimer = 1    -- Выдача по таймеру (в минутах).
AntiFl = 50    -- Если в чате было написано столько или более сообщений за время таймера, то новости не будут выданы.
StartDay = 3 -- С какого часа до полуночи скрипт будет выдавать новости.
sAddr = {
     {"http://xox.uz/rss.xml","windows-1251","1"},
     {"http://kids.xox.uz/engine/rss.php","windows-1251","2"},
     {"http://news.olam.uz/rss/all.rss","windows-1251","3"},
      }
---------------------------

function OnStartup()
    if sBotName == "" then sBotName = SetMan.GetString(21) end
    tmr = TmrMan.AddTimer(bTimer*60000)
    sMsg1,sMsg2,sOldDesc1,sOldDesc2,n = "","","","",0
end

function ChatArrival()
    n = n+1
    collectgarbage("collect")
end

function OnTimer(tmr)
    local hour = tonumber(os.date("%H"))
    if (n <= AntiFl) and (hour >= StartDay) then
        http = require("socket.http")
        assert(http,"Ошибка загрузки библиотеки socket.http. Проверьте наличие файлов необходимых библиотек.")
        http.TIMEOUT = 3    
        for i in pairs(sAddr) do
            local msg = http.request(sAddr[i][1])
            if msg then
                if (sAddr[i][3]) == "1" then
                    _,_,Link,Description = string.find(msg,"<item>.-<link>(.-)</link>.-<description>(.-)</p.-</item>(.*)")
                    if Link and Description then
                        sMsg = Description
                        if Description == sOldDesc1 then sMsg1 = ""
                            else
                            sOldDesc1 = Description
                            RepChars()
                            if (sAddr[i][2]) == "UTF-8" then sMsg = Utf8ToAnsi(sMsg) end
                            sMsg1 = "RSS    "..sMsg.."\n\t\tПодробности: "..Link
                        end
                    end
                end
                if (sAddr[i][3]) == "2" then
                    _,_,Link,Description = string.find(msg,"<item>.-<link>(.-)</link>.-<description>(.-)</description>.-</item>(.*)")    
                    if Link and Description then
                        sMsg = Description
                        if Description == sOldDesc2 then sMsg2 = ""
                            else
                            sOldDesc2 = Description
                            RepChars()
                            if (sAddr[i][2]) == "UTF-8" then sMsg = Utf8ToAnsi(sMsg) end
                            sMsg2 = "RSS    "..sMsg.."\n\t\tПодробности: "..Link  
                        end
                
                    end
                end
                if (sAddr[i][3]) == "3" then
                        _,_,Link,Description = string.find(msg,"<item>.-<link>(.-)</link>.-<description>(.-)</description>.-</item>(.*)")    
                    if Link and Description then
                        sMsg = Description
                        if Description == sOldDesc3 then sMsg3 = ""
                            else
                            sOldDesc3 = Description
                            RepChars()
                            if (sAddr[i][2]) == "UTF-8" then sMsg = Utf8ToAnsi(sMsg) end
                            sMsg3 = "RSS    "..sMsg.."\n\t\tПодробности: "..Link  
                        end
                
                    end
                end

            end
        end
        if sMsg1 ~= "" or sMsg2 ~= "" or sMsg3 ~= "" then
            if sMsg1 ~= "" and sMsg2 == "" and sMsg3 == ""  then    sMsg1 = "\n\n"..sMsg1.."\n"    end
            if sMsg2 ~= "" and sMsg1 == "" and sMsg3 == ""   then    sMsg2 = "\n\n"..sMsg2.."\n" end
            if sMsg3 ~= "" and sMsg1 == "" and sMsg2 == ""   then    sMsg2 = "\n\n"..sMsg3.."\n" end

            if sMsg1 ~= "" and sMsg2 ~= "" and sMsg3 ~= ""  then    
                sMsg1 = "\n"..sMsg1.."\n"
                sMsg2 = "\n"..sMsg2.."\n"
                     sMsg3 = "\n"..sMsg3.."\n"
            end
            Core.SendToAll("<"..sBotName..">"..sMsg1..sMsg2..sMsg3)
            sMsg1 = ""
            sMsg2 = ""
                sMsg3 = ""

        end
    end
    n = 0
    collectgarbage("collect") return string.format("%-.2f Kb.",collectgarbage("count"))
end

function RepChars()
    sMsg = string.gsub (sMsg, "__g", "ig")
    sMsg = string.gsub (sMsg, ("%[b%]"), " ")
    sMsg = string.gsub (sMsg, ("%[/b%]"), "  ")
    sMsg = string.gsub (sMsg, "<br>", "\r\n\t")
    sMsg = string.gsub (sMsg, "<br />", "\r\n\t")
    sMsg = string.gsub (sMsg, "<", "<")
    sMsg = string.gsub (sMsg, ">", ">")
    sMsg = string.gsub (sMsg, "&quot;", string.char (34))
    sMsg = string.gsub (sMsg, "&", "")
    sMsg = string.gsub (sMsg, " ", " ")
    sMsg = string.gsub (sMsg, "nbsp;", " ")
    sMsg = string.gsub (sMsg, "$", "$")
    sMsg = string.gsub (sMsg, "'", "`")
    sMsg = string.gsub (sMsg, "'", "`")
    sMsg = string.gsub (sMsg, "|", "")
    sMsg = string.gsub (sMsg, "|", "")
    sMsg = string.gsub (sMsg, "<!%[CDATA%[", "")
    sMsg = string.gsub (sMsg, "%]%]>", "")
    sMsg = string.gsub (sMsg, "<a target=\"_blank\" href=", "")
    sMsg = string.gsub (sMsg, ">paparazzi.ru</a>", " ")
    sMsg = string.gsub (sMsg, "<strong>", "")
    sMsg = string.gsub (sMsg, "</strong>", "")
    sMsg = string.gsub (sMsg, "- <a href=", "")
    sMsg = string.gsub (sMsg, "target=\"_blank\">", " ")
    sMsg = string.gsub (sMsg, "</a> –", "")
    sMsg = string.gsub (sMsg, "<p>","")
end

local utf8_decode={
  [128]={[147]="\150",[148]="\151",[152]="\145",[153]="\146",[154]="\130",[156]="\147",[157]="\148",[158]="\132",[160]="\134",[161]="\135",[162]="\149",[166]="\133",[176]="\137",[185]="\139",[186]="\155"},
  [130]={[172]="\136"},
  [132]={[150]="\185",[162]="\153"},
  [194]={[152]="\152",[160]="\160",[164]="\164",[166]="\166",[167]="\167",[169]="\169",[171]="\171",[172]="\172",[173]="\173",[174]="\174",[176]="\176",[177]="\177",[181]="\181",[182]="\182",[183]="\183",[187]="\187"},
  [208]={[129]="\168",[130]="\128",[131]="\129",[132]="\170",[133]="\189",[134]="\178",[135]="\175",[136]="\163",[137]="\138",[138]="\140",[139]="\142",[140]="\141",[143]="\143",[144]="\192",[145]="\193",[146]="\194",[147]="\195",[148]="\196",
    [149]="\197",[150]="\198",[151]="\199",[152]="\200",[153]="\201",[154]="\202",[155]="\203",[156]="\204",[157]="\205",[158]="\206",[159]="\207",[160]="\208",[161]="\209",[162]="\210",[163]="\211",[164]="\212",[165]="\213",[166]="\214",
    [167]="\215",[168]="\216",[169]="\217",[170]="\218",[171]="\219",[172]="\220",[173]="\221",[174]="\222",[175]="\223",[176]="\224",[177]="\225",[178]="\226",[179]="\227",[180]="\228",[181]="\229",[182]="\230",[183]="\231",[184]="\232",
    [185]="\233",[186]="\234",[187]="\235",[188]="\236",[189]="\237",[190]="\238",[191]="\239"},
  [209]={[128]="\240",[129]="\241",[130]="\242",[131]="\243",[132]="\244",[133]="\245",[134]="\246",[135]="\247",[136]="\248",[137]="\249",[138]="\250",[139]="\251",[140]="\252",[141]="\253",[142]="\254",[143]="\255",[144]="\161",[145]="\184",
    [146]="\144",[147]="\131",[148]="\186",[149]="\190",[150]="\179",[151]="\191",[152]="\188",[153]="\154",[154]="\156",[155]="\158",[156]="\157",[158]="\162",[159]="\159"},[210]={[144]="\165",[145]="\180"}
}

local nmdc = {
  [36] = "$",
  [124] = "|"
}

function Utf8ToAnsi(s)
  local a, j, r, b = 0, 0, ""
  for i = 1, s and s:len() or 0 do
    b = s:byte(i)
    if b < 128 then
      if nmdc[b] then
        r = r..nmdc[b]
      else
        r = r..string.char(b)
      end
    elseif a == 2 then
      a, j = a - 1, b
    elseif a == 1 then
      a, r = a - 1, r..utf8_decode[j][b]
    elseif b == 226 then
      a = 2
    elseif b == 194 or b == 208 or b == 209 or b == 210 then
      j, a = b, 1
    else
      r = r.."_"
    end
  end
  return r
end



Цитата(Alex Dancer @ 16.10.2012, 17:28) *
что-то я не понял, а что менять-то в 45 строке???

Вот мой скрипт

Код
--[[    Название скрипта: NewsMix
    Автор: Tsd (Рига, Латвия)
    Версия скрипта: 1.0
    Версия API: API2
    Описание скрипта: Скрипт выводит в чат по таймеру новости с двух новостных порталов в случае, если:
    1. В чате написано сообщений меньше, чем в настройках.
    2. Дневное время суток (ночью скрипт молчит, чтобы не флудить в чате).
    3. Новость на сайте изменилась.
    Если не нужны новости с Латвийского портала - просто задокумментируйте строку в таблице sAddr или измените на другой портал по аналогии.
    (в этом случае необходимо изменить также строку 45).
]]

    -- Общие настройки
sBotName = ""        -- Имя бота. Если "" то имя основного бота хаба.
bTimer = 1        -- Выдача по таймеру (в минутах).
AntiFl = 50        -- Если в чате было написано столько или более сообщений за время таймера, то новости не будут выданы.
StartDay = 7        -- С какого часа до полуночи скрипт будет выдавать новости.
sAddr = {
    {"http://xox.uz/rss.xml","windows-1251","1"},
    {"http://news.olam.uz/rss/all.rss/","windows-1251","2"},
}
---------------------------

function OnStartup()
    if sBotName == "" then sBotName = SetMan.GetString(21) end
    tmr = TmrMan.AddTimer(bTimer*60000)
    sMsg1,sMsg2,sOldDesc1,sOldDesc2,n = "","","","",0
end

function ChatArrival()
    n = n+1
    collectgarbage("collect")
end

function OnTimer(tmr)
    local hour = tonumber(os.date("%H"))
    if (n <= AntiFl) and (hour >= StartDay) then
        http = require("socket.http")
        assert(http,"Ошибка загрузки библиотеки socket.http. Проверьте наличие файлов необходимых библиотек.")
        http.TIMEOUT = 3    
        for i in pairs(sAddr) do
            local msg = http.request(sAddr[i][1])
            if msg then
                if (sAddr[i][3]) == "1" then
                    _,_,Link,Description = string.find(msg,"<item>.-<link>(.-)</link>.-<description>(.-)</p.-</item>(.*)")
                    if Link and Description then
                        sMsg = Description
                        if Description == sOldDesc1 then sMsg1 = ""
                            else
                            sOldDesc1 = Description
                            RepChars()
                            if (sAddr[i][2]) == "UTF-8" then sMsg = Utf8ToAnsi(sMsg) end
                            sMsg1 = "•••    "..sMsg.."\n\t\tПодробнее: "..Link
                        end
                    end
                end
                if (sAddr[i][3]) == "2" then
                    _,_,Link,Description = string.find(msg,"<item>.-<link>(.-)</link>.-<description>(.-)</description>.-</item>(.*)")    
                    if Link and Description then
                        sMsg = Description
                        if Description == sOldDesc2 then sMsg2 = ""
                            else
                            sOldDesc2 = Description
                            RepChars()
                            if (sAddr[i][2]) == "UTF-8" then sMsg = Utf8ToAnsi(sMsg) end
                            sMsg2 = "•••    "..sMsg.."\n\t\tПодробнее: "..Link  
                        end
                
                    end
                end
            end
        end
        if sMsg1 ~= "" or sMsg2 ~= "" then
            if sMsg1 ~= "" and sMsg2 == "" then    sMsg1 = "\n\n"..sMsg1.."\n"   end
            if sMsg2 ~= "" and sMsg1 == "" then    sMsg2 = "\n\n"..sMsg2.."\n"   end
            if sMsg1 ~= "" and sMsg2 ~= "" then    
                sMsg1 = "\n\n"..sMsg1.."\n"
                sMsg2 = "\n"..sMsg2.."\n"
            end
            Core.SendToAll("<"..sBotName..">"..sMsg1..sMsg2)
            sMsg1 = ""
            sMsg2 = ""
        end
    end
    n = 0
    collectgarbage("collect") return string.format("%-.2f Kb.",collectgarbage("count"))
end

function RepChars()
    sMsg = string.gsub (sMsg, "__g", "ig")
    sMsg = string.gsub (sMsg, ("%[b%]"), " ")
    sMsg = string.gsub (sMsg, ("%[/b%]"), "  ")
    sMsg = string.gsub (sMsg, "<br>", "\r\n\t")
    sMsg = string.gsub (sMsg, "<br />", "\r\n\t")
    sMsg = string.gsub (sMsg, "<", "<")
    sMsg = string.gsub (sMsg, ">", ">")
    sMsg = string.gsub (sMsg, "&quot;", string.char (34))
    sMsg = string.gsub (sMsg, "&", "")
    sMsg = string.gsub (sMsg, " ", " ")
    sMsg = string.gsub (sMsg, "nbsp;", " ")
    sMsg = string.gsub (sMsg, "$", "$")
    sMsg = string.gsub (sMsg, "'", "`")
    sMsg = string.gsub (sMsg, "'", "`")
    sMsg = string.gsub (sMsg, "|", "")
    sMsg = string.gsub (sMsg, "|", "")
    sMsg = string.gsub (sMsg, "<!%[CDATA%[", "")
    sMsg = string.gsub (sMsg, "%]%]>", "")
    sMsg = string.gsub (sMsg, "<a target=\"_blank\" href=", "")
    sMsg = string.gsub (sMsg, ">paparazzi.ru</a>", " ")
    sMsg = string.gsub (sMsg, "<strong>", "")
    sMsg = string.gsub (sMsg, "</strong>", "")
    sMsg = string.gsub (sMsg, "- <a href=", "")
    sMsg = string.gsub (sMsg, "target=\"_blank\">", " ")
    sMsg = string.gsub (sMsg, "</a> –", "")
    sMsg = string.gsub (sMsg, "<p>","")
end

local utf8_decode={
  [128]={[147]="\150",[148]="\151",[152]="\145",[153]="\146",[154]="\130",[156]="\147",[157]="\148",[158]="\132",[160]="\134",[161]="\135",[162]="\149",[166]="\133",[176]="\137",[185]="\139",[186]="\155"},
  [130]={[172]="\136"},
  [132]={[150]="\185",[162]="\153"},
  [194]={[152]="\152",[160]="\160",[164]="\164",[166]="\166",[167]="\167",[169]="\169",[171]="\171",[172]="\172",[173]="\173",[174]="\174",[176]="\176",[177]="\177",[181]="\181",[182]="\182",[183]="\183",[187]="\187"},
  [208]={[129]="\168",[130]="\128",[131]="\129",[132]="\170",[133]="\189",[134]="\178",[135]="\175",[136]="\163",[137]="\138",[138]="\140",[139]="\142",[140]="\141",[143]="\143",[144]="\192",[145]="\193",[146]="\194",[147]="\195",[148]="\196",
    [149]="\197",[150]="\198",[151]="\199",[152]="\200",[153]="\201",[154]="\202",[155]="\203",[156]="\204",[157]="\205",[158]="\206",[159]="\207",[160]="\208",[161]="\209",[162]="\210",[163]="\211",[164]="\212",[165]="\213",[166]="\214",
    [167]="\215",[168]="\216",[169]="\217",[170]="\218",[171]="\219",[172]="\220",[173]="\221",[174]="\222",[175]="\223",[176]="\224",[177]="\225",[178]="\226",[179]="\227",[180]="\228",[181]="\229",[182]="\230",[183]="\231",[184]="\232",
    [185]="\233",[186]="\234",[187]="\235",[188]="\236",[189]="\237",[190]="\238",[191]="\239"},
  [209]={[128]="\240",[129]="\241",[130]="\242",[131]="\243",[132]="\244",[133]="\245",[134]="\246",[135]="\247",[136]="\248",[137]="\249",[138]="\250",[139]="\251",[140]="\252",[141]="\253",[142]="\254",[143]="\255",[144]="\161",[145]="\184",
    [146]="\144",[147]="\131",[148]="\186",[149]="\190",[150]="\179",[151]="\191",[152]="\188",[153]="\154",[154]="\156",[155]="\158",[156]="\157",[158]="\162",[159]="\159"},[210]={[144]="\165",[145]="\180"}
}

local nmdc = {
  [36] = "$",
  [124] = "|"
}

function Utf8ToAnsi(s)
  local a, j, r, b = 0, 0, ""
  for i = 1, s and s:len() or 0 do
    b = s:byte(i)
    if b < 128 then
      if nmdc[b] then
        r = r..nmdc[b]
      else
        r = r..string.char(b)
      end
    elseif a == 2 then
      a, j = a - 1, b
    elseif a == 1 then
      a, r = a - 1, r..utf8_decode[j][b]
    elseif b == 226 then
      a = 2
    elseif b == 194 or b == 208 or b == 209 or b == 210 then
      j, a = b, 1
    else
      r = r.."_"
    end
  end
  return r
end



И что нужно добавить, чтобы выводило с трёх сайтов?

замени на этот

Код
-- Общие настройки
sBotName = ""    -- Имя бота. Если "" то имя основного бота хаба.
bTimer = 1    -- Выдача по таймеру (в минутах).
AntiFl = 50    -- Если в чате было написано столько или более сообщений за время таймера, то новости не будут выданы.
StartDay = 3 -- С какого часа до полуночи скрипт будет выдавать новости.
sAddr = {
     {"http://xox.uz/rss.xml","windows-1251","1"},
     {"http://kids.xox.uz/engine/rss.php","windows-1251","2"},
     {"http://news.olam.uz/rss/all.rss","windows-1251","3"},
      }
---------------------------

function OnStartup()
    if sBotName == "" then sBotName = SetMan.GetString(21) end
    tmr = TmrMan.AddTimer(bTimer*60000)
    sMsg1,sMsg2,sOldDesc1,sOldDesc2,n = "","","","",0
end

function ChatArrival()
    n = n+1
    collectgarbage("collect")
end

function OnTimer(tmr)
    local hour = tonumber(os.date("%H"))
    if (n <= AntiFl) and (hour >= StartDay) then
        http = require("socket.http")
        assert(http,"Ошибка загрузки библиотеки socket.http. Проверьте наличие файлов необходимых библиотек.")
        http.TIMEOUT = 3    
        for i in pairs(sAddr) do
            local msg = http.request(sAddr[i][1])
            if msg then
                if (sAddr[i][3]) == "1" then
                    _,_,Link,Description = string.find(msg,"<item>.-<link>(.-)</link>.-<description>(.-)</p.-</item>(.*)")
                    if Link and Description then
                        sMsg = Description
                        if Description == sOldDesc1 then sMsg1 = ""
                            else
                            sOldDesc1 = Description
                            RepChars()
                            if (sAddr[i][2]) == "UTF-8" then sMsg = Utf8ToAnsi(sMsg) end
                            sMsg1 = "RSS    "..sMsg.."\n\t\tПодробности: "..Link
                        end
                    end
                end
                if (sAddr[i][3]) == "2" then
                    _,_,Link,Description = string.find(msg,"<item>.-<link>(.-)</link>.-<description>(.-)</description>.-</item>(.*)")    
                    if Link and Description then
                        sMsg = Description
                        if Description == sOldDesc2 then sMsg2 = ""
                            else
                            sOldDesc2 = Description
                            RepChars()
                            if (sAddr[i][2]) == "UTF-8" then sMsg = Utf8ToAnsi(sMsg) end
                            sMsg2 = "RSS    "..sMsg.."\n\t\tПодробности: "..Link  
                        end
                
                    end
                end
                     if (sAddr[i][3]) == "3" then
                    _,_,Link,Description = string.find(msg,"<item>.-<link>(.-)</link>.-<description>(.-)</description>.-</item>(.*)")    
                    if Link and Description then
                        sMsg = Description
                        if Description == sOldDesc3 then sMsg3 = ""
                            else
                            sOldDesc3 = Description
                            RepChars()
                            if (sAddr[i][2]) == "UTF-8" then sMsg = Utf8ToAnsi(sMsg) end
                            sMsg3 = "RSS    "..sMsg.."\n\t\tПодробности: "..Link  
                        end
                
                    end
                end

            end
        end
        if sMsg1 ~= "" or sMsg2 ~= "" or sMsg3 ~= "" then
            if sMsg1 ~= "" and sMsg2 == "" and sMsg3 == ""  then    sMsg1 = "\n\n"..sMsg1.."\n"    end
            if sMsg2 ~= "" and sMsg1 == "" and sMsg3 == ""   then     sMsg2 = "\n\n"..sMsg2.."\n" end
                        if sMsg3 ~= "" and sMsg1 == "" and sMsg2 == ""   then     sMsg3 = "\n\n"..sMsg3.."\n" end

            if sMsg1 ~= "" and sMsg2 ~= "" and sMsg3 ~= ""  then    
                sMsg1 = "\n"..sMsg1.."\n"
                sMsg2 = "\n"..sMsg2.."\n"
                                sMsg3 = "\n"..sMsg3.."\n"
            end
            Core.SendToAll("<"..sBotName..">"..sMsg1..sMsg2..sMsg3)
            sMsg1 = ""
            sMsg2 = ""
                sMsg3 = ""

        end
    end
    n = 0
    collectgarbage("collect") return string.format("%-.2f Kb.",collectgarbage("count"))
end

function RepChars()
    sMsg = string.gsub (sMsg, "__g", "ig")
    sMsg = string.gsub (sMsg, ("%[b%]"), " ")
    sMsg = string.gsub (sMsg, ("%[/b%]"), "  ")
    sMsg = string.gsub (sMsg, "<br>", "\r\n\t")
    sMsg = string.gsub (sMsg, "<br />", "\r\n\t")
    sMsg = string.gsub (sMsg, "<", "<")
    sMsg = string.gsub (sMsg, ">", ">")
    sMsg = string.gsub (sMsg, "&quot;", string.char (34))
    sMsg = string.gsub (sMsg, "&", "")
    sMsg = string.gsub (sMsg, " ", " ")
    sMsg = string.gsub (sMsg, "nbsp;", " ")
    sMsg = string.gsub (sMsg, "$", "$")
    sMsg = string.gsub (sMsg, "'", "`")
    sMsg = string.gsub (sMsg, "'", "`")
    sMsg = string.gsub (sMsg, "|", "")
    sMsg = string.gsub (sMsg, "|", "")
    sMsg = string.gsub (sMsg, "<!%[CDATA%[", "")
    sMsg = string.gsub (sMsg, "%]%]>", "")
    sMsg = string.gsub (sMsg, "<a target=\"_blank\" href=", "")
    sMsg = string.gsub (sMsg, ">paparazzi.ru</a>", " ")
    sMsg = string.gsub (sMsg, "<strong>", "")
    sMsg = string.gsub (sMsg, "</strong>", "")
    sMsg = string.gsub (sMsg, "- <a href=", "")
    sMsg = string.gsub (sMsg, "target=\"_blank\">", " ")
    sMsg = string.gsub (sMsg, "</a> –", "")
    sMsg = string.gsub (sMsg, "<p>","")
end

local utf8_decode={
  [128]={[147]="\150",[148]="\151",[152]="\145",[153]="\146",[154]="\130",[156]="\147",[157]="\148",[158]="\132",[160]="\134",[161]="\135",[162]="\149",[166]="\133",[176]="\137",[185]="\139",[186]="\155"},
  [130]={[172]="\136"},
  [132]={[150]="\185",[162]="\153"},
  [194]={[152]="\152",[160]="\160",[164]="\164",[166]="\166",[167]="\167",[169]="\169",[171]="\171",[172]="\172",[173]="\173",[174]="\174",[176]="\176",[177]="\177",[181]="\181",[182]="\182",[183]="\183",[187]="\187"},
  [208]={[129]="\168",[130]="\128",[131]="\129",[132]="\170",[133]="\189",[134]="\178",[135]="\175",[136]="\163",[137]="\138",[138]="\140",[139]="\142",[140]="\141",[143]="\143",[144]="\192",[145]="\193",[146]="\194",[147]="\195",[148]="\196",
    [149]="\197",[150]="\198",[151]="\199",[152]="\200",[153]="\201",[154]="\202",[155]="\203",[156]="\204",[157]="\205",[158]="\206",[159]="\207",[160]="\208",[161]="\209",[162]="\210",[163]="\211",[164]="\212",[165]="\213",[166]="\214",
    [167]="\215",[168]="\216",[169]="\217",[170]="\218",[171]="\219",[172]="\220",[173]="\221",[174]="\222",[175]="\223",[176]="\224",[177]="\225",[178]="\226",[179]="\227",[180]="\228",[181]="\229",[182]="\230",[183]="\231",[184]="\232",
    [185]="\233",[186]="\234",[187]="\235",[188]="\236",[189]="\237",[190]="\238",[191]="\239"},
  [209]={[128]="\240",[129]="\241",[130]="\242",[131]="\243",[132]="\244",[133]="\245",[134]="\246",[135]="\247",[136]="\248",[137]="\249",[138]="\250",[139]="\251",[140]="\252",[141]="\253",[142]="\254",[143]="\255",[144]="\161",[145]="\184",
    [146]="\144",[147]="\131",[148]="\186",[149]="\190",[150]="\179",[151]="\191",[152]="\188",[153]="\154",[154]="\156",[155]="\158",[156]="\157",[158]="\162",[159]="\159"},[210]={[144]="\165",[145]="\180"}
}

local nmdc = {
  [36] = "$",
  [124] = "|"
}

function Utf8ToAnsi(s)
  local a, j, r, b = 0, 0, ""
  for i = 1, s and s:len() or 0 do
    b = s:byte(i)
    if b < 128 then
      if nmdc[b] then
        r = r..nmdc[b]
      else
        r = r..string.char(b)
      end
    elseif a == 2 then
      a, j = a - 1, b
    elseif a == 1 then
      a, r = a - 1, r..utf8_decode[j][b]
    elseif b == 226 then
      a = 2
    elseif b == 194 or b == 208 or b == 209 or b == 210 then
      j, a = b, 1
    else
      r = r.."_"
    end
  end
  return r
end

Go to the top of the page
+Quote Post
Артём
сообщение 19.10.2012, 8:53
Сообщение #12


Наруто на аваторке
***********

Группа: Пользователи
Сообщений: 2 606
Регистрация: 11.10.2008
Из: Харькова
Пользователь №: 771
Спасибо сказали: 774 раза




nafig, шёл бы ты отсюда, бесполезный флудераст.
Go to the top of the page
+Quote Post
Tsd
сообщение 19.10.2012, 9:34
Сообщение #13


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

Группа: Пользователи
Сообщений: 176
Регистрация: 11.7.2008
Пользователь №: 171
Спасибо сказали: 182 раза




To nafig
Тогда строку
sMsg1,sMsg2,sOldDesc1,sOldDesc2,n = "","","","",0
нужно изменить на
sMsg1,sMsg2,sMsg3,sOldDesc1,sOldDesc2,sOldDesc3,n = "","","","","","",0
Go to the top of the page
+Quote Post
nafig
сообщение 19.10.2012, 10:24
Сообщение #14


Активный участник
***

Группа: Пользователи
Сообщений: 62
Регистрация: 23.1.2011
Пользователь №: 8 626
Спасибо сказали: 4 раза




Цитата(Tsd @ 19.10.2012, 9:34) *
To nafig
Тогда в строку
sMsg1,sMsg2,sOldDesc1,sOldDesc2,n = "","","","",0
нужно изменить на
sMsg1,sMsg2,sMsg3,sOldDesc1,sOldDesc2,sOldDesc3,n = "","","","","","",0


Угу. Я в курсе.
Он наверное и сам бы понял наверное.
хотя без неё тоже пашет. но не все RSS ленты.
Этот скрипт не всё поддерживает. Вот дапустим вот этот RSS который намного полезнее на хабе не тянет http://www.overclockers.ru/rss/
Go to the top of the page
+Quote Post
Tsd
сообщение 19.10.2012, 10:33
Сообщение #15


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

Группа: Пользователи
Сообщений: 176
Регистрация: 11.7.2008
Пользователь №: 171
Спасибо сказали: 182 раза




Цитата(nafig @ 19.10.2012, 10:24) *
Угу. Я в курсе.
Он наверное и сам бы понял наверное.
хотя без неё тоже пашет. но не все RSS ленты.
Этот скрипт не всё поддерживает. Вот дапустим вот этот RSS который намного полезнее на хабе не тянет http://www.overclockers.ru/rss/

Всё можно сделать, меняйте строку захвата.
К примеру адрес http://www.overclockers.ru/rss/softnews.rss (Только Новости Software )
Go to the top of the page
+Quote Post
nafig
сообщение 19.10.2012, 11:09
Сообщение #16


Активный участник
***

Группа: Пользователи
Сообщений: 62
Регистрация: 23.1.2011
Пользователь №: 8 626
Спасибо сказали: 4 раза




Цитата(Tsd @ 19.10.2012, 10:33) *
Всё можно сделать, меняйте строку захвата.
К примеру адрес http://www.overclockers.ru/rss/softnews.rss (Только Новости Software )

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

Аппаратные средства

•••Microsoft полна решимости развивать своё аппаратное обеспечение•••
http://www.overclockers.ru/hardnews/50176/...espechenie.html

Даже если этому будут не рады партнёры компании.
Fri, 19 Oct 2012 11:16:31 +0400
Go to the top of the page
+Quote Post
Tsd
сообщение 19.10.2012, 12:10
Сообщение #17


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

Группа: Пользователи
Сообщений: 176
Регистрация: 11.7.2008
Пользователь №: 171
Спасибо сказали: 182 раза




Цитата(nafig @ 19.10.2012, 11:09) *
Пишу же что нет. Скрипт вообще молчит и не пытается ничё делать. Там вывод новости с зоголовком а не содержимым статьи.
Вот так короче через немного другой скрипт выглядит

Аппаратные средства

•••Microsoft полна решимости развивать своё аппаратное обеспечение•••
http://www.overclockers.ru/hardnews/50176/...espechenie.html

Даже если этому будут не рады партнёры компании.
Fri, 19 Oct 2012 11:16:31 +0400

И в скрипте указан этот адрес? http://www.overclockers.ru/rss/hardnews.rss
Go to the top of the page
+Quote Post
nafig
сообщение 19.10.2012, 14:31
Сообщение #18


Активный участник
***

Группа: Пользователи
Сообщений: 62
Регистрация: 23.1.2011
Пользователь №: 8 626
Спасибо сказали: 4 раза




Цитата(Tsd @ 19.10.2012, 12:10) *
И в скрипте указан этот адрес? http://www.overclockers.ru/rss/hardnews.rss


угу

и скинопоиска тоже чёт марзянка. хотя у тя вскрипте всё прописано вроде


RSS В продаже появился Blu-Ray <a href='http://www.kinopoisk.ru/film/712758/buy/'><b>Пинк Флойд: История альбома Wish You Were Here</b></a>.<br /><b>звук:</b> Английский DTS-HD Master audio<br>Английский Dolby Digital 2.0
- <br /><b>субтитры:</b> Английский / Немецкий / Испанский / Французский
- <br /><b>региональный код:</b> А, B, С
- <br /><b>изображение:</b> 1080p High Definition 16:9
- <br /><b>доп. материалы:</b> Material previously unseen on TV
- <br /><b>упаковка:</b> Keep case
- <br /><b>дистрибьютор:</b> Волтэкс-инвест
- <br /><b>слои:</b> 2 слоя
- <br><br><br><a href='http://www.kinopoisk.ru/film/712758/buy/'><b>Подробнее...</b></a>
Подробности: http://www.kinopoisk.ru/film/712758/buy/RSS
На КиноПоиске появился новый саундтрек к фильму <a href='http://www.kinopoisk.ru/film/568550/tracks/'><b>Белоснежка и охотник</b></a>.<br><br><br><a href='http://www.kinopoisk.ru/film/568550/tracks/'><b>Подробнее...</b></a>
Подробности: http://www.kinopoisk.ru/film/568550/tracks/
Go to the top of the page
+Quote Post
Alex Dancer
сообщение 20.10.2012, 0:13
Сообщение #19


Начинающий
*

Группа: Пользователи
Сообщений: 16
Регистрация: 13.10.2012
Пользователь №: 10 908
Спасибо сказали: 0 раз




Народ отошёл от темы, да и фиг бы с ним... Но до меня так и не дошло, где и что поменять, чтоб скрипт парсил с нужных мне сайтов... Хоть я и не Штирлиц... Может кто из гуру скрипт-райтеров выложить рабочий код с моими ссылками?

P.S. для тех кто не понял про Штирлица, вспомните анекдот...
Go to the top of the page
+Quote Post
Ksan
сообщение 20.10.2012, 1:33
Сообщение #20


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

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




Про Штирлица анекдотов миллион.
Цитата
Но до меня так и не дошло, где и что поменять, чтоб скрипт парсил с нужных мне сайтов..
Практически для каждого сайта приходится писать свой код захвата, особенно, если захват производится не из исходника RSS. Так что вникайте в логику захвата текста со страниц и сможете сами подгонять скрипт под любой сайт.
Go to the top of the page
+Quote Post

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

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts Topic has attachmentsNewsMix
Скрипт выводит в чат по таймеру новости с двух новостных порталов
0 Vizunchik 5 569 28.10.2012, 16:18 Посл. сообщение: Vizunchik

 



RSS Сейчас: 27.11.2024, 1:11