Posted: Wed Sep 05, 2007 9:07 pm |
|
|
apxah |
Отметившийся |
|
|
Joined: 05 Sep 2007 |
Posts: 19 |
Location: 48@conference.jabber.ru |
|
|
|
|
|
|
Пишу бота на Perl и в процессе появился вопрос:
Как вытащить jid юзера из xml кода?
Code: | <presence from='test@conference.jabber.ru/testbot' to='newbot@jabber.ru/bot'
xml:lang='ru'><status>online</status><priority>6</priority><x xmlns='http://jabber.org/protocol/muc#user'><item
affiliation='owner' jid='tester@jabber.ru/TkabberP' role='moderator'/></x></presence> | .
Я вытаскиваю jid с помощью регулярных выражений вырезанием подстроки, но часто эта xml-консоль выдает разные
результаты. Вот например нормальныый ответ бота:
а вот ответ с ашыпкой:
Code: |
(16:28:17) Архангел: info Архангел
(16:28:17) Nart: Архангел:
48@conference.jabber.ru
Архангел
http://jabber.org/protocol/muc#user
http://jabber.org/protocol/caps
owner
|
Позже будут еще вопросы, но пока надо разобраться с этим.
З.Ы. Бот ужэ умеет следующее:
Code: |
[22:05:44] <Архангел> commands
[22:05:46] <Nart> Архангел: Текущий список команд: "visitor", "voice", "none", "member", "moderator", "admin", "owner", "subject", "clear", "disco", "join", "leave", "kick", "ban", "info", "ping", "config [censor (on, off, status)]. Для подробной справки по определенной команде введите "help команда" (Например: "help config").
|
|
|
|
|
|
| | |
Posted: Thu Sep 06, 2007 3:23 pm |
|
|
leksey |
Графоман |
|
|
Joined: 17 Dec 2004 |
Posts: 1909 |
Location: Москва, Тушино |
|
|
|
|
|
|
Чего-то я не понял, при чем тут xml-консоль. Это бот с ткаббером работает? |
|
|
|
|
Posted: Thu Sep 06, 2007 3:25 pm |
|
|
Binary |
Разработчик |
|
|
Joined: 17 Dec 2004 |
Posts: 1712 |
Location: Омск |
|
|
|
|
|
|
использовать xml-парсер? xpath? |
|
_________________ And I'm feeling good! |
|
|
|
Posted: Fri Sep 07, 2007 6:51 am |
|
|
apxah |
Отметившийся |
|
|
Joined: 05 Sep 2007 |
Posts: 19 |
Location: 48@conference.jabber.ru |
|
|
|
|
|
|
leksey,
бот работает из консоли. Раньше эту тему обсуждал тут, посмотри, можэт поймешь.
Binary,
подробнее можэшь написать? |
|
|
|
|
Posted: Fri Sep 07, 2007 9:28 am |
|
|
om |
Бывалый Жабовод |
|
|
Joined: 26 Sep 2006 |
Posts: 76 |
Location: Россия,Тольятти |
|
|
|
|
|
|
Не слушай грамотеев Они ни одного бота на перле не писали...
вытягивание жида примерно выглядит так:
Code: |
sub InPresence
{
my $sid = shift;
my $presence = shift;
my $from = $presence->GetFrom('jid');
|
Невнимательно посмотрел изначальный пост... исправлюсь чуть позже. Стукни мне om@mytlt.ru, потом сюда кросс-пост сделаю |
|
|
|
|
| | |
Posted: Fri Sep 07, 2007 5:31 pm |
|
|
apxah |
Отметившийся |
|
|
Joined: 05 Sep 2007 |
Posts: 19 |
Location: 48@conference.jabber.ru |
|
|
|
|
|
|
om,
спасибо, но йа ужэ сам разобрался. Просто изменил алноритм вырезания подстроки:
Code: | open (RESULT, ">$path/result2");
print RESULT $presence->GetXML();
close RESULT;
open (RESULTT, "$path/result2");
@aa=<RESULTT>;
close RESULTT;
$_ = $aa[0];
@ae=split(/affiliation/, $aa[0]);
@af=split(/'/, $ae[1]);
$affiliation = $af[1];
@ag=split(/role/, $aa[0]);
@ah=split(/'/, $ag[1]);
$role = $ah[1];
if (/jid/) {
@ac=split(/jid/, $aa[0]);
@ad=split(/'/, $ac[1]);
$jid=$ad[1];
} else {
$jid="[hidden]";
}
utf8::decode($affiliation);
utf8::decode($role);
utf8::decode($jid);
open (PRESENSE, ">$path/data/$from-$resource");
print PRESENSE "$jid
$affiliation
$role";
close PRESENSE; | .
Теперь надо добавить функцию поиска в гугл. Как это реализовать?
З.Ы. Бота можно пасматреть в 48@c.j.r или написать мне в личку (arhanrus@jabber.ru) и йа поставлю его в любую комнату на conference.jabber.ru (на другие сервера ставить не буду) |
|
|
|
|
| | |
Posted: Mon Sep 10, 2007 3:07 pm |
|
|
om |
Бывалый Жабовод |
|
|
Joined: 26 Sep 2006 |
Posts: 76 |
Location: Россия,Тольятти |
|
|
|
|
|
|
Ужас, я такого извращения с перлом не видел |
|
|
|
|
Posted: Fri Sep 14, 2007 2:34 pm |
|
|
apxah |
Отметившийся |
|
|
Joined: 05 Sep 2007 |
Posts: 19 |
Location: 48@conference.jabber.ru |
|
|
|
|
|
|
om,
можэт это и "извращение", но бот получается намного стабильнее, чем бот на питоне или пыхе |
|
|
|
|
Posted: Fri Sep 14, 2007 4:30 pm |
|
|
feez |
Разработчик |
|
|
Joined: 01 Jan 1970 |
Posts: 146 |
|
|
|
|
|
|
|
Quote: |
Code: |
@ae=split(/affiliation/, $aa[0]);
@af=split(/'/, $ae[1]);
$affiliation = $af[1];
|
|
вот на таком коде будет ошибка в двух местах:
Code: |
<presence jid="affiliation@jabber.ru" affiliation=".....
|
из-за двойной кавычки. Из-за слова affiliation в jid-е.
Для перла есть удобный XML парсер. При этом в примере показано, что XML читается из файла. Так будет работать, но если вдруг будешь парсить XML поток из сети, то обычный XML парсер будет глючить, и твой код тоже. Нужен специальный парсер, так как там свои асинхронные ньюансы. |
|
|
|
|
Posted: Sat Sep 15, 2007 3:40 pm |
|
|
apxah |
Отметившийся |
|
|
Joined: 05 Sep 2007 |
Posts: 19 |
Location: 48@conference.jabber.ru |
|
|
|
|
|
|
мда, я этого не учел... зафтра вечером постараюсь исправить..... |
|
|
|
|
Posted: Sun Sep 16, 2007 4:21 pm |
|
|
apxah |
Отметившийся |
|
|
Joined: 05 Sep 2007 |
Posts: 19 |
Location: 48@conference.jabber.ru |
|
|
|
|
|
|
feez,
што вот ты меня в заблуждение вводишь? Нет тут никаких ашыбак.
1. JID не можэт находицца в двойных кавычках.
2. Вот стандартный XML-код статуса:
Code: | <x xmlns='http://jabber.org/protocol/muc#user'><item affiliation='member' jid='letruke@jabbe.net.ru/Bombus-Ultra' role='moderator'/></x> |
Заметь, affiliation находится перед JID-ом, и будет выбрано именно $ae[1] равное Code: | ='member' jid='letruke@jabbe.net.ru/Bombus-Ultra' role='moderator'/></x></presence> |
или, по твоему примеру
Code: | <x xmlns='http://jabber.org/protocol/muc#user'><item affiliation='member' jid='affiliation@jabbe.net.ru/Bombus-Ultra' role='moderator'/></x> |
$ae[1] будет равно
|
|
|
|
|
| | |
Posted: Sun Sep 16, 2007 4:25 pm |
|
|
Binary |
Разработчик |
|
|
Joined: 17 Dec 2004 |
Posts: 1712 |
Location: Омск |
|
|
|
|
|
|
arhanrus wrote: | feez,
што вот ты меня в заблуждение вводишь? Нет тут никаких ашыбак.
1. JID не можэт находицца в двойных кавычках. |
это где это такое написано???
Quote: | 2. Вот стандартный XML-код статуса:
Code: | <x xmlns='http://jabber.org/protocol/muc#user'><item affiliation='member' jid='letruke@jabbe.net.ru/Bombus-Ultra' role='moderator'/></x> |
Заметь, affiliation находится перед JID-ом, и будет выбрано именно $ae[1] равное Code: | ='member' jid='letruke@jabbe.net.ru/Bombus-Ultra' role='moderator'/></x></presence> |
или, по твоему примеру
Code: | <x xmlns='http://jabber.org/protocol/muc#user'><item affiliation='member' jid='affiliation@jabbe.net.ru/Bombus-Ultra' role='moderator'/></x> |
$ae[1] будет равно
|
аттрибуты могут идти в любом порядке, не порите чушь. |
|
_________________ And I'm feeling good! |
|
|
|
| | |
Posted: Mon Sep 17, 2007 10:57 am |
|
|
om |
Бывалый Жабовод |
|
|
Joined: 26 Sep 2006 |
Posts: 76 |
Location: Россия,Тольятти |
|
|
|
|
|
|
Net::Jabber (как и Net::XMPP) умеют парсить XML по-умолчанию... не надо ставить костыли там, где есть нормальные опорные конструкции |
|
|
|
|
| | |
Posted: Mon Sep 17, 2007 4:27 pm |
|
|
apxah |
Отметившийся |
|
|
Joined: 05 Sep 2007 |
Posts: 19 |
Location: 48@conference.jabber.ru |
|
|
|
|
|
|
Binary,
Binary wrote: | arhanrus wrote: | feez,
што вот ты меня в заблуждение вводишь? Нет тут никаких ашыбак.
1. JID не можэт находицца в двойных кавычках. |
это где это такое написано??? |
Quote: | Основное отличие между одинарными и двойными кавычками заключается в том, что строка в одинарных кавычках является литералом в чистом виде. Поэтому ее содержимое никак не интерпретируется. В строках, заключенных в двойные кавычки, могут находиться имена переменных и последовательности управляющих символов. | (цитата из справочника по XML).
Поэтому если бы код был
Code: | <x xmlns="http://jabber.org/protocol/muc#user"><item affiliation="member" jid="letruke@jabbe.net.ru/Bombus-Ultra" role="moderator"/></x> | ,
то Code: | jid="letruke@jabbe.net.ru/Bombus-Ultra" | был бы неверен, так как @jabbe воспринимался бы как массив.
om,
йа ведь как только пришол сюда сразу спросил:
Quote: | Как вытащить jid юзера из xml кода? | ,
патаму что на перле йа начинающий и многава не знаю, а следовательно не умею пользоваться парсерами Quote: | Net::Jabber (как и Net::XMPP) | . Можэт поможэшь? |
|
|
|
|
| | |
Posted: Tue Sep 18, 2007 9:08 am |
|
|
Binary |
Разработчик |
|
|
Joined: 17 Dec 2004 |
Posts: 1712 |
Location: Омск |
|
|
|
|
|
|
|
_________________ And I'm feeling good! |
|
|
|
JRuDevels Forum Index » Разработка и проектирование [Devel] |
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
All times are GMT + 3 Hours
Page 1 of 5
Goto page 1, 2, 3, 4, 5 Next
|
|
|
|