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 [url=https://github.com/Jajcus/pyxmpp/blob/master/examples/echobot.py]echobota[/url] 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-xmppjabber-w-perlanyevent-cz-1/
http://devrandom.pl/blog/2012/11/20/prosty-bot-xmppjabber-w-perlanyevent-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
Time (s) | Query |
---|---|
0.00012 | SET CHARSET latin2 |
0.00005 | SET NAMES latin2 |
0.00101 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.15.31.27' WHERE u.id=1 |
0.00099 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.15.31.27', 1732856922) |
0.00055 | SELECT * FROM punbb_online WHERE logged<1732856622 |
0.00073 | SELECT topic_id FROM punbb_posts WHERE id=278242 |
0.00104 | SELECT id FROM punbb_posts WHERE topic_id=26635 ORDER BY posted |
0.00087 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=26635 AND t.moved_to IS NULL |
0.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00090 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=26635 ORDER BY p.id LIMIT 0,25 |
0.00086 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=26635 |
Total query time: 0.00717 s |