Freitag, 20. September 2013

Facebook Posts mit C# veröffentlichen

In diesem Post möchte ich zeigen, wie man mit einer C# Anwendung einen Facebook Post auf der eigenen oder einer fremden (natürlich nur, wenn dies erlaubt ist) Pinnwand erstellt.

Hierfür legen wir uns im Entwickler - App Bereich zuerst eine neue App an. Dann besorgen wir uns hierfür ein Access Token und setzen als Berechtigung publish_action, woraufhin wir uns anmelden müssen. (Hinweis: Siehe diesen neuen Posts bezüglich Access Tokens, da Facebook die Gültigkeit dieser deutlich verkürzt hat.)
Die App merkt sich dann quasi unseren Account, beim Ausführen greift sie darauf zu und wir können alles im Rahmen unseres Accounts und der verteilen Berechtigungen durchführen. Die Berechtigung publish_action gibt an, dass die Anwendung Beiträge u.ä. veröffentlichen darf.
Zum Veröffentlichen müssen wir hier die HTTP POST Methode verwenden. Die Adresse, an welche wir die Anweisung schicken, lautet https://graph.facebook.com/benutzerkennung/feed/.
Benutzerkennung muss dabei durch eine Kennung des Benutzers ersetzt werden, wie z.B. ID oder eindeutiger Name. me ist außerdem ein Kürzel für den eigenen Account.
Möchten wir nun einen Beitrag posten, müssen wir das Access Token nach dem Parameter access_token sowie den Inhalt des Posts nach dem Parameter message an den Server schicken und dann eine POST Anfrage starten.

Folgender Beispielcode schreibt den Text "Hallo Welt" auf die eigene Pinnwand:
            string URL;
            URL = "https://graph.facebook.com/me/feed/";

            WebRequest MyRequest;
            MyRequest = WebRequest.Create(URL);
            MyRequest.Method = "POST";

            Stream DataStream = MyRequest.GetRequestStream();
            Byte[] Data = Encoding.UTF8.GetBytes("access_token=xyz123&message=Hallo Welt");
            DataStream.Write(Data, 0, Data.Length);
            DataStream.Close();

            MyRequest.GetResponse();

Donnerstag, 19. September 2013

Daten von Facebook auslesen

In diesem Post möchte ich zeigen, wie die Abfragen aus dem Graph Explorer, welche im vorigen Post vorgestellt wurden, in C# umgesetzt werden können.
Wie bereits erwähnt, ist dieses nicht schwierig, sondern eine einfache Umsetzung der Abfragen in HTTP GET Requests.

In diesem Post möchte ich beispielhaft zeigen, wie man ID, Name und Geschlecht eines beliebigen Benutzers (sofern diese Informationen öffentlich sind) mittels C# abfragt.
Im Graph Explorer erledigt dies die Abfrage benutzerbezeichner?fields=id,name,gender. Diese können wir in C# quasi übernehmen, wir müssen nur noch die URL wissen, an welche wir die Abfrage stellen können, diese ist http://graph.facebook.com. Wie bei einem GET Request übergeben wir dann die gewünschten Parameter in der URL. Folgender Programmcode gibt ID, Name und Geschlecht des Facebook - Gründers Marc Zuckerberg (erreichbar unter dem Benutzernamen zuck) zurück - das Prinzip habe ich bereits im schon oben verlinkten Post beschrieben.
            string RequestURL;
            RequestURL = "http://graph.facebook.com/zuck?fields=id,name,gender";

            WebRequest GetRequest;
            GetRequest = WebRequest.Create(RequestURL);

            Stream ResponseStream;
            ResponseStream = GetRequest.GetResponse().GetResponseStream();
            StreamReader ResponseReader = new StreamReader(ResponseStream);

            string TempLine = "";
            int i = 0;
            string Result = "";
            while (TempLine != null)
            {
                i++;
                TempLine = ResponseReader.ReadLine();
                if (TempLine != null)
                    Result += TempLine;
            }

Mittwoch, 18. September 2013

Zugriff auf Facebook mit C#

In der nächsten Zeit möchte ich darüber posten, wie man mit C# auf Facebook zugreift. Im Gegensatz zu den vorigen WhatsApp Posts ist diese Verbindung von Facebook explizit gewünscht, deswegen ist die Dokumentation und Unterstützung von Facebook für Entwickler wirklich ausgezeichnet und empfehlenswert.

Ich habe momentan zwei Posts im Kopf die hoffentlich bald online kommen, viel Spaß damit. Nun eine kurze theoretische Einführung, bevor es in den nächsten Posts mit dem Code weitergeht. Facebook bietet für Entwickler viele APIs an. Wir werden hier erst einmal die einfache aber doch mächtige Graph API verwenden. Hier direkt nochmal der Hinweis, dass die Dokumentation sehr gut und ausführlich ist, schaut euch den Link und vielleicht auch das Video dazu an.

