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

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

MyDC.ru _ Запросы скриптов для PtokaX _ Скрипт проверки баланса

Автор: Lesh™ 26.10.2009, 20:02

Приветствую всех, и прошу помощи, есть биллинговая система которая по запросу выдает лицевой счет:

http://billing:8080/balance_sender?login=login&pswd=pass&mid=5

нужен скрипт что бы при вводе login и pass вставлялись в нужные места ссылки(выделенные жирным) и в ЛС приходил результат, а он такой:

Код
<?xml version="1.0" encoding="windows-1251"?>
<data status="error">Invalid PIN1 or PIN2!</data>

ошибка логина или пароля
Вывод фразы: Ошибка логина или пароля

Код
<?xml version="1.0" encoding="windows-1251"?>
<data status="ok" summa="880.13    "/>

при правильно вводе
Вывод фразы: Ваш баланс равен 880.13 руб

Автор: Akaick 27.10.2009, 13:35

ИМХО такое вроде невозможно beat_plaster.gif
+ Какой дурак будет вводить свои данные для подключения инета? still_dreaming.gif подумает что хочешь стырить

Автор: Nickolya 27.10.2009, 15:49

Возможно и вполне легко реализуется, если пароль для проверки пароля отличается от того что для входа в интернет (так у нормальных провайдеров), то проблем никаких не будет big_smile.gif

Не сильно много времени у меня, но идея понравилась, - набросал скрипт, в самом конце введи свои данные ("тут_впиши_логин" и "тут_впиши_пароль") и напиши тут что тебе выдал хаб в ответ на запуск скрипта. Тогда посмотрим что можно сделать... Для работы требуется библиотека сокетов LuaSocket!

Код
local http = require("socket.http")

function GetData(login, pass)
    local a, b = http.request{
        url = [[http://billing:8080/balance_sender?login=]]..login..[[&pswd=]]..pass..[[&mid=5]],
    }
    if b and b == 200 then
        local c = a:match("status=\"(%S+)\"")
        if c then
            if c == "error" then
                return "Ошибка логина или пароля"
            elseif c == "ok" then
                local d = a:match("summa=\"(%S+)%s*\"")
                if d then
                    return "Ваш баланс равен "..d.." руб."
                else
                    return "Сумма не найдена"
                end
            else
                return "Ответ не корректен"
            end
        else
            return "Запрос не корректен"
        end
    else
        return "Запрос не обработан"
    end
end

Core.SendToAll("Ответ на запрос: "..GetData("тут_впиши_логин", "тут_впиши_пароль"))

Автор: Lesh™ 27.10.2009, 19:52

Цитата(Nickolya @ 27.10.2009, 15:49) *
Возможно и вполне легко реализуется, если пароль для проверки пароля отличается от того что для входа в интернет (так у нормальных провайдеров), то проблем никаких не будет big_smile.gif

Не сильно много времени у меня, но идея понравилась, - набросал скрипт, в самом конце введи свои данные ("тут_впиши_логин" и "тут_впиши_пароль") и напиши тут что тебе выдал хаб в ответ на запуск скрипта. Тогда посмотрим что можно сделать... Для работы требуется библиотека сокетов LuaSocket!

Спасибо за поддержание идеи. Да, в нашей сети для проверки баланса создается отдельный логин и пароль...

вот что при запуске скрипта

27.10.2009 18:49:07 - c:\DC\scripts\72_Balans.lua:8: attempt to index local 'a' (a number value)

да, и менюшку хотелось бы к нему )))

Автор: Akaick 27.10.2009, 20:07

Цитата(Lesh™ @ 27.10.2009, 20:52) *
Спасибо за поддержание идеи. Да, в нашей сети для проверки баланса создается отдельный логин и пароль...

вот что при запуске скрипта

27.10.2009 18:49:07 - c:\DC\scripts\72_Balans.lua:8: attempt to index local 'a' (a number value)

да, и менюшку хотелось бы к нему )))


Везет, а у нас всё тупо одно feel_good.gif

Автор: Jaska 27.10.2009, 22:19

Вставить перед local c = a:match("status=\"(%S+)\"") что-то вроде if type(a) ~= "string" then local a = tostring(a) end big_smile.gif

поправил big_smile.gif

Автор: Lesh™ 28.10.2009, 9:30

Цитата(Jaska @ 27.10.2009, 22:19) *
Вставить перед local c = a:match("status=\"(%S+)\"") что-то вроде if type(a) ~= "string" then local a = tostring(a) end big_smile.gif

поправил big_smile.gif


28.10.2009 08:29:33 - c:\DC\scripts\72_Balans.lua:10: attempt to index local 'a' (a number value)

Автор: Nickolya 28.10.2009, 14:34

Так, а замени конструкцию

