Laden...

Social Network Messenger?

Erstellt von djCalypso vor 15 Jahren Letzter Beitrag vor 15 Jahren 6.969 Views
D
djCalypso Themenstarter:in
96 Beiträge seit 2007
vor 15 Jahren
Social Network Messenger?

Hallo alle zusammen,
ich habe demletzt gesehen, dass GMX eine Art Multi Messenger hat auf dem man permanent eingeloggt ist und die Messages von diesen Sozialen Netzwerken direkt bekommt.
Nun frage ich mich, wie man solche Infos auf deren Page ausliest.
Ich könnte mir momentan nur vorstellen, das eine Art Webbrowser Client in diesem Programm vorhanden ist, welcher durchgehend checkt, ob es neue Infos gibt, etc.

Vielleicht habt ihr noch ein paar weitere Ideen, denn ich möchte mir einen solchen Messenger für den Privatgebrauch selber basteln.

313 Beiträge seit 2006
vor 15 Jahren

ja du kannsd das machen mit webbrowser
und aber auch per http request, da musst du aber cookies usw speichern

D
djCalypso Themenstarter:in
96 Beiträge seit 2007
vor 15 Jahren

Danke Ploetzi,

folgendes Beispiel habe ich eben gefunden.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("URL");
CookieContainer cc = new CookieContainer();
cc.Add(cookie);
request.CookieContainer = cc;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Müsste man halt nur nen globalen Cookie für die Laufzeit erstellen und bei jedem Abruf mitsenden wie ich denke.
Hat hier denn schon jmd. gute Cookie Erfahrungen wie ich sowas ziemlich gut umsetzen könnte?
Ansonsten müsste ich mal bei MSDN, etc. im Web gucken wie ich sowas realisiere.

16.806 Beiträge seit 2008
vor 15 Jahren

Das ging relativ gut auf der meinVZ-Seite.
Ich hatte mir das mal für das alte Webdesign gebastelt, aber leider nicht dynamisch, was mir dann die Lust an der Anpassung für das neue Design insbesondere mit dem Javascript / AJAX-Quatsch letzten Endes genommen hatte.

Man könnte dies evtl. als Kleinprojekt für ein paar Social-Webpages entwickeln (kwick, VZ und Co).
Musst Dich ja nur am Anfang einloggen, den Cookie speichern und dann in regelmäßigen Abständen prüfen, ob neue Nachrichten vorhanden sind.
Eine Push-Methode wie es ICQ oder MSN hat wird das aber sicherlich nicht.

Evtl. musst Du gar keine Cookie setzen, sondern via POST-Methode die Daten zusenden (Stichwort Barrierefreiheit, da wäre POST die Alternative von Cookies ).

Kannst aber alles eigentlich recht einfach mit FireFox (2/3) und dem Web Development-Addon testen. (Cookies via POST-Übergeben etc etc... )


Edit: Mit der Namensgestaltung für das Projekt - auch wenns am Anfang nur für Dich sein sollte, man weiß ja nie - solltest aber aufpassen, da die VZler meinen alles mit VZ am Ende im Namen verklagen zu müssen.
MusikVZ, ImageVZ......

225 Beiträge seit 2006
vor 15 Jahren

aloha,

@djCalypso
kannst du mal nen link dazu posten? ich will mir das teil auch mal näher anschauen.
thx

a hui hau
puppet

Yunky: was fürn operator muss ich den nehmen wenn ich sagen will nichtgrößergleich??
Yunky: !>3??
Yunky: !≥ ??
Puppetmaster: G
Yunky: aja ka
Puppetmaster: kleiner (<)
Yunky: stimmt^^

D
djCalypso Themenstarter:in
96 Beiträge seit 2007
vor 15 Jahren

Ein kleines Projekt wie du schon meintest könnte man auf jeden Fall daraus machen (OpenSource).
Interesse besteht auf meiner Seite auf jeden Fall 🙂
Namen kann man ja im Endeffekt auch noch finden, muss ja nicht der Name VZ vorhanden sein. Bsp. "Social Network Messenger" oder soetwas ähnliches.

Man könnte bei einem solchen Projekt viellt. so ähnlich wie bei Miranda machen, wo man diese verschiedenen Webseiten "Vz, Kwick, Myspace, ..." per Plugin einbindet.

