2013-05-02 3 views
16

XMPPHPを使用してオンラインステータスを取得しようとしていますが、$connから自分のステータスを取得できないようです。ここに私のコードの抜粋は以下のとおりです。 XMPPHP GTalkステータス

require_once('XMPPHP/XMPP.php'); 

$conn = new XMPPHP_XMPP('talk.google.com', 5222, '[email protected]', '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()を試みたが、運(私は鉱山に興味が)。

どのように私はこれを動作させることができますか?ありがとう。

+0

私はXMPPに統合して以来、しばらくしています。ロギングレベルを上げて、Googleからの生の応答を表示できますか? – Kevin

+0

どのようにステータスを意味するのですか?ステータスメッセージまたはステータスAway/Onlineなど?ステータスメッセージが必要な場合は$ conn-> presence($ status = 'Controller available');あなたのステータスです。 – pregmatch

答えて

5

私は過去2日間この問題に取り組んでおり、最終的には仕事を開始するためのハックを見つけました。私はここでそれを文書化しています。なぜなら、これは答えを探している間に私にとって最も頻繁に現れたスタックオーバーフローの問題だったからです。

$ conn-> presence()メソッドは、あなたのプレゼンス情報をサーバーに送信するだけでなく、サーバーからのすべての連絡先のプレゼンス情報も収集します。基本的な問題は、$ conn-> presence()コマンドを送信するときに、スクリプトがサーバからこの情報を受信して​​処理する時間を与える必要があることです。サンプルのスクリプトはすべてこれを行うために$ conn-> processUntil( 'presence')を使いますが、何らかの理由ですべてのロスタ情報を取得するのに十分な時間を停止しませんでした。

これを回避するために、ついに$ conn-> processTime(2)を使用しました。処理を続ける前に2秒待たなければなりませんでした。これは私の目的にとっては十分ですが、明らかにハックです。だから、例として、あなたのコードを使用して:

require_once('XMPPHP/XMPP.php'); 

$conn = new XMPPHP_XMPP('talk.google.com', 5222, '[email protected]', '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 = '[email protected]'; // put your jid here 
$status = $conn->roster->getPresence($my_jid); 
echo $status['show']; 

あなたが提供するJidのオンラインステータス。

この例では、可能な限り最も詳細なログを表示するようコンストラクターを変更しました。これは私がこれを手助けする鍵でした。

もっと良い解決策は明らかに$ conn-> processUntil( 'roster')コマンドをフレームワークに追加することです。しかし、この枠組みは5年後に更新されていないので、それは起こりそうもない。

これによって、誰かが私がそれを解決しようとして失った時間を節約できますことを願っています。乾杯。

+0

それだけです。ありがとう! – ialphan

+0

PHPの特定のサービスに対して、指定されたユーザのインス​​タントメッセンジャーステータス(オンライン、オフライン)を取得します。サポートされているサービスはAIM、Facebook *、GTalk、ICQ、Skype、YAHOOです:https://github.com/ialphan/IMStatus – ialphan

+0

こんにちは、私は $ conn-> processUntil( 'session_start')のようなものを追加しました。 $ conn-> presence(); $ my_jid = '[email protected]'; //あなたのjidをここに入れてください $ status = $ conn-> roster-> getPresence($ my_jid); echo $ status ['show']; 私にとってはうまくいかないようです。ユーザーのステータスを取得できません。それは空白を示しています! – Shreejibawa

-1

getPresence()に自分のjid([email protected])を渡して、自分の存在を要求できる必要があります。例えば

は:

$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

+0

動作しません。 – ialphan

+0

なぜですか?あなたの名簿は空ですか?すべての出力?エラー?フィードバックはありません。私はお手伝いできません。 – Kevin

+0

あなたは私のコメントにもっと説明的であったはずです。エラーはなく、返された "NULL"だけでした。あなたは働くテストページを持っていますか? – ialphan

関連する問題