Tutorial: Auf Facebook mit Visual Basic oder C# bei einem Freund einen Pinnwandeintrag posten (Teil 3)

Während im ersten und zweiten Teilen des Tutorials  zur Facebook API mit C# und Visual Basic nur Daten gesendet wurden, geht es im heutigen dritten Teil darum, Daten auszulesen und aufzubereiten. Als Beispiel soll nicht auf die eigene, sondern auf die Pinnwand eines Freundes ein Update gepostet werden. Die URL für die eigene Pinnwand lautet ja bekanntlich

https://graph.facebook.com/me/feed

für die eines Freundes jedoch

https://graph.facebook.com/[ID des Freundes]/feed

Es muss also die eigene Freundesliste ausgelesen werden, in der Name und ID aller Freunde zu finden sind. Diese Liste hat eine sehr überschaubare Struktur, deshalb kann daran gut gezeigt werden, wie man die von Facebook in JSON gelieferten Daten sinnvoll in C# bzw. Visual Basic verarbeitet (Im vierten Teil des Tutorials folgt dann übrigens ein etwas komplexeres Beispiel, das u.a. das Auslesen des eigenen Newsfeed beinhaltet).

Ich möchte nochmals betonen, dass ich kein SDK verwende sondern ausschließlich die .Net-„Bordmittel“ – das hat diverse Vor- aber natürlich auch einige Nachteile (die vielleicht ein andermal diskutiert werden). Die folgenden Codebeispiele sind in C#, ganz am Ende ist das komplette Beispiel dann auch in Visual Basic zu finden.

1. Als erstes habe ich das Ergebnis des letzten Tutorials um einige Beschriftungen und um einen Command-Button (cmdFreundeLaden) sowie eine Dropdown-Liste (comboFreunde) erweitert:

2. Das Auslesen der Freundesliste (beim Klick auf cmdFreundeLaden) ist nahezu identisch mit dem Senden eines Pinnwandeintrags. Im ersten Schritt soll zum Verständnis die Rückgabe in JSON in einer MessageBox ausgegeben werden:

//Liste der eigenen Freunde auslesen
 string GraphURL = "https://graph.facebook.com/me/friends?&access_token="
  + AccessToken;

 //WebClient anlegen
 System.Net.WebClient myWebClient = new System.Net.WebClient();

 //Except100 ausschalten, sonst gibt es u. U. Fehlermeldungen
 System.Net.ServicePointManager.Expect100Continue = false;

 try
 {
  Antwort = myWebClient.DownloadData(GraphURL);
  MessageBox.Show(System.Text.Encoding.ASCII.GetString(Antwort));               
 }
 catch (Exception ex)
 {
  MessageBox.Show(ex.Message);
 }

3.  Die Liste der Freunde sieht in JSON so aus:

{
 "data":
 [
  {
    "name": "Peter Panter",
    "id": "123456"
  },
  {
    "name": "Theo Tiger",
    "id": "654321"
  },
  {
    "name": "Ignaz Wrobel",
    "id": "87654"
   }
 ]
}

4. Mit Hilfe des .Net JSON-Serializer lässt sich dies nun in eine C# Klasse umwandeln. Anders als in JavaScript oder PHP muss jedoch die Klasse zuvor angelegt werden. Das ist aber schnell geschehen. Wichtig ist dabei, den Klassennamen mit [DataContract] und die Eigenschaften mit [DataMember] zu versehen (und damit serilisierbar zu machen):

[DataContract]
 public class FriendList
 {
   [DataMember(Name="data")]
   public FriendData[] Friend { get; set; }       
 }

 [DataContract]
 public class FriendData
 {
   [DataMember]
   public string id { get; set; }

   [DataMember]
   public string name { get; set; }
 }

5. Das „root“-Element (bzw. Objekt) heißt bei Facebook immer „data“. Mit [DataMember(Name="data")] mappe ich „data“ auf einen lesbareren Namen, in diesem Fall „Friend“. Das ist nicht unbedingt erforderlich, macht aber später den Code übersichtlicher: um dann auf den Namen des ersten Freundes zuzugreifen heißt es so eben nicht „myFriendList.data[0].name“ sondern „myFriendList.Friend[1].name“.

