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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2014-10-30 18:40:59

  Graffi - Użytkownik

Graffi
Użytkownik
Skąd: Sulejówek
Zarejestrowany: 2005-10-03
Serwis

pyxmpp - wiadomość HTML

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ść:

Kod:

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:

Kod:

<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

 

#2  2014-10-30 19:21:08

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: pyxmpp - wiadomość HTML

Czy to musi być Python?

Pytam, bo mam kawałek robota w Perlu (nawet działa na lokalnym serwerku Ejabberd):

Kod:

#! /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)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3  2014-10-30 21:39:43

  Graffi - Użytkownik

Graffi
Użytkownik
Skąd: Sulejówek
Zarejestrowany: 2005-10-03
Serwis

Re: pyxmpp - wiadomość HTML

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

 

#4  2014-10-30 23:20:29

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: pyxmpp - wiadomość HTML

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)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#5  2014-10-31 08:18:11

  Graffi - Użytkownik

Graffi
Użytkownik
Skąd: Sulejówek
Zarejestrowany: 2005-10-03
Serwis

Re: pyxmpp - wiadomość HTML

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ą:

Kod:

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

Kod:

<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

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.011 seconds, 13 queries executed ]

Informacje debugowania

Time (s) Query
0.00010 SET CHARSET latin2
0.00008 SET NAMES latin2
0.00123 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.22.249.229' WHERE u.id=1
0.00101 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.22.249.229', 1732546794)
0.00044 SELECT * FROM punbb_online WHERE logged<1732546494
0.00079 DELETE FROM punbb_online WHERE ident='13.59.112.169'
0.00090 DELETE FROM punbb_online WHERE ident='54.36.149.70'
0.00166 SELECT topic_id FROM punbb_posts WHERE id=278229
0.00006 SELECT id FROM punbb_posts WHERE topic_id=26635 ORDER BY posted
0.00089 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.00110 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.00105 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=26635
Total query time: 0.00936 s