Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.



Użytkownik
witam :)
potrzebuję napisać bota który będzie odsyłał pewne raporty jako proste obrazki (jakby nic trudnego) ale nie mogę się przebić przez jeden problem ze znakami specjalnymi w XMLu
a mianowicie, skorzystałem z biblioteki pythonowej pyxmpp, oparłem się na przykładzie echobota który napisał Jajcus i tak robię sobie tak wiadomość:
m=Message(
to_jid=stanza.get_from(),
from_jid=stanza.get_to(),
stanza_type=stanza.get_type(),
subject=subject,
body=body)
n = m.xmlnode.newChild(None, "html", None)
ns = n.newNs("http://jabber.org/protocol/xhtml-im", "t")
n.setNs(ns)
n1 = n.newChild(None, "body", ' HTML <br/>linia 2');
ns1 = n1.newNs("http://www.w3.org/1999/xhtml", "t");tyle że tak utworzona wiadomość dociera do mnie w tej postaci:
<message from="bot...@bot..." type="chat" to="wojtek@........../Dunwyn"> <body>d</body> <html xmlns="http://jabber.org/protocol/xhtml-im"> <body xmlns="http://www.w3.org/1999/xhtml"> HTML <br/>linia 2</body> </html> </message>
pytanie: można to wysłać bez konwertowania na lt i gt ?
PSI to jakoś tak wysyła jak wysyłam obrazki...
Offline







Podobno człowiek...;)








Czy to musi być Python?
Pytam, bo mam kawałek robota w Perlu (nawet działa na lokalnym serwerku Ejabberd):
#! /usr/bin/perl
use strict;
use warnings;
use Net::XMPP;
#################
# Config params #
#################
my $hostName = 'domena.tld';
my $portNumber = 5222;
my $componentName = 'domena.tld.pl';
my $userName = 'xmpp';
my $passWord = 'hasełko';
my $resource = 'robot';
my $tls = 1;
my $connectionType = 'tcpip';
my $debugLevel = 0;
# Create the client
my $bot = new Net::XMPP::Client(debuglevel => $debugLevel);
$bot->SetCallBacks(
onconnect => &connectedCB, # gets called when connected
onauth => &authedCB, # when authenticated
ondisconnect => &disconnectedCB, # when disconnected
);
$bot->SetMessageCallBacks( # callback for messages
chat => &messageCB, # chat-type messages
);
$bot->Execute( # entering
hostname => $hostName,
port => $portNumber,
tls => $tls,
username => $userName,
password => $passWord,
resource => $resource,
register => 0,
connectiontype => $connectionType,
);
##############
# Callbacks #
##############
sub messageCB { # call back implementing the echo
my $sid = shift;
my $msg = shift;
my $from = $msg->GetFrom;
my $to = $msg->GetTo;
my $name;
my $data;
print "From : ", $from, "\n",
"Subject : ", $msg->GetSubject, "\n",
$msg->GetBody, "\n";
$name = $msg->GetBody;
$data = $msg->GetBody;
print ">>$name<<\n";
print $data, "\n";
$bot->MessageSend(
to => $from,
from => $to,
resource => 'Gaim',
type => $msg->GetType,
subject => $msg->GetSubject,
body => $data,
);
}
sub connectedCB {
print "Connected\n";
}
sub authedCB {
print "Authed\n";
$bot->PresenceSend;
}
sub disconnectedCB {
print "Disconnected\n";
}Muszę go jeszcze dokończyć, żeby robił coś konkretniejszego (jak znajdę wolniejszą chwilkę), w każdym razie tu masz opis podobnego robota, po polskiemu ;):
http://devrandom.pl/blog/2012/11/08/prosty-bot-xmpp … nyevent-cz-1/
http://devrandom.pl/blog/2012/11/20/prosty-bot-xmpp … -cz-2-moduly/
Na razie grzecznie loguje się po TLS, wyświetla znajomych online i wyświetla wiadomości na konsolę, muszę mu jeszcze dorobić socket UNIX, żeby wysyłał komunikaty na wskazany adres, zawiadamiając o zdarzeniach (np wysyłał online zamówienia złożone w sklepie internetowym, do robota po drugiej stronie, który będzie te zamówienia wrzucał do bazy systemu księgowego. albo coś podobnego.)
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2014-10-30 19:33:15)
Offline



Użytkownik
nie musi być python, ale jakoś perl mnie trochę nie leżał zawsze
mój bot w pythonie działa i odpowiada i wszystko ok., tylko mi brakuje zdolności(?) żeby zrozumieć jak dodać HTMLa po prostu...
wydaje mi się że to proste, może nie rozumiem dokumentacji :(
Offline







Podobno człowiek...;)








Html jako załącznik? czy w treści wiadomości?
Może base64 da radę?
Ostatnio edytowany przez Jacekalex (2014-10-30 23:20:58)
Offline



Użytkownik
chodziło o to co zapytałem w pierwszym poście, że możesz zgodnie z XEP-0071 przesłać w wiadomości treść XHTML, odpisał mi wczoraj wieczorem sam bóg od pyxmpp z taką poradą:
html = libxml2.htmlParseDoc(" HTML <br/>linia 2", "utf-8")
n1 = n.newChild(None, "body", None)
n1.setNs(n1.newNs("http://www.w3.org/1999/xhtml", None))
html_body = html.xpathEval("/html/body")[0]
n1.addChildList(html_body.children)i powiem Ci że mimo Jego sceptycznego podejścia i ostrzeżenia że może to dziwnie działać jednak działa przy prostych rzeczach. w ten sposób można np. (bo docelowo to ma być realizowane) przesyłać proste obrazki jako treść HTML
<img alt="bla bla bla" src="data:image/png;base64,iVBORw0KGgoAAAANS...AElFTkSuQmCC" align="left"/> treść...
i to własnie w treści musi iść ze znakami <> a nie < i > ;)
Offline