6. Ist die Klasse vorbereitet kann der Rückgabewert (Antwort) wie folgt deserialisiert werden (Hinweis: der JSON-Deserilizer ist ab .Net 3.5 verfügbar; um diesen zu verwenden muss im Menu “Projekt” ein Verweis auf  “System.Runtime.Serilization” gesetzt werden).

DataContractJsonSerializer ser =
 new DataContractJsonSerializer(typeof(FriendList));
MemoryStream ms = new MemoryStream(Antwort);
myFriendList = ser.ReadObject(ms) as FriendList;

7.  Zum Test kann nun der Name des ersten Freundes ausgegeben werden:

MessageBox.Show("Name: " + myFriendList.Friend[0].name
 + " / ID: " + myFriendList.Friend[0].id);

8.  Jetzt werden alle Namen in die ComboBox gepackt:

// erstes Element ist meine eigene Pinnwand
comboFreunde.Items.Add("me");
 for (int i = 0; i < myFriendList.Friend.Length; i++)
 {               
 comboFreunde.Items.Add(myFriendList.Friend[i].name
 + " (ID: " + myFriendList.Friend[i].id + ")");
 }
 comboFreunde.SelectedIndex = 0;

9. Als Letztes muss nun das Senden des Updates modifiziert werden. Statt

string GraphURL = "https://graph.facebook.com/me/feed";

heißt es nun (Index 0 ist „me“, deshalb -1):

GraphURL = "https://graph.facebook.com/"
 + myFriendList.Friend[comboFreunde.SelectedIndex - 1].id
 + "/feed";

10. Das war’s (und es funktioniert natürlich nur, wenn der betreffende Freund Einträge auf seiner Pinnwand zulässt). Hier nochmals der komplette Code in C# und Visual Basic:

C#: FBTutorialTeil3.cs und die Klasse FriendList.cs

Visual Basic: FBTutorialTeil3.vb und die Klasse FriendList.vb

Im vierten Teil des Tutorials folgt dann ein etwas komplexeres Beispiel, das u.a. das Auslesen des eigenen Newsfeed beinhaltet.

Update 14.11.2011: Der vierte Teil ist nun fertig, jedoch geht es nicht um Newsfeeds, sondern um Foto-Uploads. Die Newsfeeds wäre ich in einem sechsten Teil erklären.

Dieser Beitrag wurde unter API, C#, Facebook, Graph API, Programmierung, Visual Basic abgelegt und mit , , , , , , verschlagwortet. Setzen Sie ein Lesezeichen auf den Permalink.

8 Antworten auf Tutorial: Auf Facebook mit Visual Basic oder C# bei einem Freund einen Pinnwandeintrag posten (Teil 3)

  1. Pingback: Tutorial: Ein Facebook Pinnwandeintrag mit Visual Basic oder C# (Teil 2) « Frank IT Consulting&Training

  2. Dominic sagt:

    Sehr schön, danke =)

    Werde ich mir erstmal schön angucken =)

    Gruß

  3. user sagt:

    Hab es versucht in dev C++ zu Compalieren.. Welche Libaries brauche ich noch?

  4. user sagt:

    Auch dort kann man entweder c++ oder C# projekte erstellen. Ich habe selbtsverständlich ein C# Projekt verwendet…

    • Ok, wunderbar, da müsste es funktionieren. Ganz oben am Ende des Artikel sind zwei Links zu den Quellcodes – hier sieht man auch alle “usings”, die man nich vergessen darf – dann müsste es funktionieren. Wenn es nich klappt: Einfach nochmals melden, ich helfe gerne!

  5. Kann mal das auch für Visual Basic übersetzen, ich will diese seite hier https://graph.facebook.com/100001363520746 in JSON auslesen und die einzelhnden Variablen weiterverarbeiten!

Einen Kommentar hinterlassen

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Sie können folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>