XMPPHP GTalk状态

时间:2013-05-02 02:33:13

标签: php google-talk xmpphp

我正在尝试使用XMPPHP获取我的在线状态,而我似乎无法从$conn获得任何具有我状态的内容。以下是我的代码片段:

require_once('XMPPHP/XMPP.php');

$conn = new XMPPHP_XMPP('talk.google.com', 5222, 'xxxx@gmail.com', 'xxxxx', 'xmpphp', 'gmail.com', $printlog = false, $loglevel = XMPPHP_Log::LEVEL_INFO);

$conn->connect();
$conn->processUntil('session_start');
$conn->presence($status='Controller available.');
var_dump($conn); // this gives me a long output but nothing about status. ex: http://pastebin.com/yfs1V5Jb

我也尝试getRoster()查看我朋友的信息列表(虽然我只对我感兴趣)但没有运气。

有什么建议我可以让它工作吗?感谢。

2 个答案:

答案 0 :(得分:5)

在过去的两天里,我一直在努力解决这个问题,最后想出了一个让事情发挥作用的黑客。我在这里记录它,因为这是我在搜索答案时最常出现的堆栈溢出问题。

$ conn-> presence()方法不仅会将您的状态信息发送到服务器;它还从服务器收集每个联系人的状态信息。基本问题是,当您发送$ conn-> presence()命令时,您必须给脚本一些时间来从服务器接收和处理此信息。示例脚本都使用$ conn-> processUntil('presence')来执行此操作,但由于某些原因,我没有暂停足够长的时间以获取所有名单信息。

为了解决这个问题,我终于使用了$ conn-> processTime(2),迫使事情等待2秒再继续。这对我的目的来说足够好,但显然是一个黑客。所以以你的代码为例:

require_once('XMPPHP/XMPP.php');

$conn = new XMPPHP_XMPP('talk.google.com', 5222, 'xxxx@gmail.com', 'xxxxx', 'xmpphp', 'gmail.com', $printlog = true, $loglevel = XMPPHP_Log::LEVEL_VERBOSE);

$conn->connect();
$conn->processUntil('session_start');
$conn->presence($status='Controller available.');
$conn->processTime(2);

// now see the results
$roster = $conn->roster->getRoster();
print_r($roster); // you should now see roster array with presence info for each contact

要更具体地回答您的问题,您可以使用以下代码代替“现在看到结果”下的代码:

$my_jid = 'user@domain.tld'; // put your jid here
$status = $conn->roster->getPresence($my_jid);
echo $status['show'];

这将显示您提供的jid的在线状态。

请注意,在此示例中,我还更改了构造函数以显示最详细的日志。这是帮助我完成这项工作的关键。

更好的解决方案显然是在框架中添加$ conn-> processUntil('roster')命令,或类似的东西。但由于该框架未在5年内更新,因此不太可能发生。

希望这可以节省一些我失去的时间来试图解决它。欢呼声。

答案 1 :(得分:-1)

您应该可以通过将自己的jid(username@gmail.com)传递给getPresence()来请求您自己的存在;

例如:

$status = $conn->roster->getPresence($jid);
var_dump($status);    // Make sure you are retrieving a populated presence array
echo $status['show']; // available,unavailable,dnd
echo $status['status']; //status message

很久以前我遇到了这个库没有填充名册记录的问题。如果您遇到此问题,则应该应用此处详细说明的修补程序:https://code.google.com/p/xmpphp/issues/detail?id=44&q=empty