Montag, 21. Oktober 2013

Facebook Nachrichten empfangen

Hinweis: Seit der Veröffentlichung der Facebook API 2.0 im April 2014 ist die Chatfunktion deaktiviert, und damit leider dieser Code nicht mehr lauffähig.

In diesem Post möchte ich zeigen, wie man mit C# Nachrichten des Facebook Chat empfängt. Da "normale" Nachrichten und Chat Nachrichten jedoch über das gleiche Prinzip versendet werden, können hiermit also nicht nur Chat Nachrichten empfangen werden.
Voraussetzung ist eine aufgebaute Verbindung zum Facebook Chat mittels XMPP, weiterhin könnte der vorige Post nützlich sein, in dem gezeigt wird, wie die Jids der Freunde ausgelesen werden, welche zum Empfangen benötigt werden.

Um Nachrichten von Kontakten empfangen zu können, muss für jeden dieser ein sogenanntes MessageCallback angelegt werden:

xmpp.MessageGrabber.Add(new Jid("-100006476847029@chat.facebook.com"), new BareJidComparer(), new MessageCB(MessageCallBack), null);

Wenn nun von dem entsprechenden Kontakt eine Nachricht ankommt, wird die Funktion MessageCallBack() aufgerufen.
Diese kann zum Beispiel so aussehen:

private void MessageCallBack(object sender, agsXMPP.protocol.client.Message msg, object data)
{
    if (msg.Body != null)
    {
        MessageBox.Show(msg.From + ": " + msg.Body);
    }
}

Der komplette Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using agsXMPP;
using agsXMPP.protocol.client;
using agsXMPP.protocol.iq.roster;
using agsXMPP.Collections;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        XmppClientConnection xmpp = new XmppClientConnection("chat.facebook.com");

        private void Form1_Load(object sender, EventArgs e)
        {
            xmpp.OnLogin += new ObjectHandler(OnLogin);
            xmpp.Open("name", "password");
        }

        private void OnLogin(object sender)
        {
            xmpp.MessageGrabber.Add(new Jid("-100006476847029@chat.facebook.com"), new BareJidComparer(), new MessageCB(MessageCallBack), null);
        }

        private void MessageCallBack(object sender, agsXMPP.protocol.client.Message msg, object data)
        {
            if (msg.Body != null)
            {
                MessageBox.Show(msg.From + ": " + msg.Body);
            }
        }
    }
}

Keine Kommentare:

Kommentar veröffentlichen