[Tutorial] ICQ-Status auslesen

    • VB.NET

    Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von sL!zoNe.

      [Tutorial] ICQ-Status auslesen

      Nach mehreren Experimentierversuchen mit der verschollenen ICQ-API und der mysteriösen Oscarlib, die mich nicht wirklich weitergebracht haben, fand ich doch endlich einen Weg, auszulesen, ob eine UIN on- oder offline ist.

      Es gibt nämlich eine mehr oder weniger geheime API-Seite, die ein paar Informationen über den jeweiligen User bereitstellt. Diese lautet
      icq.com/js/pcc.php?Uin=123456789 (sorry für denjenigen, der diese Nummer hat :().
      Wenn wir einmal auf diese Seite gehen, sehen wir einen Wall-Of-Text, aber wenn wir (bei FF Rechtsklick ► Seitenquelltext anzeigen) uns den Seitenquelltext angucken, sieht es schon etwas geordnet aus. Dort finden wir in der 8ten Zeile gl_status = gl_pcc_info\[6\] = "0";. Wie man vermuten kann, stellt die Zahl hinten den Status dar. Wenn wir also diese Zahl auslesen würden, erhielten wir den aktuellen Online-Status.

      VB.NET-Quellcode

      1. Module IcqOnlineCheck
      2. Public Function checkState(ByVal uin As String) As String
      3. Dim str As String = (New Net.WebClient()).DownloadString("http://www.icq.com/js/pcc.php?Uin=" & uin)
      4. Dim start As Short = Str.IndexOf("gl_status = gl_pcc_info\[6\] = ") + 32 '32 = Stringlänge
      5. Dim status As String = Str.Substring(start, 1) 'Der momentane ICQ-Status
      6. Select Case status
      7. Case 0
      8. status = "Offline"
      9. Case Else
      10. status = "Online"
      11. End Select
      12. Return status
      13. End Function
      14. End Module

      (Ich erstelle keine Klasse, sondern ein Modul, weil ein nicht-statischer Status-Check für mich – für diesen Zweck– sinnfrei wäre)
      Zuerst erstellen wir uns einen WebClienten, mit dem wir den Seitenquelltext downloaden und direkt als String in str speichern.
      Dann finden wir gl_status = gl_pcc_info\[6\] = (ohne die Zahl, da der Status ja variabel ist). Zu dieser Position rechnen wir noch 32 dazu, weil wir als Ergebnis ja nicht gl_status = gl_pcc_info\[6\] = bekommen wollen, sondern die Zahl, welche den Status repräsentiert.
      Dieses Ergebnis fangen wir dann in einem Case-Block ab und überprüfen, ob der User jetzt Off- oder Online ist.
      [Away, N/A & Occupied binde ich hier nicht ein, weil bei mir bei Usern, die Away, N/A oder Occupied sind immer etwas Anderes herauskommt …]


      Wenn wir jetzt bei einem Projekt ein Modul hinzufügen und uns obigen Code copy-&-pasten, brauchen wir für den Aufruf nur noch

      VB.NET-Quellcode

      1. MsgBox(ICQOnlineCheck.checkState("123456789"))
      schreiben, und uns flattert ein lustiges „Offline“ (bzw. „Online“) entgegen.

      Wenn noch Fragen oder Fehler auftauchen sollten … ;)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Agent“ ()

      Hmm, also bei mir funktioniert das irgendwie nicth so richtig.

      Auf der von die genannten Seite icq.com/js/pcc.php?Uin=123456789, steht wenn ich meine Uin angeben immer der selbe Status, mämlich 2, egal ob ich on , off , unsichtbar aktiv oder sonst was bin. Wenn ich dein Prog starte kommt bei mir immer "online" obwohl ich es nicht bin, oder hat sich mittler weile was verändert ?