Du bist nicht angemeldet.

Final Griever

Registrierter Benutzer

  • »Final Griever« ist männlich
  • »Final Griever« ist der Autor dieses Themas

Beiträge: 151

Dabei seit: 6. November 2008

  • Private Nachricht senden

1

Montag, 13. April 2009, 00:03

[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
http://www.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.

Visual Basic Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Module IcqOnlineCheck
    Public Function checkState(ByVal uin As String) As String
        Dim str As String = (New Net.WebClient()).DownloadString("http://www.icq.com/js/pcc.php?Uin=" & uin)
        Dim start As Short = Str.IndexOf("gl_status = gl_pcc_info\[6\] = ") + 32 '32 = Stringlänge

        Dim status As String = Str.Substring(start, 1) 'Der momentane ICQ-Status
        Select Case status
            Case 0
                status = "Offline"
            Case Else
                status = "Online"
        End Select

        Return status
    End Function
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

Visual Basic Quellcode

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

Wenn noch Fragen oder Fehler auftauchen sollten … ;)
puts("Willkommen in meiner Signatur!")

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Agent« (20. Juli 2009, 14:44)


Humax

Registrierter Benutzer

Beiträge: 35

Dabei seit: 18. November 2009

  • Private Nachricht senden

2

Dienstag, 2. Februar 2010, 17:14

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

Auf der von die genannten Seite http://www.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 ?

B3zz0r

Registrierter Benutzer

  • »B3zz0r« ist männlich

Beiträge: 57

Dabei seit: 8. Juli 2009

Hilfreich-Bewertungen: 1

  • Private Nachricht senden

3

Dienstag, 2. Februar 2010, 22:26

Ein kleiner Tipp, du solltest auch am ende der URL deine ICQ-Nummer hinschreiben. Dann verändert sich das auch.

Also http://www.icq.com/js/pcc.php?Uin= "hier deine eigene icq nummer hinschreiben"

Dann siehst du auch dein Nick, die URL oben mit der ICQ Nummer war nur ein Beispiel für das Programm.

MFG

Silverhawk

Registrierter Benutzer

  • »Silverhawk« ist männlich

Beiträge: 9

Dabei seit: 31. Januar 2009

Wohnort: Dorsten

  • Private Nachricht senden

4

Freitag, 7. Mai 2010, 19:22

Es geht auch einfacher:

Einfach Webbrowser.navigate(http://status.icq.com/online.gif?img=5&icq=[ICQNUMMER])
und dann testen ob sich die seite auf http://status.icq.com/5/online1.gif oder http://status.icq.com/5/online2.gif geändert hat

sL!zoNe

Anwendungsentwickler & Designer

  • »sL!zoNe« ist männlich

Beiträge: 26

Dabei seit: 27. Januar 2009

Hilfreich-Bewertungen: 1

  • Private Nachricht senden

5

Samstag, 8. Mai 2010, 11:36

Dafür muss man entweder ein neues WebBrowser Steuerelement einfügen oder eins zur Laufzeit erstellen.
Ich würde die Webclient Methode von Final Grieve bevorzugen!

MfG sL!zoNe

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Marcus Gräfe« (8. Mai 2010, 15:43)


Social Bookmarks