Ich werde das nachher einmal testen, ob ich das soweit hinbekomme, das ich eine Art Login Routine mit C# dafür geschrieben bekomme. (Cookies)

16.806 Beiträge seit 2008
vor 15 Jahren

Im Prinzip ja.
Es ist ja eigentlich immer nur das gleiche: Anmeldung am SocialNetwork und dann eMails bzw. gegebenenfalls die Messages auslesen.

Problematischer wirds bei StudiVZ, wenn nach ner gewissen Dauer der Nutzung die CAPTCHA-Abfrage kommt.


Für die Loginroutine brauchst dann auch noch ne HTTP-Secure-Umgebung:

Loginziel: https://secure.studivz.net/Login
InputName eMail: email
InputName Passwort: password

Dann gibt es in der Form noch zwei versteckte Hashes, die wahrscheinlich von PHP generiert werden, die ebenfalls ausgelesen (regex) und übergeben werden müssen.

D
djCalypso Themenstarter:in
96 Beiträge seit 2007
vor 15 Jahren

Bei einem Captcha könnte man ja erst einmal so reagieren, das der User eine Art Fenstereingabe bekommt, wo dieses Captcha angezeigt wird und auf die richtige Eingabe wartet. Da hilft wahrscheinlich nur probieren und austesten, damit man solche Sachen durch eine Programmlogik ersetzt.

S
167 Beiträge seit 2008
vor 15 Jahren

Ich bin mir zwar nicht sicher aber ich möchte zu 99,9% ausschließen dass GMX (oder ähnlich) solche frickellösungen nutzen.

Viel eher entsprechende APIs des Anbieteres welche natürlich unter umständen nicht für die "Öffentlichkeit" verfügbar sind.

Mehr weiß man wenn man mal anschaut was der Messenger genau für Aufrufe startet.

998 Beiträge seit 2007
vor 15 Jahren

Du mußt ja im Prinzip nur eine Logik zum einloggen und eune Logik zum auslesen der Nachrichten machen. Das Einloggen ist halt standard und falls die Portale für das abrufen der Nachrichten keine XML-Schnittstelle bieten, mußt du mit einem XML-Document halt die Seite auslesen und dir die einzelnen Informationen raussuchen.

Gruß David

16.806 Beiträge seit 2008
vor 15 Jahren

Ich bin mir zwar nicht sicher aber ich möchte zu 99,9% ausschließen dass GMX (oder ähnlich) solche frickellösungen nutzen.

Viel eher entsprechende APIs des Anbieteres welche natürlich unter umständen nicht für die "Öffentlichkeit" verfügbar sind.

Mehr weiß man wenn man mal anschaut was der Messenger genau für Aufrufe startet.

Das is klar, dass GMX bei der Nutzung eines eigenen Messengers eine API entwickelt hat und diese auch nutzt.
Aber ich denke eine Anfrage bei Socialnetworks alá StudiVZ, die sich vor allem durch Werbung finanzieren, den Zugang zu einer API zu bekommen, die auch noch kostenlos und werbefrei ist, ist aussichtslos.
Daher bleibt wohl nur die Alternative via HTTP(S).

Aus Auslesen des API-Streams is au ned so prickelnd - wer weiß was für Zeugs generiert und übergeben wird und dann lohnt sich das schon bzgl. der dynamischen Verwaltung neme.

A
21 Beiträge seit 2007
vor 15 Jahren

...

Problematischer wirds bei StudiVZ, wenn nach ner gewissen Dauer der Nutzung die CAPTCHA-Abfrage kommt.
...

Soweit ich weiss, kann man dies umgehen, indem man sich einfach ausloggt und anschliessend wieder neu einloggt.

D
djCalypso Themenstarter:in
96 Beiträge seit 2007
vor 15 Jahren

Habe das eben einmal probiert umzusetzen wie ich denke, jedoch irgendwie ohne Erfolg.

Ich habe zu Beginn ein Post Request mit email/password an meinvz geschickt und den CookieContainer vorher beim request festgelegt.
Schreibt der nach dem schreiben des Streams den Cookie in den Container oder müsste ich das selber managen?

