2013-05-02 28 views
16

Ich versuche, meinen Online-Status mit XMPPHP zu bekommen, und ich kann nicht scheinen, etwas zu bekommen, das meinen Status vom $conn hat. Hier ist ein Ausschnitt aus meinem Code:XMPPH GTalk Status

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 

Ich habe auch versucht getRoster() eine Liste meines Freundes Informationen zu sehen (obwohl ich nur daran interessiert, mein ich), aber kein Glück.

Irgendwelche Vorschläge, wie ich das zur Arbeit bringen kann? Vielen Dank.

+0

Es ist eine Weile her, seit ich in XMPP integriert habe. Können Sie den Logging-Level erhöhen und uns die rohe Antwort von Google zeigen? – Kevin

+0

Wie meinst du Status? Statusmeldung oder Status Abwesend/Online usw.? Wenn Sie eine Statusmeldung benötigen, dann $ conn-> presence ($ status = 'Controller available.'); ist dein Status. – pregmatch

Antwort

5

Ich habe in den letzten 2 Tagen mit diesem Problem gerungen, und schließlich einen Hack gefunden, um Dinge zum Laufen zu bringen. Ich dokumentiere es hier, weil dies die Frage des Stack-Überlaufs war, die mir am häufigsten bei der Suche nach Antworten erschien.

Die $ conn-> presence() -Methode sendet nicht nur Ihre Anwesenheitsinformationen an den Server; Es sammelt auch Anwesenheitsinformationen für jeden Kontakt vom Server. Das grundlegende Problem besteht darin, dass Sie beim Senden des Befehls $ conn-> present() dem Skript Zeit geben müssen, diese Informationen vom Server zu empfangen und zu verarbeiten. Die Beispielskripte verwenden $ conn-> processUntil ('presence'), um dies zu tun, aber aus irgendeinem Grund pausierte ich die Dinge nicht lange genug, um alle Roster-Informationen zu erhalten.

Um dies zu umgehen, habe ich schließlich nur $ conn-> processTime (2) verwendet, zwingt die Dinge zu warten 2 Sekunden, bevor Sie fortfahren. Das ist gut genug für meine Zwecke, aber ist eindeutig ein Hack. So Ihr Code als Beispiel:

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 

Um Ihre Frage genauer zu beantworten, können Sie den folgenden anstelle des Codes unter Verwendung „jetzt die Ergebnisse sehen“:

$my_jid = '[email protected]'; // put your jid here 
$status = $conn->roster->getPresence($my_jid); 
echo $status['show']; 

Das wird angezeigt der Online-Status für die von Ihnen angegebene ID.

Beachten Sie, dass ich in diesem Beispiel auch den Konstruktor änderte, um das ausführlichste mögliche Protokoll anzuzeigen. Dies war der Schlüssel, um mir dabei helfen zu können.

Eine bessere Lösung wäre natürlich, einen $ conn-> processUntil ('roster') Befehl zum Framework hinzuzufügen, oder so ähnlich. Aber da das Framework in 5 Jahren nicht aktualisiert wurde, ist das unwahrscheinlich.

Hoffentlich wird dies jemandem die Stunden sparen, die ich verloren habe zu versuchen, es zu lösen. Prost.

+0

Das ist es. Vielen Dank! – ialphan

+0

Erhalten Sie den Instant Messenger-Status (online, offline) des angegebenen Benutzers für einen bestimmten Dienst in PHP. Unterstützte Dienste sind AIM, Facebook *, GTalk, ICQ, Skype und Yahoo: https://github.com/ialphan/IMStatus – ialphan

+0

Hallo, ich habe hinzugefügt, so etwas wie $ conn-> processUntil ('session_start'); $ conn-> Präsenz(); $ my_jid = '[email protected]'; // setze deine jid hier $ status = $ conn-> roster-> getPresence ($ my_jid); echo $ status ['show']; Scheint nicht für mich zu arbeiten. Ich kann den Benutzerstatus nicht abrufen. Es zeigt leer! – Shreejibawa

-1

Sie sollten in der Lage sein, Ihre eigene Anwesenheit zu beantragen, indem Sie Ihre eigene jid ([email protected]) an getPresence() übergeben;

Zum Beispiel:

$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 

eine ganze Weile zurück lief ich in ein Problem mit dieser Bibliothek nicht Roster Aufzeichnungen bevölkern. Wenn Sie auf dieses Problem stoßen, sollten Sie den hier beschriebenen Patch anwenden: https://code.google.com/p/xmpphp/issues/detail?id=44&q=empty

+0

Es funktioniert nicht. – ialphan

+0

Warum nicht? Ist dein Dienstplan leer? Irgendeine Ausgabe? Fehler? Keine Rückmeldung .. Ich kann nicht helfen. – Kevin

+0

Sie haben Recht Ich hätte in meinem Kommentar beschreibender sein sollen.Es gab keine Fehler, nur die zurückgegebenen "NULL". Hast du eine funktionierende Testseite? – ialphan