如何从网页连接到Facebook聊天?(使用XMPP?Strophe?Punjab?)

7
我想在一个网页中实现FB-chat。我在Facebook API中查找,发现只有使用XMPP才允许聊天。首先我尝试使用Pidgin连接到FB-chat,结果很好。我的结论是FB-chat服务器充当了XMPP服务器。这是真的吗?
我阅读了XMPP的相关信息,它似乎需要在客户端和服务器之间建立一个开放的TCP连接来交换XML数据包,但从网站(通过JavaScript和无插件)中不可能建立TCP连接,只能进行http请求/响应,没有TCP连接。这意味着应该在两者之间有某种代理,并且对于身份验证,FB API建议使用X-FACEBOOK-PLATFORM SASL(而不是DIGEST MD5,因为存在代理)。我没有找到明确的教程或步骤,希望得到帮助。
关于从Web或浏览器使用XMPP客户端的更多研究,我看到我应该使用一个名为Strophe的库(基于BOSH协议),在其他答案中还有一种称为Punjab的连接管理器。我阅读了这个BOSH协议,它似乎是解决方案,但在某些地方我发现它在FB中不被允许(尽管我不确定这个信息是否正确)。我试图设置它们,但我完全困惑了该如何开始以及我真正应该做什么。
对于strophe,我没有找到一个真正的教程来实现它,而在我找到的东西中,他们建议首先设置像ejabberd这样的jabber服务器(我没有理解为什么需要这样做)。
我的问题是:
有人能够建议我应该实现哪种架构来实现我的目标吗?
那么会有:网页 ->(HTTP) -> Strophe ->(TCP) -> FB-chat还是其中会有XMPP服务器?为什么?
感谢任何回答我的问题。请提供一些链接以了解如何实现所有这些内容。我对所有这些都是新手,这使我迷失了一周以上。
如果有人已经做过这个,请帮忙。非常感谢。
3个回答

3

关于 Facebook 聊天服务器的信息:

Protocol: XMPP or Jabber
Username: mathvdh
Domain: chat.facebook.com
Jabber ID: mathvdh@chat.facebook.com
Password: <your Facebook password>
Port: 5222
Server: chat.facebook.com
Use SSL/TLS: no
Allow plaintext authentication: no

我认为Strophe和Punjab应该是FB聊天的一种工作组合,可以在这里查看:XMPP library for facebook chat

而且我认为架构更像:

客户端网页/js/Strophe <-> 您的服务器/Punjab <-> Facebook XMPP聊天服务器


感谢@dwarfy的快速回答。所以,我的理解是Strophe是一种类似于Jquery的JS库,我可以将其包含在我的页面中,然后使用它的函数连接并发送消息。在其API 链接中,这些函数被解释了,但没有示例说明如何使用它们。你知道是否有这样的教程或示例吗? Punjab将成为服务器和客户端(在我的网页内)之间的BOSH CM,还能否建议一个入门链接?(我理解的对吗?)非常感谢 - sabah
这个看起来还不错:http://www.slideshare.net/metajack/the-real-time-web-with-xmpp,还有一些笔记和代码在这里:http://ko-kr.facebook.com/note.php?note_id=118657671505760,同时在strophe的github上也有一些例子:https://github.com/metajack/strophejs/tree/master/examples。 - dwarfy
感谢@dwarfy指引我使用strophe。我现在正在尝试安装punjab,然后再尝试使用strophe库。安装punjab之前需要先安装Jabber服务器(我不知道为什么需要),但无论如何我会按照步骤进行并查看结果。 - sabah
@dwarfy,你能告诉我在哪里设置域名、服务器、端口和其他参数吗? - Hunt
@Hunt 抱歉,但我不知道你在说什么?我不知道,我从未使用过这个配置.. - dwarfy
@dwarfy 好的,你能否请看一下这个帖子 http://stackoverflow.com/questions/8998264/remote-connection-failed-when-connecting-with-facebook-chat - Hunt

1

我也在尝试解决这个问题。目前我已经决定使用以下设置:

Jappix mini(使用JSJAC.js库)<-> 在我的服务器上安装的node.js上的node-xmpp-bosh <-> Facebook服务器。

Jappix mini很难找到,但它似乎是最好的开源聊天栏,所以值得在这里提一下。

我还没有完全设置好,但如果有进展,我会在这里更新。主要问题是如何让JSJAC使用Facebook API密钥身份验证。我找不到任何信息或示例,但我找到了strophe库的这个插件,也许可以适应:

https://github.com/rubenjgarciab/turedsocial/blob/master/strophe-plugins/src/facebook.js

最后,你不能在javascript中包含你的Facebook秘钥(因为它是秘密的!),所以你需要使用Facebook REST API auth.promoteSession服务器端来生成一个会话秘钥,该秘钥可以在javascript中用于签署X-FACEBOOK-PLATFORM认证请求。

希望这有所帮助,如果我让它工作了,我会再添加更多内容。


1
感谢@chris14679。现在我已让这个组合工作: strophe/js>punjab>XMPP服务器。我也可以尝试使用node-xmpp-bosh,因为我经常使用node。对于XMPP服务器,它仍然不是facebook,但使用gmail和私人jabber可以正常工作。登录Facebook是一个大问题(也许是不允许的)。请注意使用REST API,因为它正在被弃用。如果您找到了登录Facebook的方法,请告诉我。 - sabah
@dwarfy和@你们两位的回答非常感谢。在客户端使用strophe可以解决我的问题。作为连接管理器,我可以选择punjab或node-xmpp-bosh(我选择了node因为我习惯用它)。我还需要使用facebook.js插件来支持Strophe,但最新版本需要进行一些修改。 - sabah

0

您好,

如之前所提到的,Punjab <-> strophe.js 是可行的。我在这里 fork 了 Facebook 的 strophe 客户端:https://github.com/javierfigueroa/turedsocial 并添加了一个示例。

希望这能有所帮助。


我尝试在安装了strophe和punjab之后运行您的示例,然后在facebook.html中设置了appid和应用程序秘钥。在登录Facebook后,当我传递Facebook Chat JID和密码并按下连接按钮时,我收到了错误<body xmlns='http://jabber.org/protocol/httpbind' type='terminate' condition='remote-connection-failed'/>,请问您能帮助我吗? - Hunt
我已经为用户设置了{scope: 'email,user_online_presence,friends_online_presence,xmpp_login'}权限。 - Hunt
嗨,亨特,这可能是一个跨域问题。请确保从您的计算机发送到 Facebook 的请求与 Facebook 应用程序配置中指定的域相同。如果您正在本地运行 PunJab,则可能会发送“localhost”请求。 - Javier Figueroa
这需要使用ejabberd还是只用punjab就可以了? - Hunt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接