Bisher habe ich noch nie so wirklich mit Cookies & C# gearbeitet, deswegen bin ich da etwas unerfahren.

Hier mein kurzes Beispiel.

        private CookieContainer cc = new CookieContainer();

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            LoginPost();

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.meinvz.net");
            request.CookieContainer = cc;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream stream = response.GetResponseStream();
            string tempString = null;
            int count = 0;
            StringBuilder sb = new StringBuilder();
            byte[] buf = new byte[8192];

            do
            {
                count = stream.Read(buf, 0, buf.Length);

                if (count != 0)
                {
                    tempString = Encoding.UTF8.GetString(buf, 0, count);
                    sb.Append(tempString);
                }
            }
            while (count > 0);

            richTextBox1.Text = sb.ToString();
        }

        private void LoginPost()
        {
            string email = textBox1.Text;
            string password = textBox2.Text;

            ASCIIEncoding encoding = new ASCIIEncoding();
            string postData = "email=" + email;
            postData += "&password=" + password;
            byte[] data = encoding.GetBytes(postData);

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.meinvz.net");
            request.CookieContainer = cc;
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = data.Length;
            Stream stream = request.GetRequestStream();
            stream.Write(data, 0, data.Length);
            stream.Close();
        }

Habe eben entdeckt, das Meinvz das ganze über eine PHPSESSID im Cookie macht.
dann bräuchte man ja eigentlich nur die PHPSessid zu bekommen und braucht nichts mit Cookies rumfuchteln.

D
djCalypso Themenstarter:in
96 Beiträge seit 2007
vor 15 Jahren

Den Login habe ich nun hinbekommen nach langem hin und her.

        public struct UserLoginData
        {
            public string email;
            public string password;
            public string formkey;
            public string iv;
            public string checkcode;
        }

        private CookieContainer cookies = new CookieContainer();

        private bool isLogin = false;

        public Form1()
        {
            InitializeComponent();
        }

        private UserLoginData GetUserLoginData(String html)
        {
            string searchValue;
            UserLoginData userLoginData = new UserLoginData();

            // Email
            userLoginData.email = textBox1.Text;
            
            // Password
            userLoginData.password = textBox2.Text;

            // Formkey
            searchValue = "<input type=\"hidden\" name=\"formkey\" value=\"";
            html = html.Substring(html.IndexOf(searchValue) + searchValue.Length);
            userLoginData.formkey = html.Substring(0, html.IndexOf("\" />"));
            
            // IV
            searchValue = "<input type=\"hidden\" name=\"iv\" value=\"";
            html = html.Substring(html.IndexOf(searchValue) + searchValue.Length);
            userLoginData.iv = html.Substring(0, html.IndexOf("\" />"));
            
            // Checkcode
            searchValue = "<input type=\"hidden\" name=\"checkcode\" value=\"";
            html = html.Substring(html.IndexOf(searchValue) + searchValue.Length);
            userLoginData.checkcode = html.Substring(0, html.IndexOf("\" />"));

            return userLoginData;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (isLogin)
            {
                VisitPage("http://www.meinvz.net/Groups");
            }
            else
            {
                Login();
            }
        }

        private void Login()
        {
            Uri uri = new Uri("http://www.meinvz.net");
            CookieContainer cookieContainer = new CookieContainer();
            UserLoginData userLoginData;

            // Infos auslesen
            HttpWebRequest sessionRequest = (HttpWebRequest)WebRequest.Create(uri);
            sessionRequest.CookieContainer = new CookieContainer();
            cookies = sessionRequest.CookieContainer;
            HttpWebResponse sessionResponse = (HttpWebResponse)sessionRequest.GetResponse();
            StreamReader checkReader = new StreamReader(sessionResponse.GetResponseStream());
            userLoginData = GetUserLoginData(checkReader.ReadToEnd());
            checkReader.Close();
            sessionResponse.Close();
        
            // Einloggen
            string loginData = "email=" + userLoginData.email;
            loginData += "&password=" + userLoginData.password;
            loginData += "&login=Einloggen";
            loginData += "&jsEnabled=false";
            loginData += "&formkey=" + userLoginData.formkey;
            loginData += "&iv=" + userLoginData.iv;
            loginData += "&checkcode=" + userLoginData.checkcode;
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.meinvz.net/Login");
            req.CookieContainer = cookies;
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            ASCIIEncoding encoding = new ASCIIEncoding();
            byte[] loginDataBytes = encoding.GetBytes(loginData);
            req.ContentLength = loginDataBytes.Length;
            Stream stream = req.GetRequestStream();
            stream.Write(loginDataBytes, 0, loginDataBytes.Length);
            stream.Close();
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            res.Close();
            isLogin = true;

            VisitPage("http://www.meinvz.net/Start");
        }

        private void VisitPage(string url)
        {
            string html;
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
            req.CookieContainer = cookies;
            req.Method = "GET";
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            StreamReader sr = new StreamReader(res.GetResponseStream());
            html = sr.ReadToEnd();

            webBrowser1.Document.Body.InnerHtml = html;
        }

