Страница 1 из 1

tvcountdown.tcl - Еще одно расписание выхода серий.

СообщениеДобавлено: 09 май 2014 13:23
tvrsh
Название: tvcountdown.tcl
Версия: 1.4
Автор: tvrsh
Описание: Скрипт показывает расписание выхода серий популярных сериалов с сайта http://tvcountdown.com/
Поддержка Suzi: Да
Пример работы:
# Найдено несколько сериалов
<tvrsh> !tvcd big
<@bionic> По вашему запросу 'big' найдено 8 сериалов.
<@bionic> "Big Bad World (2013)", "Big Brother (US)", "Big School", "Big Time Rush", "John Bishop's Big Year", ...
<@bionic> Уточните параметры поиска.

# Найден только один сериал, показ информации о нем
<tvrsh> !tvcd big bang
<@bionic> The Big Bang Theory
<@bionic> Airtime: 20:00:00(US/Eastern) on CBS. Status: Returning Series. Country: US. Runtime: 30 min.
<@bionic> S07E23 "The Gorilla Dissolution" airs 2d 21h 16m 3s ago (08 May 2014 20:00:00)
<@bionic> S07E22 "The Proton Transmogrification" airs 9d 21h 16m 3s ago (01 May 2014 20:00:00)
<@bionic> S07E24 "The Status Quo Combustion" airs in 4d 2h 43m 57s (15 May 2014 20:00:00)

Дополнительная информация: Возможно, есть некоторое расхождение во времени до следующей серии, так как я не учитывал разницу в часовых поясах.
Ссылка на скрипт: tvcountdown.tcl

К сообщению приложена версия скрипта с правками от Vertigo.
Использование кэша позволяет ускорить работу скрипта и минимизировать обращения к сайту.

Re: tvcountdown.tcl - Еще одно расписание выхода серий.

СообщениеДобавлено: 11 май 2014 14:42
Bart
tvrsh, спасибо за скрипт.

Некоторые недочеты есть:
1. При поиске неизвестного сериала пишет:
[20:47:15] Tcl error [::tvcountdown::tvcountdown_pub]: can't read "results": no such variable
2. Не пишет день недели, например: Tue 2014-04-22 06:00
3. И то, что долго выводит результат. Не знаю, исправимо это или нет...

Re: tvcountdown.tcl - Еще одно расписание выхода серий.

СообщениеДобавлено: 11 май 2014 17:23
tvrsh
Обновил скрипт. Смотри первый пост.

Re: tvcountdown.tcl - Еще одно расписание выхода серий.

СообщениеДобавлено: 15 май 2014 22:39
tvrsh
Еще немного обновил по ошибкам указанным тут: http://forum.egghelp.org/viewtopic.php?p=102812#102812

Re: tvcountdown.tcl - Еще одно расписание выхода серий.

СообщениеДобавлено: 18 май 2014 11:37
tvrsh
Обновил скрипт. Добавил опцию скрытия названий будущих серий. Настройки в конфиге:
        hidefuturetitles 1
        hidefuturetitlestext "\00304\002no spoilers!\00304\002"

Заменяет название серии на указанный текст.

Re: tvcountdown.tcl - Еще одно расписание выхода серий.

СообщениеДобавлено: 22 июн 2014 22:19
Bart
Да чтоб их...взяли сайт переделали.

Re: tvcountdown.tcl - Еще одно расписание выхода серий.

СообщениеДобавлено: 10 июл 2014 21:44
tvrsh
Обновил скрипт. Только пока не разобрался со временем показа следующей серии, из-за разных часовых поясов иногда не очень корректные результаты выдает.

Re: tvcountdown.tcl - Еще одно расписание выхода серий.

СообщениеДобавлено: 17 июл 2014 10:42
Bart
Нашлась ошибка.
[10:40] <~warlock> !tvcd Top Gear
[10:40] <&bot> По вашему запросу 'Top Gear' найдено 3 сериала.
[10:40] <&bot> Top Gear, Top Gear (US), Top Gear Australia, ...
[10:40] <&bot> Уточните параметры поиска.
[10:40] <~warlock> !tvcd Top Gear
[10:40] *bot* Запрос не чаще одного раза в 5 секунд.
[10:40] *bot* Подождите 1 секунду до следующего запроса.
[10:40] <~warlock> !tvcd Top Gear
[10:40] <&bot> По вашему запросу 'Top Gear' найдено 3 сериала.
[10:40] <&bot> Top Gear, Top Gear (US), Top Gear Australia, ...
[10:40] <&bot> Уточните параметры поиска.

[10:42] <~warlock> !с Once Upon a Time
[10:42] <&bot> По вашему запросу 'Once Upon a Time' найдено 2 сериала.
[10:42] <&bot> Once Upon a Time, Once Upon A Time In Wonderland, ...
[10:42] <&bot> Уточните параметры поиска.
[10:42] <~warlock> !с Once Upon a Time
[10:42] <&bot> По вашему запросу 'Once Upon a Time' найдено 2 сериала.
[10:42] <&bot> Once Upon a Time, Once Upon A Time In Wonderland, ...
[10:42] <&bot> Уточните параметры поиска.

Re: tvcountdown.tcl - Еще одно расписание выхода серий.

СообщениеДобавлено: 17 июл 2014 11:12
Vertigo
Bart писал(а):Нашлась ошибка.

