JRuDevels

Jabber Russian Developers Forum.
Log in Register FAQ Memberlist Search JRuDevels Forum Index

JRuDevels Forum Index » Разработка и проектирование [Devel] » Бот на Perl Goto page 1, 2, 3, 4, 5  Next
Post new topic  Reply to topic View previous topic :: View next topic 
Бот на Perl
PostPosted: Wed Sep 05, 2007 9:07 pm Reply with quote
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:28) Архангел: info Nart
(16:28:28) Nart: Архангел:
48@conference.jabber.ru
Nart
newbot@jabber.ru
Nart
owner
moderator


а вот ответ с ашыпкой:

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").
View user's profile Send private message Send Jabber-message ICQ Number
PostPosted: Thu Sep 06, 2007 3:23 pm Reply with quote
leksey
Графоман
Графоман
Joined: 17 Dec 2004
Posts: 1909
Location: Москва, Тушино




Чего-то я не понял, при чем тут xml-консоль. Это бот с ткаббером работает?
View user's profile Send private message Send Jabber-message Visit poster's website HabaHaba - Fast communicate
PostPosted: Thu Sep 06, 2007 3:25 pm Reply with quote
Binary
Разработчик
Разработчик
Joined: 17 Dec 2004
Posts: 1712
Location: Омск




использовать xml-парсер? xpath?

_________________
And I'm feeling good!
View user's profile Send private message Send Jabber-message Visit poster's website HabaHaba - Fast communicate
PostPosted: Fri Sep 07, 2007 6:51 am Reply with quote
apxah
Отметившийся
Отметившийся
Joined: 05 Sep 2007
Posts: 19
Location: 48@conference.jabber.ru




leksey,
бот работает из консоли. Раньше эту тему обсуждал тут, посмотри, можэт поймешь.

Binary,
подробнее можэшь написать?
View user's profile Send private message Send Jabber-message ICQ Number
PostPosted: Fri Sep 07, 2007 9:28 am Reply with quote
om
Бывалый Жабовод
Бывалый Жабовод
Joined: 26 Sep 2006
Posts: 76
Location: Россия,Тольятти




Не слушай грамотеев Smile Они ни одного бота на перле не писали...
вытягивание жида примерно выглядит так:
Code:

sub InPresence
{
    my $sid = shift;
    my $presence = shift;
   
    my $from = $presence->GetFrom('jid');


Невнимательно посмотрел изначальный пост... исправлюсь чуть позже. Стукни мне om@mytlt.ru, потом сюда кросс-пост сделаю
View user's profile Send private message Send Jabber-message Visit poster's website HabaHaba - Fast communicate
PostPosted: Fri Sep 07, 2007 5:31 pm Reply with quote
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 (на другие сервера ставить не буду)
View user's profile Send private message Send Jabber-message ICQ Number
PostPosted: Mon Sep 10, 2007 3:07 pm Reply with quote
om
Бывалый Жабовод
Бывалый Жабовод
Joined: 26 Sep 2006
Posts: 76
Location: Россия,Тольятти




Ужас, я такого извращения с перлом не видел Shocked
View user's profile Send private message Send Jabber-message Visit poster's website HabaHaba - Fast communicate
PostPosted: Fri Sep 14, 2007 2:34 pm Reply with quote
apxah
Отметившийся
Отметившийся
Joined: 05 Sep 2007
Posts: 19
Location: 48@conference.jabber.ru




om,
можэт это и "извращение", но бот получается намного стабильнее, чем бот на питоне или пыхе
View user's profile Send private message Send Jabber-message ICQ Number
PostPosted: Fri Sep 14, 2007 4:30 pm Reply with quote
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 парсер будет глючить, и твой код тоже. Нужен специальный парсер, так как там свои асинхронные ньюансы.
View user's profile Send private message Send Jabber-message HabaHaba - Fast communicate
PostPosted: Sat Sep 15, 2007 3:40 pm Reply with quote
apxah
Отметившийся
Отметившийся
Joined: 05 Sep 2007
Posts: 19
Location: 48@conference.jabber.ru




мда, я этого не учел... зафтра вечером постараюсь исправить.....
View user's profile Send private message Send Jabber-message ICQ Number
PostPosted: Sun Sep 16, 2007 4:21 pm Reply with quote
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] будет равно
Code:
='member' jid='
View user's profile Send private message Send Jabber-message ICQ Number
PostPosted: Sun Sep 16, 2007 4:25 pm Reply with quote
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] будет равно
Code:
='member' jid='

аттрибуты могут идти в любом порядке, не порите чушь.

_________________
And I'm feeling good!
View user's profile Send private message Send Jabber-message Visit poster's website HabaHaba - Fast communicate
PostPosted: Mon Sep 17, 2007 10:57 am Reply with quote
om
Бывалый Жабовод
Бывалый Жабовод
Joined: 26 Sep 2006
Posts: 76
Location: Россия,Тольятти




Net::Jabber (как и Net::XMPP) умеют парсить XML по-умолчанию... не надо ставить костыли там, где есть нормальные опорные конструкции
View user's profile Send private message Send Jabber-message Visit poster's website HabaHaba - Fast communicate
PostPosted: Mon Sep 17, 2007 4:27 pm Reply with quote
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)
. Можэт поможэшь?
View user's profile Send private message Send Jabber-message ICQ Number
PostPosted: Tue Sep 18, 2007 9:08 am Reply with quote
Binary
Разработчик
Разработчик
Joined: 17 Dec 2004
Posts: 1712
Location: Омск




насчет кавычек... я впал в транс Smile чуднО то как Smile

http://www.intuit.ru/department/internet/xml/3/5.html

_________________
And I'm feeling good!
View user's profile Send private message Send Jabber-message Visit poster's website HabaHaba - Fast communicate
Бот на Perl
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
  
  
 Post new topic  Reply to topic  


Powered by phpBB © 2001-2004 phpBB Group
phpBB Style by Vjacheslav Trushkin