2011-01-19 117 views
3

我试图创建一个使用Python的xmpppy超过Facebook的聊天消息发送一个非常简单的脚本。xmpppy和Facebook聊天集成

 
import xmpp 
FACEBOOK_ID = "[email protected]" 
PASS = "password" 
SERVER = "chat.facebook.com" 
jid=xmpp.protocol.JID(FACEBOOK_ID) 
C=xmpp.Client(jid.getDomain(),debug=[]) 
if not C.connect((SERVER,5222)): 
    raise IOError('Can not connect to server.') 
if not C.auth(jid.getNode(),PASS): 
    raise IOError('Can not auth with server.') 
C.send(xmpp.protocol.Message("[email protected]","Hello world",)) 

此代码通过Google即时通讯发送消息,但是当我尝试用facebook我收到此错误:

在查找出错_xmpp-client._tcp.chat.facebook.com

当我从FACEBOOK_ID删除@ chat.facebook.com我得到这个代替:

 
File "gtalktest.py", line 11, in 
    if not C.connect((SERVER,5222)): 
    File "/home/john/xmpppy-0.3.1/xmpp/client.py", line 195, in connect 
    if not CommonClient.connect(self,server,proxy,secure,use_srv) or secureNone and not secure: return self.connected 
    File "/home/john/xmpppy-0.3.1/xmpp/client.py", line 179, in connect 
    if not self.Process(1): return 
    File "/home/john/xmpppy-0.3.1/xmpp/dispatcher.py", line 302, in dispatch 
    handler['func'](session,stanza) 
    File "/home/john/xmpppy-0.3.1/xmpp/dispatcher.py", line 214, in streamErrorHandler 
    raise exc((name,text)) 
xmpp.protocol.HostUnknown: (u'host-unknown', '') 

我也注意到任何时候我导入XMPP我碰到下面当r两个消息unning:

 
/home/john/xmpppy-0.3.1/xmpp/auth.py:24: DeprecationWarning: the sha module is deprecated; use the hashlib module instead 
    import sha,base64,random,dispatcher 
/home/john/xmpppy-0.3.1/xmpp/auth.py:26: DeprecationWarning: the md5 module is deprecated; use hashlib instead 
    import md5 

我是相当新的解决这类问题,并建议,或资源的链接,可以帮助我前进中解决这些问题,将不胜感激。谢谢阅读!

+0

看起来你是在一个正确的方式做所有。尝试将`always`添加到Client构造函数的`debug`参数中:`C = xmpp.Client(jid.getDomain(),debug = ['always'])``。也许这些日志会说多一点。 :) – eigenein 2011-01-19 09:32:21

回答

2

我也开始在同一个项目,并陷入同样的​​问题。我也找到了解决方案。您必须编写Facebook的用户名(因此您必须选择一个用户名),并且这也适用于小型Caps。这是最重要的部分。很可能你也和我一样不会将它写在小帽子里。

1
import xmpp 

FACEBOOK_ID = "[email protected]" 
PASS = "password" 
SERVER = "chat.facebook.com" 

jid=xmpp.protocol.JID(FACEBOOK_ID) 

client=xmpp.Client(jid.getDomain(),debug=['always']) 

if not client.connect((SERVER,5222)): 
    raise IOError('Can not connect to server.') 
if not client.auth(jid.getNode(),PASS): 
    raise IOError('Can not auth with server.') 


message = xmpp.protocol.Message(frm=client.Bind.bound[0], to="-<#_ID_OF_FRIEND>@chat.facebook.com", typ="chat", body="Hello world",) 

client.SendAndWaitForResponse(message) 

这对我有效。无论如何,如果你想知道服务器响应您的查询,使用Client.SendAndWaitForResponse代替Client.send;)