Код
    local a, b = http.request{
        url = [[http://billing:8080/balance_sender?login=]]..login..[[&pswd=]]..pass..[[&mid=5]],
    }
на
Код
    local a, b = http.request([[http://billing:8080/balance_sender?login=]]..login..[[&pswd=]]..pass..[[&mid=5]])

Автор: Lesh™ 28.10.2009, 22:31

Спасибо, заработала, в таком виде...

Код
local http = require("socket.http")

function GetData(login, pass)
local a, b = http.request([[http://billing:8080/balance_sender?login=]]..login..[[&pswd=]]..pass..[[&mid=5]])
    if b and b == 200 then
    if type(a) ~= "string" then local a = tostring(a)
    end
        local c = a:match("status=\"(%S+)\"")
        if c then
            if c == "error" then
                return "Ошибка логина или пароля"
            elseif c == "ok" then
                local d = a:match("summa=\"(%S+)%s*\"")
                if d then
                    return "Ваш баланс равен "..d.." руб."
                else
                    return "Сумма не найдена"
                end
            else
                return "Ответ не корректен"
            end
        else
            return "Запрос не корректен"
        end
    else
        return "Запрос не обработан"
    end
end

Core.SendToAll("Ответ на запрос:  "..GetData("тут_впиши_логин", "тут_впиши_пароль"))

терь как бы сделать запрос с меню, а не при запуске скрипта и меню типо
$UserCommand 1 3 Меню хаба\\Ваш баланс$<%[mynick]> !balans %[line:login] %[line:pass]&#*124;|

Автор: FallenAngel 28.10.2009, 23:08

http://mydc.ru/topic1164.html?p=8577&#entry8577

Автор: Nickolya 1.11.2009, 20:58

Попробуй вот так feel_good.gif
Скрипт ищите дальше...

Автор: Артём 1.11.2009, 23:34

У меня вопрос, а как правельно настроеть вот под этот сайт http://mydc.ru/r/?https://my.triolan.ua/ , а то я прописал

Код
([[https://my.triolan.ua/balance_sender?login=]]
но при проверки выдаёт команду и все данные в чат и ошибку l
Код
ua:34: attempt to concatenate local 'pass' (a nil value)

Что я прописал не так подскажите. Скрипт полезный, а то часто у меня в локалке народ просит адресс Личного кабинета для проверки баланса.
Зарание спасибо.

Автор: Jaska 2.11.2009, 4:50

А ошибки читать кто будет? big_smile.gif Тетя Мотя? Суть, ты пытаешься склеить строку с пустым значением.

Такой запрос ( [[https://my.triolan.ua/balance_sender?login=]] ) не годится, нужно как минимум [[https://my.triolan.ua/balance_sender?login=]]..login..[[&pswd=]]..pass
Зайти на http://mydc.ru/r/?https://my.triolan.ua/ я не могу, вероятно с внешки доступ закрыт. Сомневаюсь что это все заработает для твоего сайта, потому что в GET-запросе могут передаваться совершненно другие имена переменных. По правилам "хорошего тона" пароли, любые, открыто передавать в GET запросах - неткорреткно big_smile.gif но чаще всего отправляется хеш пароля иногда бывает еще какой-то ключ. Не обязательно передавать в GET, может форма входа устроена так что отправляется POST запрос. Короче говоря нужно знать как устроен сайт, чтобы что-то сделать.

p.s. насчет ошибки, ты влез в код, но что ты поменял? такая ошибка в последней версии николя невозможна, потому что до вызовыа функции GetData выполняется проверка есть ли что-то в переменных login и pass

Автор: Артём 2.11.2009, 12:21

Jaska
В коде нечего не менял кроме ( [[https://my.triolan.ua/balance_sender?login=]] )

Автор: Lesh™ 2.11.2009, 12:50

У меня так же ошибка

02.11.2009 11:47:42 - c:\DC\scripts\67_balansechecker_api2.lua:34: attempt to concatenate local 'pass' (a nil value)

Автор: Nickolya 2.11.2009, 13:56

Мой косяк, попробуйте вот этот вариант

 balansechecker_api2.lua ( 2.66 килобайт ) : 59
 

Автор: Lesh™ 2.11.2009, 14:02

Спасибо большое, работает.
Кстати мот кому понадобится биллинговая система стоит http://mydc.ru/r/?http://bgbilling.ru/

Автор: Uncle_Dif 3.11.2009, 11:56

А мне пишет "[13:55:17] <PtokaX> *** Uncle_Dif, Запрос не обработан"

Автор: Артём 3.11.2009, 12:03

Uncle_Dif
мне тоже самое пишет, я даже менял уже ( вроде правельно ) на своего провайдера

Код
[[https://my.triolan.ua/LoginPage.aspx=]]

и всеравно пишет
Цитата
Запрос не обработан

Автор: Uncle_Dif 3.11.2009, 12:24

Цитата(Jaska @ 2.11.2009, 5:50) *
Зайти на http://mydc.ru/r/?https://my.triolan.ua/ я не могу, вероятно с внешки доступ закрыт.


А я захожу свободно... с оперы.

Артём, значит - не судьба)), в пинципе у меня фиксированный тариф, а юзеры пусть уж помнят о "мой кабинет". Хотя фишка (скрипт этот) - штука хорошая.

Автор: Nickolya 4.11.2009, 16:04

Вся фишка в том, что скрипт написан ИСКЛЮЧИТЕЛЬНО под случай Lesh™'а, в вашем же варианте логин и пароль передаются через post-запрос, а не в урл, тут надо немного переделать скрипт. Да и не знаю я в каком виде там дальше идет страница, ее же надо обрабатывать! Если хотите - пишите html-код страницы что получаете после захода в личный кабинет, тогда и подумаю что да как.

Автор: F I L I N 4.11.2009, 17:54

http://mydc.ru/r/?http://stat.dars-ip.ru/cgi-bin/clients/login у меня вот через этот сайт проверяет баланс.. "бил мастер" и что то когда через скрипт проверить пытаюсь такую же ошибку как и у всех выдает "Запрос не обработан" =(

Автор: Nickolya 4.11.2009, 18:32

Код
<form method="post">

У тебя та же беда, нечто универсальное в этом скрипте будет не просто создать, ведь везеде свои премудрости. У ТС был довольно простой вариант, к тому же он предоставил все данные и поставил задачу, тут же пришло конкретное решение, все просто, это меня и порадовало big_smile.gif
Так что кому надо - отписываем адрес станицы с формой логинов и паролей и код того что получаем после входа, тогда и посмотрим что можно сделать...

Автор: RoL 8.6.2013, 16:07

Люди помогите сделать так чтоб этот скрипт присылал боланс сэтого сайта http://mydc.ru/r/?http://issa.kms.multinex.ru/index.php?r=site/login пароль и логин могу предоставить для просмотра страници из нутри логин kmsnet024010a пароль 010024

Буду очень вам благодарен


Вот код страницы после ведения логина и пароля

Раскрывающийся текст
CODE
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 ie67 ie" lang="ru"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 ie67 ie" lang="ru"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 ie" lang="ru"> <![endif]-->
<!--[if IE 9]> <html class="no-js ie9 ie" lang="ru"> <![endif]-->
<!--[if gt IE 9]><!--> <html class="no-js" lang="ru"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<link rel="shortcut icon" type="image/x-icon" href="/themes/MTS/i/favicon.ico" />
<link rel="stylesheet" type="text/css" href="/themes/MTS/css/layout.css" />
<link rel="stylesheet" type="text/css" href="/themes/MTS/css/controls.css" />
<link rel="stylesheet" type="text/css" href="/themes/MTS/css/lanbilling.css" />
<link rel="stylesheet" type="text/css" href="/themes/MTS/css/jquery-ui-1.8.16.custom.css" />
<link rel="stylesheet" type="text/css" href="/themes/MTS/css/jquery.fancybox.css" />
<link rel="stylesheet" type="text/css" href="/themes/MTS/css/grid.css" />
<script type="text/javascript" src="/assets/8b3a97a/jquery.min.js"></script>
<script type="text/javascript" src="/assets/8b3a97a/jquery.yii.js"></script>
<script type="text/javascript" src="/assets/8b3a97a/jui/js/jquery-ui.min.js"></script>
<script type="text/javascript" src="/js/payment.js"></script>
<title>LanBilling Client UI - Мои аккаунты</title>
<script>document.documentElement.className=document.documentElement.className.replace('no-js','js');</script>
<script type="text/javascript">
var base64 = function (string){
var b64="",c,n,k="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
for (n=0; n<string.length; n++) {
c = string.charCodeAt(n);
if (c < 128) {
b64 += String.fromCharCode©;
} else if((c > 127) && (c < 2048)) {
b64 += String.fromCharCode((c >> 6) | 192);
b64 += String.fromCharCode((c & 63) | 128);
} else {
b64 += String.fromCharCode((c >> 12) | 224);
b64 += String.fromCharCode(((c >> 6) & 63) | 128);
b64 += String.fromCharCode((c & 63) | 128);
}
}
string=b64;
b64='';
var chr1,chr2,chr3,enc1,enc2,enc3,enc4,i=0;
while (i < string.length) {
chr1 = string.charCodeAt(i++);
chr2 = string.charCodeAt(i++);
chr3 = string.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
b64 += k.charAt(enc1) + k.charAt(enc2) + k.charAt(enc3) + k.charAt(enc4);
}
return b64;
};

function setDateRange(range1,range2,el) {
$('#input-date-from').datepicker('setDate', range1);
$('#input-date-to').datepicker('setDate', range2);
$('.form-dates a').removeClass('active');
$(el).addClass('active');
return false;
}

$(document).ready(function() {
$('.other-cards-link').click(function(){
$('#other_cards_block').show();
$('.other-cards-link').hide();
return false;
});

/* Darkbox widh additional call for calendar*/
$(".popup-tariff-change").fancybox({
'onComplete': function() {
$("#fancybox-wrap .input-date").datepicker( );
var dates = $( "#fancybox-wrap .input-date-from, #fancybox-wrap .input-date-to" ).datepicker({
defaultDate: "+1D",
minDate: "+1D",
//changeMonth: true,
numberOfMonths: 2,
onSelect: function( selectedDate ) {
var option = $(this).hasClass("input-date-from") ? "minDate" : "maxDate",
instance = $( this ).data( "datepicker" ),
date = $.datepicker.parseDate(
instance.settings.dateFormat ||
$.datepicker._defaults.dateFormat,
selectedDate, instance.settings );
dates.not( this ).datepicker( "option", option, date );
}
});
$("#fancybox-wrap .input-cancel").click(function(){
$.fancybox.close();
});
}
});

/* Open and close dropdown */
$(".actions-wrap > a").click(function(){
if($(this).parent().hasClass("active") == false) {
$(".actions-wrap.active").removeClass("active");
$(this).parent().addClass("active");
} else {
$(".actions-wrap.active").removeClass("active");
}
return false;
});
/* Close dropdowns */
$("body").click(function(event){
$(".actions-wrap.active").removeClass("active");
});
/* Prevent closing dropdowns when clicked on its content */
$(".actions-list").click(function(event){
//return false;
});

/* Select payment form */
$('.payment-list-titles dt').click(function(){
$('.payment-list-titles dt').removeClass('selected');
$('.payment-list-titles dd').removeClass('selected');
/* list of allowed actions for payment form */
var actions = {
'pm': 'https://paymaster.ru/Payment/Init',
'wm':'https://merchant.webmoney.ru/lmi/payment.asp',
'pr':'/index.php?r=payment/index&action=promised',
'in':'/index.php?r=payment/index&action=internal',
'cd':'/index.php?r=payment/index&action=card'
}, cl = $(this).attr('class').replace(/\s?emphasized\s?/,'');
$('#payform').attr('action',actions[cl]);
//alert(actions[cl] + ' ' + cl);
$('#paytype').val(cl);
$(this).addClass('selected');
$(this).next().addClass('selected');
});

/* Select account settings section */
$('.account-list-titles li').click(function(){
$('.account-list-titles li').removeClass('selected');
$('.account-list-fields li').removeClass('selected');
$(this).addClass('selected');
$('.account-list-fields li').eq($(this).index()).addClass('selected');
});

/* Toggle support blocks */
$(".support-toggle").click(function(event){
if($(this).parent().hasClass("active") == false) {
$(".support-thread").removeClass("active");
$(this).parent().addClass("active");
} else {
$(".support-thread").removeClass("active");
}
return false;
});
$(".support-new-message").click(function(event){
$(".support-new-message-form").toggleClass('active');
return false;
});
$(".support-old-messages").click(function(event){
$(".support-old-messages-wrap").toggleClass('active');
return false;
});

/*setTimeout(function () {
if ($(".page-message").hasClass('active')) {
$(".page-message").removeClass('active');
}
}, 5000);*/

// Dates range changes


$.datepicker.regional['ru'] = {
closeText: 'Закрыть',
prevText: '<Пред',
nextText: 'След>',
currentText: 'Сегодня',
monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
'Июл','Авг','Сен','Окт','Ноя','Дек'],
dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
weekHeader: 'Нед',
dateFormat: 'dd.mm.yy',
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: ''
};
$.datepicker.setDefaults($.datepicker.regional['ru']);
$(".input-date").datepicker();
var dates = $( ".input-date-from, .input-date-to" ).datepicker({
changeMonth: true,
//numberOfMonths: 1,
onSelect: function( selectedDate ) {
//$(".content").addClass("loading");
$('.form-dates a').removeClass('active');
var option = $(this).hasClass("input-date-from") ? "minDate" : "maxDate",
instance = $( this ).data( "datepicker" ),
date = $.datepicker.parseDate(
instance.settings.dateFormat ||
$.datepicker._defaults.dateFormat,
selectedDate, instance.settings );
dates.not( this ).datepicker( "option", option, date );
}
});
if(!$(".input-date-from").val()) {
$(".input-date-from").datepicker("setDate", '01.06.2013');
}
if(!$(".input-date-to").val()) {
$(".input-date-to").datepicker("setDate", '08.06.2013');
}
});
</script> <script src="/themes/MTS/js/edit-form.js" type="text/javascript"></script>
</head>
<body class="">
<div class="cpage">
<div class="header">
<div class="header-taglines">
<p class="header-tagline">Домашний Интернет и Телевидение</p>
<p class="header-tagline2">Подключение услуг и управление вашим личным счетом</p>

</div>
</div> <div class="content-wrapper">
<div class="sidebar">
<div class="sidebar-logo">
<a href="/index.php?r=account/index">
<img src="/themes/MTS/i/logo.gif" alt="Logo">
</a>
<br />
<a href="/index.php?r=account/index">
Главная </a>
</div> <div class="portlet" id="yw1">
<div class="portlet-content">
<div class="sidebar-nav">
<div class="sidebar-nav-title"><strong>Личный кабинет</strong></div>
<ul class="sidebar-nav-menu">
<li class="nav-menu-item">
<a class="nav-menu-link" href="/index.php?r=account/index">
Мои аккаунты </a>
</li>

<!--<li class="nav-menu-item">
<a class="nav-menu-link" href="">
</a>
</li>-->

<li class="nav-menu-item">
<a class="nav-menu-link" href="/index.php?r=services">
Тарифы и услуги </a>
</li>



<li class="nav-menu-item">
<a class="nav-menu-link" href="/index.php?r=payment">
Оплата услуг </a>
</li>


<!--<li class="nav-menu-item">
<a class="nav-menu-link" href="/index.php?r=history">
Statistics </a>
</li>-->
<li class="nav-menu-item">
<a class="nav-menu-link" href="/index.php?r=statistics">
Статистика </a>
</li>


<li class="nav-menu-item">
<a class="nav-menu-link" href="/index.php?r=RentSoft/default/index">Антивирусы и другое ПО</a>
</li>

<li class="nav-menu-item">
<a class="nav-menu-link" href="/index.php?r=account/settings">
Настройки </a>
</li>

<li class="nav-menu-item">
<a class="nav-menu-link" href="/index.php?r=site/logout">
Выход </a>
</li>
</ul>
<span class="cwrgw c15"><span class="cbl"></span><span class="cbr"></span></span>
</div></div>
</div> </div>
<div class="breadcrumbs">
<a href="/index.php">Главная</a><span class="divider">/</span><span>Мои аккаунты</span></div> <div class="content">
<div class="content-aside-wrap">
<div class="content-aside">
<p>
<strong>Тельнов Алексей Сергеевич</strong>
</p>
<p>
Вы вошли как:
<br />
<strong>kmsnet033221c</strong>
</p>
<ul class="custom-list">
<li>
Контактный телефон:
<br/>
<strong>
<span id="editable-value-phone">9243131029</span>
<a
title="Edit"
href=""
id="popup-edit-form-link-phone"
class="popup-edit-form-link"
>
<img src="/themes/MTS/i/edit.png" alt="Edit" /></a>

<script type="text/javascript">new edit_form(
"phone",
{"property":"phone"},
"/index.php?r=editform/updateaccount",
"<div id=\"popup-edit-form-phone\" class=\"popup-edit-form\"> <div class=\"edit-form-top\"> <span id=\"edit-form-popup-close-phone\" class=\"edit-form-popup-close\">закрыть</span> </div> <div class=\"edit-form\"> <div class=\"input_wrapper\"> <div class=\"wrapped_input_right\"></div> <input id=\"edit-form-input-phone\" type=\"text\" size=\"14\" class=\"wrapped_input\" /> </div> <button class=\"edit-form-button\" type=\"submit\" name=\"\" id=\"edit-form-button-phone\"> <span class=\"button_inner_wrp\"> <span class=\"button_inner\">Сохранить</span> </span> </button> <div class=\"clr\"></div> </div> <div class=\"edit-form-bottom\"> </div></div>");
</script> </strong>
</li>
</ul>
<span class="cwlg c15">
<span class="ctl"></span>
<span class="ctr"></span>
<span class="cbl"></span>
<span class="cbr"></span>
</span>
</div> <div class="content-aside-plain">
<p>
<script type='text/javascript'>
$(document).ready(function(){
$('#bonus-get-btn').click(function(event){
event.preventDefault();
window.location.href = $('#tarif').val();
});

$("#bonus-btn").fancybox({
'scrolling' : 'no',
'titleShow' : false,
'onStart' : function(){
$('#bonus-frm').show();
},
'onClosed' : function() {
$("#bonus-frm").hide();
}
});
});
</script>


<a href='#bonus-frm' id='bonus-btn'>
<img src="/i/MTS-Bonus.gif">
</a>


<div id='bonus-frm' style='display:none;'>
<p>Выберите договор</p>
<select name="tarif" id="tarif">
<option value="http://bonus.mts.ru/comstar/change/?personal_account=37805&billing_id=6120&time_zone=11&sign=8ffea50e1b4e7d1a123fc3f65c2abe32">033221c</option>
</select> <input id="bonus-get-btn" name="yt5" type="button" value="Продолжить" /></div></p><p>
<script type='text/javascript'>
$(document).ready(function(){
$('#20off-get-btn').click(function(event){
event.preventDefault();
window.location.href = $('#vgr').val();
});

$("#20off-btn").fancybox({
'scrolling' : 'no',
'titleShow' : false,
'onStart' : function(){
$('#20off-frm').show();
},
'onClosed' : function() {
$("#20off-frm").hide();
}
});
});
</script>


<a href='#20off-frm' id='20off-btn'>
<img src="/i/20Off.gif">
</a>


<div id='20off-frm' style='display:none;'>
<b>20% возвращается.</b>
<p>Выберите договор</p>
<select name="vgr" id="vgr">
<option value="http://20.mts.ru/comstar/change/?personal_account=37805&billing_id=6120&time_zone=11&sign=bdc77ee91c00ac519faebd4b3a0e6b0d">033221c</option>
</select> <input id="20off-get-btn" name="yt6" type="button" value="Продолжить" /></div></p> </div>
</div>
<div class="alert alert-block alert-info">
<a class="close" data-dismiss="alert">Ч</a>
Уважаемые абоненты!<br />
Обращаем Ваше внимание, что с 1.04.2013 обслуживание абонентов "Домашнего Интернета" и "Кабельного ТВ" будет осуществляться во всех салонах-магазинах МТС.<br />
</div>
<div class="alert alert-block alert-info">
<a class="close" data-dismiss="alert">Ч</a>
Уважаемый клиент! Сообщаем вам о реорганизации ОАО "МТС" и ЗАО "КОМСТАР-Регионы".<br />
Ознакомиться с информационным сообщением о реорганизации ОАО "МТС" вы можете <a href="http://www.komsomolsk.mts.ru/internet/mts_stream/payment_service/law_documents/" target="_blank">по этой ссылке</a>.<br />
Ознакомиться с информационным сообщением о реорганизации ЗАО "КОМСТАР-Регионы" вы можете <a href="http://kms.multinex.ru/files/reorganization_notice.pdf" target="_blank">по этой ссылке</a>.</div>

<div id="yw0"></div>
<style>
table.sr {
border-spacing: 3px!important;
border-collapse: separate!important;
}
</style>

<div class="contract-list">


<div class="contract-item">
<h1>Открытое Акционерное Общество &quot;Мобильные ТелеСистемы&quot;</h1>
<h4 class="relative">
<small>Номер договора:</small> 033221c <a href="/index.php?r=payment/index&id=37805" class="content-header-side">
Текущий баланс: <span>1 588,03 руб.</span>
</a>
</h4>

<div class="mts_table_wrp">
<div class="grid-view">
<table class="items">
<thead>
<tr>
<th class="first_col">Учетная запись</th>
<th>Тарифный план</th>
<th>Подключенные услуги</th>
<th>Состояние</th>
</tr>
</thead>


<tr class="odd">
<td class="first_col">
<div class="actions-wrap">
<a href="java script:void(0)">kmsnet033221c ▾</a> <div class="actions-list">
<ul>
<li>
<a href="/index.php?r=statistics/details&type=tarif&vgid=37785">История смены тарифных планов</a> </li>
<li>
<a href="/index.php?r=statistics/details&type=rent&vgid=37785">История расхода средств</a> </li>
<li>
<a class="actions-item" href="/index.php?r=account/password" id="yt0">Изменить пароль</a> </li>
<li>
<a href="/index.php?r=Services/ChoiceTariff" id="yt1">Изменить тариф</a> </li>
</ul>
</div>
</div>
<br/>Адрес предоставления услуги:<br/>Россия,край Хабаровский,г Комсомольск-на-Амуре,ул Вокзальная,дом 76,,кв 43,681000
</td>

<!-- Работа с тарифом -->
<td>
<b><a href="/index.php?r=Services/ChoiceTariff" id="yt2">Интернет ВИП</a></b>
<br/>Абонентская плата: 1 350,00 руб.<br/>Текущая скорость: 12000 Кбит/с </td>

<!-- Работа с услугами -->
<td>
<span class="account-option">
<em>не доступно</em> </span>
</td>

<!-- Колонка действий -->
<td>
<span class="account-status">
<br>
Состояние: активен <a href="/index.php?r=account/index&id=37785&action=block">
заблокировать </a>
<br/><a href="/index.php?r=Services/ChoiceTariff" id="yt3">Изменить тариф</a> <br>
Израсходовано:
0/0 Мб </span>
</td>

</tr>


<tr class="even">
<td class="first_col">
<div class="actions-wrap">
<a href="java script:void(0)">account39111 ▾</a> <div class="actions-list">
<ul>
<li>
<a href="/index.php?r=statistics/details&type=tarif&vgid=53673">История смены тарифных планов</a> </li>
<li>
<a href="/index.php?r=statistics/details&type=service&vgid=53673">История расхода средств</a> </li>
<li>
<a class="actions-item" href="/index.php?r=account/password" id="yt4">Изменить пароль</a> </li>
</ul>
</div>
</div>
<br/>Адрес предоставления услуги:<br/>Россия,край Хабаровский,г Комсомольск-на-Амуре,ул Вокзальная,дом 76,кв 43,681000
</td>

<!-- Работа с тарифом -->
<td>
<b>Услуги для ФЛ</b>
</td>

<!-- Работа с услугами -->
<td>
<span class="account-option">
Нет подключенных услуг </span>
</td>

<!-- Колонка действий -->
<td>
<span class="account-status">
<br>
Состояние: активен <a href="/index.php?r=account/index&id=53673&action=block">
заблокировать </a>
<br>
</span>
</td>

</tr>


</table>
</div>
</div>
<hr class="soften">
</div>

</div>


<span class="clg2w c15">
<span class="ctl"></span>
<span class="ctr"></span>
<span class="cbl"></span>
<span class="cbr"></span>
</span>
<div class="loading-screen">
<div class="loader-icon">
<img src="/themes/MTS/i/ajax-loader.gif" alt="">
</div>
<span class="clg2w c15">
<span class="ctl"></span>
<span class="ctr"></span>
<span class="cbl"></span>
<span class="cbr"></span>
</span>
</div>
</div>
<span class="cwmg c15">
<span class="ctl"></span>
<span class="ctr"></span>
<span class="cbl"></span>
<span class="cbr"></span>
</span>
</div>
<div class="footer">
<ul class="footer-menu">
</ul>
<div class="footer-copy">
<br/>
ООО «Your company» © 2013 <br>Все права защищены </div>
</div>
</div>
<script type="text/javascript" src="/assets/3bd0c18c/js/bootstrap-alert.js"></script>
<script type="text/javascript" src="/themes/MTS/js/jquery.fancybox.pack.js"></script>
<script type="text/javascript">
/*<![CDATA[*/
jQuery(function($) {
jQuery('#yw0 .alert').alert();
$('body').on('click','#yt0',function(){jQuery.yii.submitForm(this,'/index.php?r=account/password',{'vgid':37785,'vglogin':'kmsnet033221c'});return false;});
$('body').on('click','#yt1',function(){jQuery.yii.submitForm(this,'/index.php?r=Services/ChoiceTariff',{'vgid':37785,'login':'kmsnet033221c','clear':1});return false;});
$('body').on('click','#yt2',function(){jQuery.yii.submitForm(this,'/index.php?r=Services/ChoiceTariff',{'vgid':37785,'login':'kmsnet033221c','clear':1});return false;});
$('body').on('click','#yt3',function(){jQuery.yii.submitForm(this,'/index.php?r=Services/ChoiceTariff',{'vgid':37785,'login':'kmsnet033221c','clear':1});return false;});
$('body').on('click','#yt4',function(){jQuery.yii.submitForm(this,'/index.php?r=account/password',{'vgid':53673,'vglogin':'account39111'});return false;});
});
/*]]>*/
</script>
</body>
</html>


Люди помогите пожалуйста у меня люди на хабе просят этот скрипт

им удобней черз мой хаб просматривать баланс чем ререз сайт


Если чтото ещё отменя потребуеться я смогу чем помогу

Автор: Nickolya 8.6.2013, 23:24

RoL, смотри, вот заточенный под тебя скрипт. Убил пару часов, так что с тебя 1000$...
Скрипт дико усложнился, т.к. твой биллинг заморочан достаточно в плане логина. Таймаут на запрос пришлось поднять до 3 секунд, с 1 не успевал он получить страницу. Поэтому при запросе баланса хаб может затупить аж на 9 секунд, т.к. запроса получилось 3. secret_smile.gif

 balance.lua ( 4.72 килобайт ) : 34
 

Автор: RoL 9.6.2013, 9:16

Вот бы сюда побольше таких людей как Николай только он стримится помочь людям Огромное тибе СПАСИБО !!!!

Автор: RoL 10.11.2013, 14:37

У важаемые програмисты помогите настроить скрипт этот balance.lua мне провайдер сменил адрес на такую сылку http://mydc.ru/r/?https://clb.komsomolsk.mts.ru/kom/index.php?r=site/login как её семенить в скрепте . Типерь скрипт не пашит очень прошу помогите плиззз

Автор: Nickolya 10.11.2013, 16:45

RoL, открываешь блокнотом скрипт, ищешь старый адрес своего лк, заменяешь на новый, перезапускаешь скрипт, радуешься (возможно) работающему скрипту и тому, что не напряг занятых программистов. Какой из пунктов сложен/не понятен/затруднителен?
Старый адрес зашит тут

Код
local a, b, c = http.request('http://stat.kms.multinex.ru/index.php?r=site/login')

Кавычки только случайно не удали extreme_sexy_girl.gif

Автор: RoL 11.11.2013, 15:27

CODE
-- Это лучше не трогать:
local http, url, ltn12, sScriptCmd, sBot, tAllowUsers
----------------------------------------------------------------------------------------------------
-- Конфиг скрипта:
----------------------------------------------------------------------------------------------------

-- Команда скрипта:
sScriptCmd = "balans"

-- Таймаут подключения к серверу статистики (время на ожидание),
-- столько может висеть скрипт при запросе баланса, в секундах:
iScriptTimeout = 60

-- Профили которые будут иметь доступ к скрипту:
tAllowUsers = {
[0] = true,
[1] = true,
[2] = true,
[3] = true,
[-1] = true,
}

----------------------------------------------------------------------------------------------------
-- Конец конфига!
----------------------------------------------------------------------------------------------------

function OnStartup()
http = require("socket.http")
url = require("socket.url")
ltn12 = require("ltn12")
http.TIMEOUT = iScriptTimeout
sBot = SetMan.GetString(21)
end

function MakeCookie(sData)
local t = {}
local i = 0
for name, val in sData:gmatch('(%S-)=(%S-);') do
if val ~= 'deleted' then
table.insert(t, {name, val})
i = i+1
end
end
local val = ''
for cnt, value in ipairs(t) do
val = val..value[1]..'='..value[2]
if cnt ~= i then
val = val..'; '
end
end
return val
end

function GetData(login, pass)
local a, b, c = http.request('http://clb.komsomolsk.mts.ru/kom/index.php?r=site/login')
if b and b == 200 then
local sSource = url.escape('LoginForm[login]')..'='..url.escape(login)..'&'..url.escape('LoginForm[password]')..'='..url.escape(pass)..'&yt0=%D0%92%D0%BE%D0%B9%D1%82%D0%B8'
local tResponse = {}
local a, b, c = http.request({
method = "POST",
url = "http://clb.komsomolsk.mts.ru/kom/index.php?r=site/login",
source = ltn12.source.string(sSource),
sink = ltn12.sink.table(tResponse),
headers = {
['Content-Length'] = sSource:len(),
["Content-Type"] = "application/x-www-form-urlencoded",
['Cookie'] = MakeCookie(c["set-cookie"]),
['Host'] = "clb.komsomolsk.mts.ru/kom",
['Origin'] = "http://clb.komsomolsk.mts.ru/kom",
['Referer'] = "http://clb.komsomolsk.mts.ru/kom/index.php?r=site/login",
['User-Agent'] = "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1530.2 Safari/537.36"
}
})
if b and b == 302 and c['location'] == 'http://clb.komsomolsk.mts.ru/kom/index.php' then
tResponse = {}
local a, b, c = http.request({
method = "GET",
url = "http://clb.komsomolsk.mts.ru/kom/index.php?r=account/index",
sink = ltn12.sink.table(tResponse),
headers = {
['Cookie'] = MakeCookie(c["set-cookie"]),
['Host'] = "clb.komsomolsk.mts.ru/kom",
['Referer'] = "http://clb.komsomolsk.mts.ru/kom/index.php?r=site/login",
['User-Agent'] = "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1530.2 Safari/537.36"
}
})
if b and b == 200 then
if tResponse[1] and tResponse[1]:len() > 0 then
local balance = tResponse[1]:match('class="content%-header%-side">(.-)')
if balance and balance:len() > 0 then
local balance_val = balance:match('(.+)'):gsub('[^%d,]', '')
if balance_val then
return "Ваш текущий баланс равен: "..balance_val.." руб."
else
return "Сумма не найдена"
end
else
return "Сумма не найдена"
end
else
return "Ответ не корректен"
end
else
return "Запрос не обработан"
end
else
return "Неверное имя пользователя или пароль"
end
else
return "Запрос не обработан"
end
end

function ChatArrival(tUser, sData)
local sCmd, sElseData = sData:match("^%b<>%s+%p(%S+)%s*(.*)|$")
if sCmd and sCmd == sScriptCmd then
if not tAllowUsers[tUser.iProfile] then
Core.SendToUser(tUser, "<"..sBot.."> "..tUser.sNick..", у тебя нет прав на использование команды '"..sCmd.."'!")
else
if sElseData == "" then
Core.SendToUser(tUser, "<"..sBot.."> "..tUser.sNick..", ты должен ввести логин и пароль!")
else
local sEnteredNick, sEnteredPass = sElseData:match("^(%S+)%s(%S+)$")
if not sEnteredNick or not sEnteredPass then
Core.SendToUser(tUser, "<"..sBot.."> "..tUser.sNick..", ты должен ввести и логин и пароль!")
end
Core.SendToUser(tUser, "<"..sBot.."> "..tUser.sNick..", "..GetData(sEnteredNick, sEnteredPass))
end
end
return true
end
end

function UserConnected(tUser)
if tAllowUsers[tUser.iProfile] then
Core.SendToUser(tUser, "$UserCommand 1 3 Личьный кабинет\\Для cети mts\\Ваш баланс$<%[mynick]> !"..sScriptCmd.." %[line:Логин] %[line:Пароль]||")
end
end
OpConnected = UserConnected
RegConnected = UserConnected


вот всё зделал как вы сказали. но когда я делаю проверку баланса бот пишет ваш запрос не обработан!!

У важаемый Николай помоги пожалуйста.

Автор: Nickolya 12.11.2013, 6:21

Сделал ты все правильно, заменить кусок текста в тексте не трудно же.
Значит провайдер сменил не просто ссылку, а поменял еще что-то. Как минимум, теперь соединение защищенное.

Посмотрел по-быстрому, в принципе ничего не сменилось, кроме адреса и ssl.
Теперь, чтобы скрипт работал, необходима вот эта библиотека http://mydc.ru/topic3401.html

 balance_fixed__with_ssl.lua ( 4.58 килобайт ) : 11
 

Автор: RoL 12.11.2013, 10:42

У важаемый Николай дело втом что уменя хаб стоит на убунте 32 и скрипт на птоке не запускаеться

Автор: Alexey 12.11.2013, 16:08

Это нормально. Такое часто бывает, когда человек не читает что ему пишут. Обычно помогает внимательное перечитывание уже написанного. Можно несколько раз.

Автор: RoL 12.11.2013, 16:21

Эт ты на что на микаеш???

Автор: RoL 13.11.2013, 14:03

Ну так что именно я зделал нетак ???

Автор: Артём 13.11.2013, 20:26

RoL, ты всё Сделал не правильно, перечислять не буду, но прочти ещё раз коммент Alexey, а потом коммент Nickolya.
А ещё, писал бы правильно.

Автор: Mr.Faber 17.11.2013, 17:44

Не поможете с запросом баланса на UTM6.
Страница авторизации: http://mydc.ru/r/?http://10.110.101.210/?page=tarifficator/auth

Страница авторизации

<!DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Вход в интерфейс техподдержки</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
<link rel="stylesheet" type="text/css" href="css/newtheme/jquery-ui-1.8.16.custom.css">
<script type="text/javascript" src="js/jquery-1.8.2.js"></script>
<script type="text/javascript" src="js/jquery.form.js"></script>
<script type="text/javascript" src="js/jquery.searchabledropdown-1.0.7.src.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.9.0.custom.js"></script>
<script type="text/javascript" src="js/panel.js"></script>
</head><body><table class="main" cellspacing="0"><tr class="sideMenuMargin"></tr><tr style="height:100%"><td ></td><td id="main_layout"> <style type="text/css">
#main_layout{
vertical-align: middle;
}
body{
background: url('image/login_background.jpg');
}
</style>
<!--img src="http://www.netup.ru/images/TOP.gif" style="position:absolute;z-index:-1"-->
<center>
<form method="POST" id="login_form" name="login_form">
<!--table style="z-index:1000; padding:2pt" class="blockUI blockMsg blockPage" cellspacing="8px"-->
<table class="panel" cellspacing="12px" style="background:white">
<tr>
<td align="center">
<h3>Личный кабинет</h3>
</td>
</tr>
<tr>
<td align="center">
<input type="text" name="login" title="логин" placeholder="Логин"/>
</td>
</tr>
<tr>
<td align="center">
<input type="password" name="password" title="пароль" placeholder="Пароль"/>
</td>
</tr>

<tr>
<td align="center">
<input type="submit" value="Войти" style="display:none"/>
<a style="" class="button" href="#" onclick="$('#login_form').submit(); return false;">Войти</a></td>
</tr>
<tr>
<td align="center">
<a href="password_reminder.php">Вспомнить пароль</a>
</td>
</tr>
</table
</form>
</center>
</td></tr><tr class="sideMenuMargin"></tr></table></body>

Дальше переходит на http://mydc.ru/r/?http://10.110.101.210/?page=tarifficator%2Fpersonal
Сам баланс находится на странице http://mydc.ru/r/?http://10.110.101.210/?page=tarifficator%2Fcurrent-state&personal_account=тут номер л/с
Страница баланса
Код
<!DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Состояние</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
<link rel="stylesheet" type="text/css" href="css/newtheme/jquery-ui-1.8.16.custom.css">
<script type="text/javascript" src="js/jquery-1.8.2.js"></script>
<script type="text/javascript" src="js/jquery.form.js"></script>
<script type="text/javascript" src="js/jquery.searchabledropdown-1.0.7.src.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.9.0.custom.js"></script>
<script type="text/javascript" src="js/panel.js"></script>
</head><body><table class="main" cellspacing="0"><tr class="sideMenuMargin"></tr><tr style="height:100%"><td id="leftpanel">        <div id="dhtmlgoodies_xpPane">
                          <div class="dhtmlgoodies_panel">
           <div style="padding:4px 0">
            <!-- Start content of pane -->
            <table cellspacing="0" cellpadding="2px" style="width:100%">
                           <tr>
               <td width="26" height="26" valign="middle" align="center">
                <img width="24" height="24" alt="" src="image/logout.png">
               </td>
               <td>
                <a class="panelLink" href="?page=logout">Logout</a>
               </td>
              </tr>
                         </table>
            <!-- End content -->
           </div>
          </div>
                   <div class="dhtmlgoodies_panel">
           <div style="padding:4px 0">
            <!-- Start content of pane -->
            <table cellspacing="0" cellpadding="2px" style="width:100%">
                           <tr>
               <td width="26" height="26" valign="middle" align="center">
                <img width="24" height="24" alt="" src="page/tarifficator/personal/icon.png">
               </td>
               <td>
                <a class="panelLink" href="?page=tarifficator%2Fpersonal">Персональные данные</a>
               </td>
              </tr>
                         </table>
            <!-- End content -->
           </div>
          </div>
                   <div class="dhtmlgoodies_panel">
           <div style="padding:4px 0">
            <!-- Start content of pane -->
            <table cellspacing="0" cellpadding="2px" style="width:100%">
                           <tr class="selected">
               <td width="26" height="26" valign="middle" align="center">
                <img width="24" height="24" alt="" src="page/tarifficator/current-state/icon.png">
               </td>
               <td>
                <a class="panelLink" href="?page=tarifficator%2Fcurrent-state&personal_account=864">Состояние</a>
               </td>
              </tr>
                           <tr>
               <td width="26" height="26" valign="middle" align="center">
                <img width="24" height="24" alt="" src="page/tarifficator/tariff/icon.png">
               </td>
               <td>
                <a class="panelLink" href="?page=tarifficator%2Ftariff&personal_account=864">Тарифный план</a>
               </td>
              </tr>
                           <tr>
               <td width="26" height="26" valign="middle" align="center">
                <img width="24" height="24" alt="" src="page/tarifficator/fin-report/icon.png">
               </td>
               <td>
                <a class="panelLink" href="?page=tarifficator%2Ffin-report&personal_account=864">Финансовый отчет</a>
               </td>
              </tr>
                           <tr>
               <td width="26" height="26" valign="middle" align="center">
                <img width="24" height="24" alt="" src="page/tarifficator/traffic-report/icon.png">
               </td>
               <td>
                <a class="panelLink" href="?page=tarifficator%2Ftraffic-report&personal_account=864">Отчет по трафику</a>
               </td>
              </tr>
                           <tr>
               <td width="26" height="26" valign="middle" align="center">
                <img width="24" height="24" alt="" src="page/tarifficator/unitiller/icon.png">
               </td>
               <td>
                <a class="panelLink" href="?page=tarifficator%2Funitiller&personal_account=864">Оплатить услуги</a>
               </td>
              </tr>
                         </table>
            <!-- End content -->
           </div>
          </div>
                 </div>
        <script type="text/javascript" language="JavaScript">
        <!--

         initDhtmlgoodies_xpPane(
            '',
            Array(
                'Login Gubanov','Информация','Лицевой счет №864'            ), Array(
                true,true,true            )
         );
        
         // -->
         </script>

        </td><td id="main_layout"><div class="toptoolbar" style=""><div class="left" style="float:left"><span class="title">Состояние</span><span class="subtitle">Лицевой счет №864</span></div><div class="right" style="float:right"></div><div class="center" style="text-align:center"></div><div></div><div style="clear:both"></div></div>
<div class="topattachedpanel">

<table cellpadding="6px" cellspacing="0" style="width:100%">
    
<tr><td style="font-size:110%">
    Текущий тарифный план &nbsp;<b>6 мегабит</b>
    </td>
    <td style="text-align:right">
        подключен с 20.09.2013 08:08    </td>
</tr>
    </table>

<table cellspacing="6px">
    <tr>
        <td class="name"><nobr>Баланс на 01.11.2013 00:00</nobr></td>
        <td style="text-align:right" class="value">447.15 руб.</td>
    </tr>
    <tr>
        <td class="name"><nobr>Получено платежей</nobr></td>
        <td style="text-align:right" class="value">1300.00 руб.</td>
    </tr>
    <tr>
        <td class="name"><nobr>Начислено за услуги</nobr></td>
        <td style="text-align:right" class="value">368.33 руб.</td>
    </tr>
    <tr class="">
        <td class="name"><b><nobr>Баланс на 17.11.2013 23:38&nbsp;</nobr></b></td>
                 <td class="value" style="text-align:right; color:green"><b>1378.82 руб.</b></td>
    </tr>
</table>


</div>
<div class="tabletoolbar">
<div class="left">
<span>Трафик</span>
</div>
</div>
<div class="attachedpanel">
<table cellspacing="6px">
    <tr style="text-align:center">
        <td></td>
        <td>Предоплачено</td>
        <td>Тарифицировано</td>
        <td>Всего</td>
    </tr>
            <tr>
            <td><b><nobr>Входящий</nobr></b></td>
                <td style="text-align:right" class="value">0.000 </td>
                <td style="text-align:right" class="value"></td>
                <td style="text-align:right" class="value"></td>
            </tr>
            <tr>
            <td><b><nobr>Исходящий</nobr></b></td>
                <td style="text-align:right" class="value">0.000 </td>
                <td style="text-align:right" class="value"></td>
                <td style="text-align:right" class="value"></td>
            </tr>
    </table>
</div>
</td></tr><tr class="sideMenuMargin"></tr></table></body>