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

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

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

Автор: Tsd 20.9.2012, 17:00

Название скрипта: 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
 

Автор: Booth 9.10.2012, 16:28

А у меня проблема с этим скриптом на PtokaX 0.4.2.0 API 2. Библиотеки все стоят.

Цитата
\NewsMix_1.lua:40: attempt to index global 'http' (a boolean value)

Как можно решить проблему? Спасибо!

Автор: Ksan 9.10.2012, 17:15

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

Автор: Booth 9.10.2012, 18:26

Цитата(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 не нашёл. В логах только это ошибка, когда по времени скрипт должен грузить с инета.

Автор: Ksan 9.10.2012, 19:21

Booth, библиотеку берите http://mydc.ru/topic2951.html?view=findpost&p=25385
Не обращайте внимания, что она для Русхаба, для вашей Птоки тоже пойдёт.
Та библиотека, что у вас сейчас стоит, она годится для более ранних версий Птоки, но не для вашей.

Автор: Alex Dancer 15.10.2012, 2:05

А у меня не получилось запустить этот скрипт. Ставил библиотеку http://mydc.ru/topic2951.html?view=findpost&p=25385 и http://mydc.ru/topic43.html, и всё равно ошибки.
На версии библиотек с первой ссылки лог такой:
] Нет синтаксических ошибок в файле скрипта News.lua
] Скрипт запущен.
потом ошибка:


и лог
] Синтаксис 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

Автор: Tsd 16.10.2012, 10:00

To Alex Dancer
1. Скрипт парсит только два сайта. Если вы меняете адреса сайтов, то при некорректном выводе информации необходимо так же поменять захват (строки 45 и 58). Последнее значение в адресах сайтов - это порядковый номер в таблице.
2. Насчет библиотек почитайте http://mydc.ru/topic19.html?view=findpost&p=44086. Постом выше можно скачать Ptokax 0.4.2.0 build 401 с Lua 5.1.5

Автор: Alex Dancer 16.10.2012, 17:28

Цитата(Tsd @ 16.10.2012, 12:00) *
To Alex Dancer
1. Скрипт парсит только два сайта. Если вы меняете адреса сайтов, то при некорректном выводе информации необходимо так же поменять захват (строки 45 и 58). Последнее значение в адресах сайтов - это порядковый номер в таблице.
2. Насчет библиотек почитайте http://mydc.ru/topic19.html?view=findpost&p=44086. Постом выше можно скачать 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



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

Автор: Tsd 17.10.2012, 18:14

Цитата(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



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

Разобраться как работает скрипт в первом посте. Прикрутить можно хоть сто сайтов.

Автор: Артём 17.10.2012, 19:09

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

Автор: nafig 19.10.2012, 7:20

Цитата(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


Автор: Артём 19.10.2012, 8:53

nafig, шёл бы ты отсюда, бесполезный флудераст.

Автор: Tsd 19.10.2012, 9:34

To nafig
Тогда строку
sMsg1,sMsg2,sOldDesc1,sOldDesc2,n = "","","","",0
нужно изменить на
sMsg1,sMsg2,sMsg3,sOldDesc1,sOldDesc2,sOldDesc3,n = "","","","","","",0

Автор: nafig 19.10.2012, 10:24

Цитата(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://mydc.ru/r/?http://www.overclockers.ru/rss/

Автор: Tsd 19.10.2012, 10:33

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

Всё можно сделать, меняйте строку захвата.
К примеру адрес http://mydc.ru/r/?http://www.overclockers.ru/rss/softnews.rss (Только Новости Software )

Автор: nafig 19.10.2012, 11:09

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

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

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

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

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

Автор: Tsd 19.10.2012, 12:10

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

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

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

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

И в скрипте указан этот адрес? http://mydc.ru/r/?http://www.overclockers.ru/rss/hardnews.rss

Автор: nafig 19.10.2012, 14:31

Цитата(Tsd @ 19.10.2012, 12:10) *
И в скрипте указан этот адрес? http://mydc.ru/r/?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://mydc.ru/r/?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://mydc.ru/r/?http://www.kinopoisk.ru/film/568550/tracks/

Автор: Alex Dancer 20.10.2012, 0:13

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

P.S. для тех кто не понял про Штирлица, вспомните анекдот...

Автор: Ksan 20.10.2012, 1:33

Про Штирлица анекдотов миллион.

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

Автор: Tsd 21.10.2012, 15:48

Цитата(Ksan @ 20.10.2012, 1:33) *
Про Штирлица анекдотов миллион.
Практически для каждого сайта приходится писать свой код захвата, особенно, если захват производится не из исходника RSS. Так что вникайте в логику захвата текста со страниц и сможете сами подгонять скрипт под любой сайт.

Добавлю: функция RepChars предназначена для удаления "морзянки".

Автор: nafig 23.10.2012, 9:58

Чуть чуть повникал вышло это.

http://mydc.ru/r/?http://radikal.ru/F/s017.radikal.ru/i426/1210/07/e0483d75264d.jpg.html

Морзянки нету кроме ссылки в начале. Так и не понял как этот дефект убрать.
А так поставил для теста ничего не меняя, и обнаружился глюк

http://mydc.ru/r/?http://radikal.ru/F/s001.radikal.ru/i193/1210/ea/dd6025cda042.jpg.html

Походу иногда этот Латвийский сайт требует немного другой вывод сообщения. Дату время и тд. и тп. Но впринципе этот глюк незначительный. С выходных вот только один раз выдал такое.