Я бы не назвал это ошибкой. Скорее небольшая недоработка. Чтоб была возможность выбора нужного сериала, можно попробовать заменить часть процедуры в скрипте на следующую (до строчки set airtime ""; set status ""; set country ""; set runtime "";):
TCL: [ Скачать ] [ Скрыть ]
# Процедура обработки запроса.
proc ::tvcountdown::tvcountdown_proc {nick uhost hand chan text source} {
    variable tvcountdown

    if {[info exists tvcountdown(lasttime,$chan)] && [expr $tvcountdown(lasttime,$chan) + $tvcountdown(delay)] > [clock seconds]} {
        putserv "NOTICE $nick :$tvcountdown(color1)Запрос не чаще одного раза в $tvcountdown(color2)$tvcountdown(delay) $tvcountdown(color1)[lindex {. секунду секунды секунд} [::tvcountdown::tvcountdown_numgrp $tvcountdown(delay)]]."
        putserv "NOTICE $nick :$tvcountdown(color1)Подождите $tvcountdown(color3)[expr $tvcountdown(delay) - [expr [clock seconds] - $tvcountdown(lasttime,$chan)]] $tvcountdown(color1)[lindex {. секунду секунды секунд} [::tvcountdown::tvcountdown_numgrp [expr $tvcountdown(delay) - [expr [clock seconds] - $tvcountdown(lasttime,$chan)]]]] до следующего запроса."
        return 0
    }

    if {[string is space $text]} {
            putserv "PRIVMSG $chan :$tvcountdown(color2)$nick, $tvcountdown(color1)используй $tvcountdown(color3)$::lastbind $tvcountdown(color1)\[-номер\] $tvcountdown(color2)\<название сериала\>$tvcountdown(color1) для поиска.\003"
            return 0
    }

        if {[regexp -- {^\-(\d+)\s} $text - num]} {
                set text [regsub -- {^\-\d+\s} $text ""]
                set num [scan $num %d]
        } else {
                set num 0
        }

    ::http::config -urlencoding "utf-8" -useragent $tvcountdown(useragent)
    set tvcountdown_tok [::http::geturl "http://tvcountdown.com/" -timeout "15000"]
    set data [::http::data $tvcountdown_tok]
    ::http::cleanup $tvcountdown_tok
    putlog "\[tvcountdown\] $nick/$chan/$text"

    set results [list ]
    regsub -all -nocase -- {^.*?<ul id="listmenu" style="display:none;">} $data "" data
    regsub -all -nocase -- {<div id="content" class="fullcolumn">.*?$} $data "" data
    foreach {null link show} [regexp -all -inline -- {<a href="(.*?)">(.*?)</a>} $data] {
        if {[string match -nocase "*$text*" $show]} {
            lappend results $show|$link
        }
    }
   
    putlog $results
   
    if {[llength $results] == "0"} {
        putserv "PRIVMSG $chan :$tvcountdown(color1)По вашему запросу \'$tvcountdown(color2)$text$tvcountdown(color1)\' ничего не найдено.\003"
    } elseif {[llength $results] > "1" && $num == "0"} {
        set z_ 0
        foreach result $results {
            if {$z_ < $tvcountdown(searchlines)} {
                incr z_
                                lappend out "$tvcountdown(color1)\002\002${z_}. $tvcountdown(color2)[lindex [split $result "|"] 0]$tvcountdown(color1), "
            }
        }
        putserv "PRIVMSG $chan :$tvcountdown(color1)По вашему запросу \'$tvcountdown(color2)$text$tvcountdown(color1)\' [lindex {. найден найдено найдено} [::tvcountdown::tvcountdown_numgrp [llength $results]]] $tvcountdown(color2)[llength $results] $tvcountdown(color1)[lindex {. сериал сериала сериалов} [::tvcountdown::tvcountdown_numgrp [llength $results]]].\003"
        putserv "PRIVMSG $chan :[join $out ""]...\003"
        putserv "PRIVMSG $chan :$tvcountdown(color1)Уточните параметры поиска, добавив номер нужного результата.\003"
    } else {
                set total [llength $results]
                if {$num > $total || $num <= 0} {set num 1}
                if {$total > 1} {set pfx "\[$num\/$total\] :: "} else {set pfx ""}
        set tvcountdown_tok [::http::geturl "http://tvcountdown.com[lindex [split [lindex $results [expr $num - 1]] "|"] 1]" -timeout "15000"]  
        set data [::http::data $tvcountdown_tok]
        upvar #0 $tvcountdown_tok state
        foreach {name value} $state(meta) {
            if {[regexp -nocase ^location$ $name]} {
                set tvcountdown_tok [::http::geturl "$value" -timeout "15000"]  
                set data [::http::data $tvcountdown_tok]
            }
        }
        ::http::cleanup $tvcountdown_tok
        set data [string map {"&amp;" "&" "&nbsp;" " "} $data]
        set stitle ""
        regexp {<h2>(.*?)</h2>} $data "" stitle
        putserv "PRIVMSG $chan :${pfx}$tvcountdown(color3)\002$stitle\002\003"

Re: tvcountdown.tcl - Еще одно расписание выхода серий.

СообщениеДобавлено: 06 окт 2014 18:05
Vertigo
Сайт намедни снова изменил дизайн. На досуге попробовал восстановить работоспособность скрипта. Сайт теперь работает через https:// протокол, поэтому для работы необходим пакет tls.

Re: tvcountdown.tcl - Еще одно расписание выхода серий.

СообщениеДобавлено: 11 окт 2014 17:54
tvrsh
Vertigo писал(а):Сайт намедни снова изменил дизайн. На досуге попробовал восстановить работоспособность скрипта. Сайт теперь работает через https:// протокол, поэтому для работы необходим пакет tls.

Если это тот, который в бионике, то работает.

Re: tvcountdown.tcl - Еще одно расписание выхода серий.

СообщениеДобавлено: 27 дек 2014 19:58
tvrsh
Еще раз обновил скрипт после изменений на сайте.