Страница 1 из 1
f1.tcl
Добавлено:
30 ноя 2011 21:59
Radiosignal
f1.tcl - Выводит статистику c
http://www.f1-world.ru/ по Кубку конструкторов и личный зачет гонщиков.
Re: f1.tcl
Добавлено:
01 дек 2011 21:41
tvrsh
Вот пробуй.
# Биндим паблик команду.
bind pub - !f1 f1
# Начинаем процедуру.
proc f1 {nick uhost hand chan text} {
# Указываем юзерагент.
::http::config -useragent "UserAgent"
# Урл и таймаут.
set tok [::http::geturl "http://www.f1-world.ru/champ2011/champteams.php" -timeout 15000]
# Получаем содержимое страницы.
set data [::http::data $tok]
# Очищаем токен.
::http::cleanup $tok
# Превращаем данные в одну строку заменив перенос строки на пустоту.
regsub -all -- {\n} $data "" data
# Забираем тайтл таблицы и выводим его в канал.
regexp -- {<div class=\"head10b\">(.*?)</div>} $data "" title
putserv "PRIVMSG $chan :$title"
# Забираем нужную нам часть с таблицей стран и очков.
regexp -- {<table width=\"80%\".*?>(.*?)</table>} $data "" a
# Заменяем тэги на символ | чтобы потом разбить по ним строку.
regsub -all -- {</tr> } $a "|" a
# Перебираем каждую страну разбивая строку по |, достаем номер, название и очки. Выводим в канал.
foreach line [split $a "|"] {
regexp -- {<td align=\"center\" valign=\"middle\">(.*?)</td>.*?<div class=\"head8\">(.*?)</div>.*?<td align=\"center\">(.*?)</td>.*?<td align=\"center\" valign=\"middle\">(.*?)</td>} $line "" b c d e
putserv "PRIVMSG $chan :$b $c $d $e"
}
# Процедура закончена.
}
Re: f1.tcl
Добавлено:
01 дек 2011 22:48
Radiosignal
Выборочно выдает результаты таблицы.
1 Red Bull Renault 12 650
4 Mercedes 165
7 Sauber Ferrari 44
12 Virgin Cosworth 0
Re: f1.tcl
Добавлено:
02 дек 2011 14:46
tvrsh
Что-то пока не вижу из-за чего не выводятся все строки, вроде html у них у всех одинаковый.
Можно сделать так. Заменить форич на на этот:
foreach line [split $a "|"] {
regexp -- {<.*?>} $line "" line
putserv "PRIVMSG $chan :$line"
}
Из каждой строки вырезается все, что в <> скобках.
Re: f1.tcl
Добавлено:
02 дек 2011 15:26
Radiosignal
Теперь только одну строку выдает с годом 2011 и все.
Re: f1.tcl
Добавлено:
02 дек 2011 18:02
Radiosignal
Используя твой скрипт по биатлону, сделал для формулы. Выводит статистику нормально. Но вот как вывести не только личный зачет гонщика, но и кубок конструктора. tvrsh, можешь добавить команду для этого.
Re: f1.tcl
Добавлено:
02 дек 2011 20:25
tvrsh
# Биндим паблик команду.
bind pub - !pilots f1
# Начинаем процедуру.
proc f1 {nick uhost hand chan text} {
# Указываем юзерагент.
::http::config -useragent "UserAgent"
# Урл и таймаут.
set tok [::http::geturl "http://www.f1-world.ru/champ2011/champdrivers.php" -timeout 15000]
# Получаем содержимое страницы.
set data [::http::data $tok]
# Очищаем токен.
::http::cleanup $tok
# Проверяем на наличие сузи и перекодируем данные
if {[info exists ::sp_version]} {
set data [encoding convertfrom cp1251 $data]
} else {
set data [encoding convertto cp1251 [encoding convertfrom utf-8 $data]]
}
# Превращаем данные в одну строку заменив перенос строки на пустоту.
regsub -all -- {\n} $data "" data
# Забираем тайтл таблицы и выводим его в канал.
regexp -- {<div class="head10b">(.*?)</div>} $data "" title
putserv "PRIVMSG $chan :$title"
# Забираем нужную нам часть с таблицей стран и очков.
regexp -- {<table class="news8" .*?>(.*?)</table>} $data "" a
# Заменяем тэги на символ | чтобы потом разбить по ним строку.
regsub -all -- {</tr>} $a "|" a
regsub -all -- {<a href.*?>} $a "" a
regsub -all -- {<img.*?>} $a "" a
regsub -all -- {<td.*?>} $a "" a
regsub -all -- { } $a "n/a" a
set i 0
# Перебираем каждую страну разбивая строку по |, достаем номер, название и очки. Выводим в канал.
foreach line [lrange [split $a "|"] 1 end] {
if {$i < 10} {
regexp -- {<tr>(.*?)</td></td><div class="head8">(.*?)</a></div></td></td><div class="head8">(.*?)</div></td>(.*?)</td>(.*?)</td>} $line "" b c d e f
putserv "PRIVMSG $chan :$b - $c - $d - $e - $f"
}
incr i
}
# Процедура закончена.
}
# Биндим паблик команду.
bind pub - !consts f2
# Начинаем процедуру.
proc f2 {nick uhost hand chan text} {
# Указываем юзерагент.
::http::config -useragent "UserAgent"
# Урл и таймаут.
set tok [::http::geturl "http://www.f1-world.ru/champ2011/champteams.php" -timeout 15000]
# Получаем содержимое страницы.
set data [::http::data $tok]
# Очищаем токен.
::http::cleanup $tok
# Проверяем на наличие сузи и перекодируем данные
if {[info exists ::sp_version]} {
set data [encoding convertfrom cp1251 $data]
} else {
set data [encoding convertto cp1251 [encoding convertfrom utf-8 $data]]
}
# Превращаем данные в одну строку заменив перенос строки на пустоту.
regsub -all -- {\n} $data "" data
# Забираем тайтл таблицы и выводим его в канал.
regexp -- {<div class="head10b">(.*?)</div>} $data "" title
putserv "PRIVMSG $chan :$title"
# Забираем нужную нам часть с таблицей стран и очков.
regexp -- {<table width="80%" .*?>(.*?)</table>} $data "" a
# Заменяем тэги на символ | чтобы потом разбить по ним строку.
regsub -all -- {</tr>} $a "|" a
regsub -all -- {<a href.*?>} $a "" a
regsub -all -- {<img.*?>} $a "" a
regsub -all -- {<td.*?>} $a "" a
regsub -all -- { } $a "n/a" a
set i 0
# Перебираем каждую страну разбивая строку по |, достаем номер, название и очки. Выводим в канал.
foreach line [lrange [split $a "|"] 1 end] {
if {$i < 10} {
regexp -- {<tr>(.*?)</td></td><div class="head8">(.*?)</div></td>(.*?)</td>(.*?)</td>} $line "" b c d e
putserv "PRIVMSG $chan :$b - $c - $d - $e"
}
incr i
}
# Процедура закончена.
}
Re: f1.tcl
Добавлено:
02 дек 2011 23:38
Radiosignal
Оба скрипта работают. tvrsh спасибо.
Re: f1.tcl
Добавлено:
23 апр 2013 21:21
Radiosignal
Скрипт стал выдавать ошибку
Tcl error [f1]: can't read "b": no such variable
и пишет только одну строку с годом чемпионата 2013. С сайтом все нормально.
tvrsh, можешь подправить скрипт или переделать его под этот сайт
http://formula.sport-express.ru/personal/.
Заранее спасибо.
Re: f1.tcl
Добавлено:
09 май 2013 10:04
tvrsh
Замени в урлах для парсинга champ2011 на champ2013.
Re: f1.tcl
Добавлено:
10 май 2013 15:46
Radiosignal
Это я самым первом делом и сделал. Но все равно, бот ругается на "b" и пишет строку Чемпионат 2013 и все, никакой статистики нету по пилотам и командам.
Re: f1.tcl
Добавлено:
01 июн 2013 17:29
tvrsh
Немного припозднился.
Пилоты:
# Биндим паблик команду.
bind pub - !pilots f1
# Начинаем процедуру.
proc f1 {nick uhost hand chan text} {
# Указываем юзерагент.
::http::config -useragent "UserAgent"
# Урл и таймаут.
set tok [::http::geturl "http://www.f1-world.ru/champ2013/champdrivers.php" -timeout 15000]
# Получаем содержимое страницы.
set data [::http::data $tok]
# Очищаем токен.
::http::cleanup $tok
# Проверяем на наличие сузи и перекодируем данные
if {[info exists ::sp_version]} {
set data [encoding convertfrom cp1251 $data]
} else {
set data [encoding convertto cp1251 [encoding convertfrom utf-8 $data]]
}
# Превращаем данные в одну строку заменив перенос строки на пустоту.
regsub -all -- {\n} $data "" data
# Забираем тайтл таблицы и выводим его в канал.
regexp -- {<div class="head10b">(.*?)</div>} $data "" title
putserv "PRIVMSG $chan :$title"
# Забираем нужную нам часть с таблицей стран и очков.
regexp -- {<table class="f1cup" width="92%" align="center" >(.*?)</table>} $data "" a
# Заменяем тэги на символ | чтобы потом разбить по ним строку.
regsub -all -- {</tr>} $a "|" a
regsub -all -- {<a href.*?>} $a "" a
regsub -all -- {<img.*?>} $a "" a
regsub -all -- {<td.*?>} $a "" a
regsub -all -- {<div.*?>} $a "" a
regsub -all -- {</div>} $a "" a
regsub -all -- { } $a "n/a" a
set i 0
# Перебираем каждую страну разбивая строку по |, достаем номер, название и очки. Выводим в канал.
foreach line [lrange [split $a "|"] 1 end] {
if {$i < 10} {
regexp -- {<tr>(.*?)</td></td>(.*?)</a></td></td>(.*?)</td>(.*?)</td>(.*?)</td>(.*?)</td>(.*?)</td>} $line "" b c d e f g h
putserv "PRIVMSG $chan :$b - $c - $d - $e - $f - $g - $h"
}
incr i
}
# Процедура закончена.
}
Конструкторы:
# Биндим паблик команду.
bind pub - !consts f2
# Начинаем процедуру.
proc f2 {nick uhost hand chan text} {
# Указываем юзерагент.
::http::config -useragent "UserAgent"
# Урл и таймаут.
set tok [::http::geturl "http://www.f1-world.ru/champ2013/champteams.php" -timeout 15000]
# Получаем содержимое страницы.
set data [::http::data $tok]
# Очищаем токен.
::http::cleanup $tok
# Проверяем на наличие сузи и перекодируем данные
if {[info exists ::sp_version]} {
set data [encoding convertfrom cp1251 $data]
} else {
set data [encoding convertto cp1251 [encoding convertfrom utf-8 $data]]
}
# Превращаем данные в одну строку заменив перенос строки на пустоту.
regsub -all -- {\n} $data "" data
# Забираем тайтл таблицы и выводим его в канал.
regexp -- {<div class="head10b">(.*?)</div>} $data "" title
putserv "PRIVMSG $chan :$title"
# Забираем нужную нам часть с таблицей стран и очков.
regexp -- {<table class="f1cup" width="80%" align="center" >(.*?)</table>} $data "" a
# Заменяем тэги на символ | чтобы потом разбить по ним строку.
regsub -all -- {</tr>} $a "|" a
regsub -all -- {<a href.*?>} $a "" a
regsub -all -- {<img.*?>} $a "" a
regsub -all -- {<td.*?>} $a "" a
regsub -all -- {<div.*?>} $a "" a
regsub -all -- {</div>} $a "" a
regsub -all -- { } $a "n/a" a
set i 0
# Перебираем каждую страну разбивая строку по |, достаем номер, название и очки. Выводим в канал.
foreach line [lrange [split $a "|"] 1 end] {
if {$i < 10} {
regexp -- {<tr>(.*?)</td></td>(.*?)</td>(.*?)</td>(.*?)</td>(.*?)</td>(.*?)</td>} $line "" b c d e f g
putserv "PRIVMSG $chan :$b - $c - $d - $e - $f - $g"
}
incr i
}
# Процедура закончена.
}
Re: f1.tcl
Добавлено:
01 июн 2013 22:24
Radiosignal
Всю статистику пилотов и команд показывает хорошо. Спасибо tvrsh.
Re: f1.tcl
Добавлено:
24 мар 2014 23:11
Radiosignal
tvrsh привет. Сайт поменял таблицы статистики, можешь подправить скрипты. Адреса со статистикой :
http://www.f1-world.ru/champ2014/champdrivers.phphttp://www.f1-world.ru/champ2014/champteams.php
Re: f1.tcl
Добавлено:
04 апр 2014 19:42
tvrsh
Мне помогла просто замена даты в ссылке с 13 на 14.
Как я понимаю, все остальное на сайте осталось неизменным:
<tvrsh> !pilots
<+bionic> Чемпионат пилотов 2014
<+bionic> 1 - Нико Росберг - Mercedes - 1 - n/a
<+bionic> 2 - Льюис Хэмильтон - Mercedes - 1 - 2
<+bionic> 3 - Фернандо Алонсо - Ferrari - n/a - n/a
Re: f1.tcl
Добавлено:
04 апр 2014 21:42
Radiosignal
Да, это я сделал в первую очередь. Но там они изменили таблицу. Добавились столбцы ЛК и Очки.
Re: f1.tcl
Добавлено:
04 апр 2014 22:56
tvrsh
Обновил скрипты в предыдущем сообщении. Не тестировал, пробуй.
Re: f1.tcl
Добавлено:
05 апр 2014 00:59
Radiosignal
Скрипт работает. Спасибо.