Die Graph API ist eine API die über das HTTP Anfragen und Anweisungen an Facebook schickt, was bedeutet in C# können wir ganz einfach mit HTTP Requests darauf zugreifen.
Facebooks Daten sind als Graph organisiert, es gibt den Graph Explorer mit dem dieser durchsucht werden kann und welchen ich hier kurz vorstellen möchte, da die Umsetzung in C# exakte Abbildungen dieser Graphoperationen sind.

Im Graph Explorer können Abfragen (GET) gestellt und Änderungen (POST) durchgeführt werden.
Alle Daten sind Knoten im Graph, wie auch der eigene Account. Dessen ID ist anfänglich standardmäßig in der Eingabezeile niedergeschrieben, die Abfrage "123456789fields=id,name" sagt dann aus, dass die Felder id und Name von Knoten mit Bezeichner (welche hier die id ist) 123456789 abgefragt werden können.
Allein mit dieser Eingabezeile kann schon viel eingestellt werden.

Wichtig ist aber auch der Begriff des access tokens. Dieses beschreibt Berechtigungen von einzelnen Anwendungen (apps). Für die vorigen Abfragen haben wir implizit die Anwendung Graph Explorer verwendet. Aber es können auch eigene Anwendungen erstellt werden, dieses ist möglich über die Schaltfläche "Create New App" im App - Bereich der Entwicklerseite möglich.
Zurück im Graph Explorer gibt es die Schaltfläche "Get Access Token", wobei die Anwendung ausgewählt werden kann, für welche dieses gelten soll.
Bei Klick darauf öffnet sich ein neues Fenster, in welchem Berechtigungen ausgewählt werden können, die die App haben soll, wie z.B., dass die App im Namen eines Benutzers posten darf (dafür und ggf. andere muss dann ein Benutzer angemeldet werden).
(Wichtig: Siehe diesen neuen Posts bezüglich Access Tokens, da Facebook die Gültigkeit dieser deutlich verkürzt hat.)

Dienstag, 17. September 2013

Start der englischen Version / Introduction of the English Version

Ich habe nun damit angefangen, die Posts dieses Blogs auf Englisch zu übersetzen. Dabei übersetze ich einfache alle Posts 1:1 und bilde auch die ursprüngliche Struktur des Blogs durch Übernahme der Datumangaben ab. Die englische Version des Blogs ist unter diesem Link erreichbar. Alle, die das Englische dem Deutschen vorziehen, wünsche ich viel Spaß auf der Seite. Da Englisch nicht meine Muttersprache ist, bitte ich etwaige Fehler zu entschuldigen.

I have just started to translate this blog into English. While doing so, I just translate every post 1:1 into the English language and also adopt the structure of the German version by setting the publish dates. The English version of this blog is now avaible here. To everyone, who prefers English over German, I wish an enjoyable read. As I am not a native speaker of English, I beg your pardon for possible mistakes.

HTTP GET und POST per C#

GET und POST  sind zwei verschiedene Methoden, um Daten per HTTP an einen Server zu schicken. In diesem Post möchte ich kurz die Unterschiede zwischen Ihnen erläutern und die Umsetzung in C# erläutern.
Bei GET werden die Daten an die URL angehängt, z.B. example.com/?field=id. Eine direkt Konsequenz ist, dass die Länge dieser Daten durch die maximale URL Länge begrenzt ist.
Bei POST wird ein Datenblock ohne Nutzung der URL übertragen.
Als Vorteile von GET sind nun z.B. die Übersichtlichkeit (welche aber auch als Unsicherheit angesehen werden kann) und der geringere Overhead anzuführen, bei POST die unbegrenzte Übertragungsmenge sowie dass ein Fileupload nur mit POST machbar ist.

Beide Methoden können wir nun z.B. mit einem System.Net.WebRequest benutzen. Für die folgenden Beispielcodes müssen jeweils System.Net und System.IO eingebunden sein.
Bei POST und GET legen wir zuerst den Request an, hierbei ist zu beachten, dass die URL bei GET wie oben erwähnt schon alle Daten enthalten muss.
WebRequest MyRequest;
MyRequest = WebRequest.Create(URL);
MyRequest.Method = "POST"; // "GET" für GET
Im Fall von POST müssen die Daten für die Abfrage nun hochgeladen werden, was wie folgt umgesetzt werden kann:
Stream DataStream = MyRequest.GetRequestStream();
Byte[] Data = Encoding.UTF8.GetBytes("exampledata");
DataStream.Write(Data, 0, Data.Length);
DataStream.Close();
In beiden Fällen kann nun eine mögliche Antwort des Servers ausgelesen werden:
            Stream ResponseStream;
            ResponseStream = MyRequest.GetResponse().GetResponseStream();
            StreamReader ResponseReader = new StreamReader(ResponseStream);

            string TempLine = "";
            int i = 0;
            string Result = "";
            while (TempLine != null)
            {
                i++;
                TempLine = ResponseReader.ReadLine();
                if (TempLine != null)
                    Result += TempLine;
            }

Montag, 16. September 2013