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/.
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
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
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
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
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