Es ist nun auch möglich, andere Seiten mit diesem Cookie zu besuchen 🙂 mit VisitPage!
Werde die Tage mal ein bisschen herumpfeilen und schauen was für Infos ich mir dann auslesen lasse.

Interessant wäre es herauszulesen, welche Personen gerade online sind.

Habt ihr noch ein paar Wünsche, die ihr gerne mit einem solchem Programm haben wollt?

PS: Was haltet ihr von dem Projektnamen: mySNM = my Social Network Messenger?

T
708 Beiträge seit 2008
vor 15 Jahren

Sprich mal "SNM" schnell aus^^
Ich finde es nicht unbedingt den Knaller, auch wenn die Abkürzung für etwas Eindeutiges steht.

Sachen die mich Interessieren würden:
Wer ist Online bräuchte ich nicht unbedingt. Dazu habe ich meinen Instant Messanger für die Leute die mich interessieren.

Neue Nachrichten, neue Fotoalben von Freunden, Anzahl der Verlinkungen (hat sich verändert?), Pinnwandeinträge... Sowas wäre gut.

Wenn das soweit funktioniert fände ich es noch gut, das mit dem Programm gleichzeitig meine Mails gecheckt werden. Wenn schon, denn schon 🙂
Aber das ist sicherlich aufgrund der vielen verschiedenen Anbieter nicht gerade einfach.

Ich würde mir das so vorstellen, das dieses Programm mir bescheid gibt, wenn sich bei Studi oder meinen Mails was getan hat. Dann muss man nicht immer den Browser hervorholen, F5 -> ggf. Logindaten eingeben -> Tabs durchforsten und ihn wieder in der Taskleiste versenken.

Gruß, TriB

D
djCalypso Themenstarter:in
96 Beiträge seit 2007
vor 15 Jahren

Okey, mit SNM hast du Recht das klingt nicht so pralle.
Habe noch ein bisschern herumprobiert und schon bisschen was geschafft.

www.calyphornia.de/snm.rar

Man kann sich nun einloggen und sieht rechts an der Seite immer die aktuelle Online Liste (Refresh alle 10 Sekunden).

Werde die Tage noch weiter daran arbeiten.

Hätte noch jmd. Interesse bei diesem kleinen Projekt mitzuarbeiten?

S
142 Beiträge seit 2007
vor 15 Jahren

http://code.google.com/apis/opensocial/

Googles opensocial API für social networks.... Studivz ist glaube auch unterstüzt.

D
djCalypso Themenstarter:in
96 Beiträge seit 2007
vor 15 Jahren

Naja Google sagt schon alles.
Wie ich mitbekommen habe plant sogar Studivz nun nen Messenger zu basteln.

Ich denke ich werde die Tage mal versuchen mich etwas mit Miranda zu beschäftigen. Wäre extrem praktisch, wenn man Studivz im Miranda hätte als Protokoll.
Falls wie gesagt jmd. Interesse an solch einem Projekt hat kann er mich gerne anschreiben.

B
293 Beiträge seit 2008
vor 15 Jahren

hatte mich vor einiger zeit auch mal an solch einem Projekt versucht... Wer mag kanns sich ja mal anschauen... Leider nicht mehr ganz aktuell... Bastel grad an nem dicken Update - ansonsten wen's interessiert --> www.codecollectors.net

Wenn ich nicht hier bin, findest du mich auf code-bude.net.