Страницы: 1
Как самому добавить оператор в расширение xsms 0.0.5.12. Краткое руководство
Во-первых, скажу сразу, что руководство для версии Firefox 1.0.x, т.к. только сегодня обнаружил, что в 1.1a2 расшрение работает некорректно.
Во-вторых, напишу достаточно кратко, не описывая в подробностях как пользоваться proxomitron'ом, из чего состоит расширение, и т.д. То-есть, это руководство не для новичков.
В-третьих, когда я делал первую версию xsms, то никакого самостоятельного добавления операторов не планировал, поэтому процесс добавления оператора может оказаться длительным и сложным.
Опишу процесс добавления оператора на примере Мегафон-Москва.
0. Для начала нужно несколько раз с сайта отправить смс, проследив отправку proxomitronom, выявить закономерности и получить полное представление о том, как происходит процесс отправки.
В нашем случае процесс отправки будет такой:
- загрузка страницы http://sms.megafonmoscow.ru. В страницу встроена картинка с кодом следующим образом:
<img src="/image.phtml?k=6760724" alt="" border="0" height="40" width="100">
- Загрузка картинки по адресу http://sms.megafonmoscow.ru/image.phtml?k=6760724
- Отправка формы по адресу http://sms.megafonmoscow.ru/action.phtml, причем нужно обратить внимание, что за поля передаются, и что поле codekey соответствует адресу картинки.
- Загрузка ответа.
При успешной отправке в коде страницы есть строки:
...
<h3>
Ваше сообщение отправлено
</h3>
...
При ошибке:
...
<h3 class="error">
Ошибка!!! Вы неправильно ввели код подтверждения.
</h3>
...
Все эти данные потребуются в дальнейшем.
1. Для начала в распакованном расширении в папке content нужно найти 2 файла: operators.js, и xsms.js.
2. В файле operators.js найти строки:
operator[operator.length]={
name:stringBundle.getString('xsms.operators.mf'),
id:'mf',
prefix:['7926','7095']};
Поле name обозначает название оператора, которое будет видно в расширении.
В этом примере оно считывается из файла локализации xsms.properties, но можно было и просто написать:
...
name:'Megafon',
...
Затем идет поле id - это уникальный идентификатор оператора.
Затем поле prefix - вроде и так понятно - массив префиксов для оператора.
После добавления нужных строк в файл, сохраняем его, и переходим к xsms.js
3. В файле xsms.js информация для Мегафона разбросана по разным местам:
- во-первых, в начале указывется количество символов:
...
xsms_max_mf=110;
...
- потом привязка этой переменной к идентификатору оператора (в нашем случае 'mf'):
function xsms_max(){
m='';
...
if (xsms_tek_op=='mf'){m= xsms_max_mf}
...
}
- потом прописывается, нужна ли картинка с кодом (нужна - true):
function xsms_code_needed(){
...
if (xsms_tek_op=='mf'){return true}
...
}
- потом вызов процедуры с показом кода (если код нужен):
function xsms_shownewcode(){
xsms_hidecodeblock();
...
if (xsms_tek_op==''mf'') {xsms_shownewcode_mf();}
...
}
- вызов процедуры отсылки сообщения:
function xsms_send(){
xsms_translit(document.getElementById('xsms-message-id'));
xsms_message_text+=xsms_signature;
...
if (xsms_tek_op=='mf') {xsms_send_mf();}
...
}
Затем, ближе к концу файла (строки где-то в районе 1200-1250) сами функции показа кода:
function xsms_shownewcode_mf(){
...
}
обработки ответа (вызывается в xsms_send_mf()):
function xsms_parse_result_mf(result){
...
}
и отсылки сообщения:
function xsms_send_mf(){
...
}
4. Теперь самое сложное. Сами функции.
Функция показа кода xsms_shownewcode_mf().
Принцип: закачиваем код страницы отправки, из него "выдираем" код картинки codekey_mf, дополняем им адрес картинки, и используем этот код в дальнейшем.
//скрипты для отправки на Мегафон
function xsms_shownewcode_mf(){var url="http://sms.megafonmoscow.ru"; //страница, из которой нужно "выдрать" адрес картинки с кодом.
var xrequest=new XMLHttpRequest();
xrequest.open("GET",url,true);xrequest.onreadystatechange = function () {
switch (xrequest.readyState){
case 2 : {
xsms_set_status(2);
} break;
case 4 : {
xsms_set_status(0);
xsms_showcodeblock();var result=xrequest.responseText; // в строку result заносим код страницы
begin=result.indexOf('image.phtml?k=',0); // "выдираем" код картинки
end=result.indexOf('"',begin); // "выдираем" код картинки
codekey_mf=result.substring(begin+14,end); // "выдираем" код картинки
var xsms_newcode = new Image (); //
xsms_newcode.src="http://sms.megafonmoscow.ru/image.phtml?k="+codekey_mf; // вставляем картинку в xul-документ
document.getElementById("xsms-imagecode-id").src=xsms_newcode.src; //
} break;
}
};
xsms_set_status(1);
xrequest.send("");
}
5. Функция отправки сообщения xsms_send_mf().
Принцип: в строку data подставляем префикс, номер, текст сообщения, параметр codekey_mf, полученный ранее, и отправляем форму по адресу http://sms.megafonmoscow.ru/action.phtml, а ответ сервера обрабатываем функцией xsms_parse_result_mf.
function xsms_send_mf(){
var xsms_prf=document.getElementById('xsms-prefix-id').label; //префикс, выбранный пользователем
var xsms_number=document.getElementById('xsms-number-id').value; //номер
var xsms_message=escape(xsms_message_text); //текст сообщения
var xsms_codevalue=document.getElementById('xsms-codevalue-id').value; //код, набранный пользователем
/*в строку data подставляем поля, необходимые для отправки */
data="transliterate=on&area=sms&messlen=110&english=0&send_after_flag=off&prefix="+xsms_prf+"&addr="+xsms_number+"&message="+xsms_message+"&codekey="+codekey_mf+"&codevalue="+xsms_codevalue;
var url="http://sms.megafonmoscow.ru/action.phtml"; //адрес обработки формы
var xrequest=new XMLHttpRequest();
xrequest.open("POST",url,true);
xrequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xrequest.onreadystatechange = function () {
switch (xrequest.readyState){
case 2 : {
xsms_set_status(4);
} break;
case 4 : {
xsms_set_status(0);
xsms_parse_result_mf(xrequest.responseText); //вызов функции обработки статуса отправки
} break;
}
};
xsms_set_status(3);
xsms_hidecodeblock();
xrequest.send(data);
}
6. Обработка статуса отправки xsms_parse_result_mf(result).
Принцип: Проверяем в коде страницы наличие строки "Ваше сообщения отправлено", если не находим, то "выдираем" код ошибки.
function xsms_parse_result_mf(result){
// xsms_test_inwindow(result); //тестовое окно, в которое выводится страница со статусом
t1=result.indexOf(unescapeEx('Ваше сообщение отправлено'),0);
if (t1!=-1) {alert(xsms_sent_all_ok_alert); //выводим alert'ом сообщение об успешной отправке
} else {
begin=result.indexOf('<h3 class="error">',0); //
end=result.indexOf('</h3>',begin+18); // "выдираем" код ошибки
s=result.substring(begin+28,end-8); //
alert(s); //выводим alert'ом код ошибки
}
}
P.S. Естественно, что всё это выглядит на первый взгляд ужасно, и я с Вами в этом согласен - код неоптимизирован, всё раскидано по разным углам, ничего непонятно, комментариев нет, и т.д. Всё это из-за того, что расширение планировал "для себя". Если бы я сейчас писал всё с нуля, то написал бы по-другому, но увы, времени мало, да и лето, жарко, пляж, пиво ..., в общем руки не доходят переделывать.
Но на самом деле добавить оператора не так уж и сложно, у меня это дело с учетом отладки и т.д. занимает где-то 30 минут.
Модераторам: создаю новую тему, т.к. руководство объемное, не каждому нужно, и в старой теме смотрелось бы как-то не к месту, IMHO.
Отсутствует
а если я наблюдаю такую картину при отправке:
+++GET 117+++
CONNECT / HTTP/1.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; ru-RU; rv:1.7.8) Gecko/20050511 Firefox/1.0.4
Proxy-Connection: keep-alive
Host: gw.kubangsm.ru
+++SSL 117:+++
SSL Pass-Thru: CONNECT https://gw.kubangsm.ru:443/
+++CLOSE 117+++
означает ли это что мне не судьба оправлять sms через этого оператора ?
Отредактировано Attid (20-07-2005 15:43:53)
Отсутствует
Attid
Я так понял, что отправка идет со страницы http://gw.kubangsm.ru/cgi-bin/cgi.exe?function=ch_put_sms_win&Lang=2 ?
Там у меня вот что выдается:
New Message Log Window.... +++GET 1+++ GET /cgi-bin/cgi.exe?function=ch_put_sms_win&Lang=2 HTTP/1.1 Host: gw.kubangsm.ru User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.8) Gecko/20050511 Firefox/1.0.4 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: ru-ru,ru;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive +++RESP 1+++ HTTP/1.1 200 OK Date: Wed, 20 Jul 2005 11:59:21 GMT Server: Apache/2.0.52 (Unix) mod_ssl/2.0.52 OpenSSL/0.9.7e Content-Length: 3220 Content-Type: text/html; charset=WINDOWS-1251 +++CLOSE 1+++ +++GET 2+++ POST /cgi-bin/cgi.exe?function=ch_send_sms HTTP/1.1 Host: gw.kubangsm.ru User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.8) Gecko/20050511 Firefox/1.0.4 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: ru-ru,ru;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Referer: http://gw.kubangsm.ru/cgi-bin/cgi.exe?function=ch_put_sms_win&Lang=2 Content-Type: application/x-www-form-urlencoded Content-Length: 42 Connection: keep-alive Posting 42 bytes... SmsNick=%2B7***1234567 count=0 SmsMsg=test +++RESP 2+++ HTTP/1.1 200 OK Date: Wed, 20 Jul 2005 12:11:00 GMT Server: Apache/2.0.52 (Unix) mod_ssl/2.0.52 OpenSSL/0.9.7e Content-Length: 3244 Content-Type: text/html; charset=WINDOWS-1251 +++CLOSE 2+++
Там всё достаточно просто и обычно. Или другая страница отправки?
Отредактировано Yan (20-07-2005 16:20:25)
Отсутствует
Attid
Я так понял, что отправка идет со страницы http://gw.kubangsm.ru/cgi-bin/cgi.exe?function=ch_put_sms_win&Lang=2 ?
Там у меня вот что выдается:
слушай а я про такую страницу и не знал
тут действительно все просто сенкс, буду мучить дальше
я пробывал через
https://gw.kubangsm.ru/cgi-bin/cgi.exe?function=sms_send&isFree=1
Отсутствует
Страницы: 1