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.

Update 27.2.2013: Facebook hat – wie bereits im Oktober 2012 angekündigt – die Möglichkeit deaktiviert, via API auf die Wall seiner Freunde zu posten. Details und alternative Möglichkeiten werde ich in Kürze in einem Blogpost erklären, hier habe ich dazu bereits einiges dazu geschrieben.

P.S.

Probleme? Fragen? Anregungen? Ich helfe jederzeit und gerne  – einfach einen Kommentar oder Mail schreiben, die Antwort kommt schnellstmöglich. Unternehmen, die Unterstützung, Beratung oder Schulung bei der API- oder Webprogrammierung, der Social-Media-Entwicklung oder dem Social-Media-Management benötigen finden zudem entsprechende Angebote meiner Firma auf der Website www.Frank-IT-Beratung.de

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

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

  1. Samuel sagt:

    Super Blog und ich finds echt Klasse wie super hilfsbereit du bist. Sieht man nicht so oft.
    Ich hatte vor eine App zu programmieren. Nachdem ich mich in die Facebook API eingelesen habe und die ersten Schritte gemacht habe, merke ich , dass das auslesen der Facebook-Freunde gar nicht mehr möglich.
    Das schränkt einen schon sehr stark oder je nach Fall schränkt das einen komplett ein.

    • Simon A. Frank sagt:

      Hallo Samuel, Danke für das Feedback 🙂 ja, das stimmt – dieser Blogpost ist ja fast fünf Jahre alt. Ich werde mal einen ausführlicheren und aktuelleren Beitrag zu der Thematik schreiben!

  2. Simon A. Frank sagt:

    Hallo Willi, na dann, wunderbar wenn es soweit funktioniert! Falls das mit dem weiteren Namen nicht klappt kannst Du mir ja gerne nochmals Deinen Code mailen.

  3. Willi sagt:

    Hi Simon, dachte schon das war eine Frage zuviel 😉 Wenn ich den Link im normalen Browser eingebe, werden die Daten angezeigt, ist schon seltsam, dass es nicht geht, zumindest der Link müsste ja gehen. Hab überlegt das mit der Methode auszulesen wie beim Token, ist aber natürlich nicht so toll, sodass ich lieber darauf verzichte, da es nicht so wichtig ist, wäre halt nur schöner.
    Was mir wichtig ist, ist den angemeldeten User anzuzeigen und der Logout, da steh ich immernoch aufm Schlauch, eigentlich müsste es ja recht simpel sein den eigenen Namen auszulesen, keine Ahnung, ob ich da zu kurz oder zu weit denke. Und der Logout geht wohl nur mit Java oder so. Hab inzwischen nen Suchfilter mithilfe von Autocomplete gemacht, ist schon ein schönes Tool geworden dank deiner Hilfe 🙂

    MfG, Willi

  4. Simon A. Frank sagt:

    Hallo Willi, entschuldige die späte Antwort, aber ich hatte die letzten Tage so viel um die Ohren. In Deinem Quellcode kann ich keinen Fehler entdecken, das passt soweit. hast Du mal die JSON-Daten genau angesehen? Vielleicht werden Dir die gewünschten Infos gar nicht von Facebook geliefert, z. B. wegen Sicherheitseinstellung Deiner Freunde – es könnte also sein, dass es gar kein Fehler in dem Code der Deserialisierung ist?

  5. Willi sagt:

    Kriege das mit den eigenen Daten einfach nicht hin, steh da voll aufm Schlauch :/ Soll halt so aussehen:

    LblActiveUserName.Text = (MEIN.name)
    LblActiveUserID.Text = (MEINE.id)

    Hab es geschafft das Profilbild des gewählten Freundes auszulesen:

    PicBoxFriendPic.ImageLocation = „https://graph.facebook.com/“ & TxtID.Text & „/picture“

    aber meins nicht, müsste ja eigentlich so ähnlich gehen, bzw., wenn ich meine ID auslesen könnte, könnte ich den selben Code verwenden.

    Den Logout mache ich so wie du es vorgeschlagen hast, ist halt leider nicht so schön, ein einfacher Klick um den Benutzer zu wechseln wäre da sinnvoller und vorallem benutzerfreundlicher.

    Den Rest hab ich dir per Mail gesendet.

    Gruß, Willi

  6. Willi sagt:

    Achso, vergesse es als zu erwähnen, die Postfunktion gibt immer eine ex.Message raus:
    „Der Remoteserver hat einen Fehler zurückgegeben: (400) ungültige Aufforderung.“
    Das heisst dann wohl die Funktion ist jetzt abgeschaltet, oder? Hab das mit deinem Originalcode und den allerwichtigsten Elementen probiert.

  7. Willi sagt:

    Hi,

    ok, super, wenn das an VB liegt, finde ich schon irgendwie ne Lösung, danke für den Tipp mit dem E-Book.

    Hab den DataMember zur FriendData hinzu gefügt, es zeigt auch keine Fehler an, aber es gibt keine Daten raus, hab es mit TextBox und Label versucht, beides bleibt leer, woran kann das liegen?

    Wie lese ich denn meine Daten aus, also die des angemeldeten Users?
    Und wie mache ich einen Logout? Kriege das einfach nicht hin.

    • Simon A. Frank sagt:

      Hallo Willi, wegen „DataMember“ habe ich leider keine Idee (wenn Du es nicht selbst gelöst hast kannst Du mir es gerne per Mail senden).

      Die Daten des angemeldeten Users sind unter https://graph.facebook.com/me/ zu finden!

      Ein Logout habe ich noch nie benötigt, müsste ich mal ausprobieren … eine mögliche Lösung siehst Du in meinen Access-Token Manager. Hier habe ich einen Taste „to http://www.facebook.com“ – damit kann man sich dann mit dem internen Browser beispielsweise auch ausloggen.

  8. Willi sagt:

    Jop, danke, hast mit mal wieder sehr weiter geholfen. Es lag an den in der Mail beschriebenen Punkten. Schreibe hier weiter, damit du nicht jedem das Gleiche per Mail schreiben musst.

    Gibt es eine Möglichkeit die Liste zu sortieren? So wie es aussieht ist eine Sortierung vorhanden, nur nach der ID.

    Kennst du eine Möglichkeit, wie man mit VB einen Suchfilter für die Listbox einbauen kann? Finde nichts Konkretes dazu oder nichts das funktioniert.

    Auf der FB-Developers-Seite gibt es ja eine Liste mit den Funktionen wie .id, .name, .link, .first_name usw. wie kann man die FriendList.vb erweitern, um eben die anderen Daten und Profilbilder zu laden? Hab es mal damit probiert, dass ich die vorhandenen Einträge kopiert und dann z.B. alle „name“ durch „first_name“ ersetzt hab, das geht aber leider nicht.

    Wie kann ich die Daten des angemeldeten Users auslesen?

    Wie kann man einen Logout machen?

    Schönen Gruß

    • Simon A. Frank sagt:

      Hallo Willi,

      soweit es geht helfe ich gerne: Deine Fragen zu den Listen sind weniger Social-Media spezifische Probleme, sondern hier gehts um VB-Programmierung, die leider nicht in zwei Sätzen zu erklären sind – Ein Versuch: sinnvoll kann sein, das Objekt zuvor zu sortieren, zu filtern oder zu „verknüpfen“. Ich empfehle ich einen Blick in VB-Einführungen, z. B. das kostenlose E-Book von Galileo:

      http://openbook.galileocomputing.de/einstieg_vb_2010/ (Hier Kapitel „2.7.1 Listenfeld“)

      Zu Deiner zweiten Frage: Eigentlich geht das so, vielleicht ein Problem mit „_“, das bei VB mit Vorsicht eingesetzt werden sollte. Deshalb „mappe“ ich das gerne um (wie oben beschrieben). Folgenden Block muss für jedes weitere Attribute in die Klasse „FriendData“ eingefügt werden:


      <DataMember(name:="first_name")> _
      Public Property firstName() As String
         Get
            Return m_firstName
         End Get
         Set(ByVal value As String)
            m_firstName = value
         End Set
      End Property
      Private m_firstName As String

      Ich hoffe, das hilft Dir etwas weiter!

  9. Willi sagt:

    Hab dir eine Mail gesendet.

    PS.: Wenn ich hier „Benachrichtigung bei weiteren Kommentaren per E-Mail senden.“ „Informiere mich über neue Beiträge per E-Mail.“ auswähle, bekommeich keine Mails, landen auch nicht im Spam-Ordner. Gucke zwar eh immer nach, aber vielleicht ist da ein Fehler.

    • Simon A. Frank sagt:

      Ok, ich habe Deine Mail erhalten und werde mir das ansehen. Danke auch für den Hinweis im P.S., das werde ich ebenfalls prüfen (btw. Ich habe mir erlaubt, aus Deinem Kommentar meine Mailadresse zu löschen, besser jeder schaut unter Kontakt, falls sich mal was ändert).

    • Simon A. Frank sagt:

      Hi Willi, ich habe mir Deine Code angesehen und ein paar Tipps per Mail geschrieben – ich hoffe, das hilft Dir weiter? (Lohn sicht nicht, hier zu posten, da es sehr spezifische Probleme waren).

  10. Simon A. Frank sagt:

    Hi Willi, Vielleicht gibt es beim dem Index ein Problem mit Base 0/1, also versuche mal myFriendList.Friend(ListBoxFriends.SelectedIndex-1).id oder +1 … ansonsten habe ich keine Idee, Du kannst mir aber gerne mal Quellcode-Auszüge mailen, dann sehe ich mir das im Detail an!

  11. Willi sagt:

    Hi Simon,

    Musste mein Projekt vorrübergehend auf Eis legen, jetzt hab ich mal ein wenig Zeit gefunden. Mein Login-Problem war, dass ich beim zusammensetzen des Links bei „client_id=“ das „=“ gelöscht hab.
    Jetzt wollte ich die Daten der Freunde in Labels oder Textboxen ausgeben und dann mit z.B. „https://graph.facebook.com/LabelFriendID.Text“, wie vorher schon gedacht, die Profile anzeigen lassen, nun hänge ich daran die Daten entsprechend auszugeben, hab das hier versucht:

    Private Sub ListBoxFriends_SelectedIndexChanged
    LabelFriendID.Text = (myFriendList.Friend(ListBoxFriends.SelectedIndex).id)
    End Sub

    weil sich das ja ändern soll, wenn man einen anderen Freund in der Listbox anklickt, aber es gibt mir immer einen anderen Namen bzw. ID raus, als das was ich angeklickt hab, hab schon alles Mögliche versucht, aber es scheint so, als ob der ganze Ansatz verkehrt ist und jetzt hänge ich schon wieder und komme einfach nicht weiter.

    Will dann, wenn es so funktioniert wie ich es mir denke, versuchen die „Beitrag“-Textbox innerhalb der Webseite des Profils des Freundes auszulesen und auf eine Textbox im Programm umzuleiten, während ich den Browser mit einer Picturebox überdecke und dann den „Posten“-Button ebenso umleite, das wär richtig cool, aber mal schauen, Eins nach dem Anderem 🙂

    Hoffe Du kannst mein Problem nachvollziehen und mir helfen.

    Lieben Gruß,

    Willi

  12. Simon A. Frank sagt:

    Hallo Willi,

    kein Problem, gerne. Hier zu Deinen Fragen: Die Sache mit „zwei Textboxen für E-Mail und Passwort“ geht leider nicht – Authentifizierung ist bei der Facebook-API nur via OAuth möglich und das ist eben das Ding mit dem Access-Token (das hat auch wirklich gute Gründe und ist eine intelligente und sinnvolle Sache).

    Die einzig sinnvolle Lösung für eine Anwendung, die viele Leute nutzen möchten ist deshalb der Web mit dem Browserfenster, die ich hier beschrieben habe:

    http://frank-it-beratung.com/blog/2011/01/29/tutorial-ein-facebook-pinnwandeintrag-mit-visual-basic-oder-c-teil-2/

    Alternativ findest Du die Single-User-Lösung hier beschrieben:

    http://frank-it-beratung.com/blog/2010/12/10/tutorial-ein-facebook-pinnwandeintrag-mit-visual-basic-oder-c-teil-1/

    Und die Combo-Box ist hier nur ein Beispiel, eine List Box ist auch möglich. Die Inhalte der Profile Deine Freunde kannst Du auch über die API auslesen, einfach https://graph.facebook.com/%5BID des Freundes]/

    Dass nur ein Teil der Freunde geladen wird ist mir noch nie aufgefallen, das werde ich auch mal genauer beobachten und testen!

    Schöne Grüße,

    Simon

  13. Willi sagt:

    Ja, hast mir super geholfen. Dankeschön vielmals.
    Habs jetzt soweit, dass ich die Freunde laden kann, aber ich kriege den Login nicht hin, im WebBrowser wird die IE Aktion abgebrochen Seite angezeigt. Ich brauche ja nur einen Single-User Login, aber so, dass es den Access-Token selbst ausliest und damit automatisch einloggt, soll halt möglichst leicht zu bedienen sein, am liebsten wären mir zwei Textboxen für E-Mail und Passwort und ein Loginbutton.

    Das mit dem „Spam“ kann man wirklich nicht ganz abstreiten, da ich das ja automatisieren möchte, aber bei 25 Posts am Tag kann man das auch manuell machen, wirklich wichtig ist mir dabei, dass die Freunde sortiert in einer Liste stehen, die ComboBox kann ich ja durch ne ListBox austauschen, oder? Jedenfalls kann ich dann ja durch die ausgelesenen Daten, den Namen und die ID der Freunde deren Profile im Browser anzeigen lassen, geht das auch über die API? Dass es so „abgespeckt“ aussieht, wie der Login im Browser vom Access-Toke-Manager. Weil man sonst Plug-ins für den Browser hinzufügen muss, damit es gescheit geht, hab im Moment keine Idee wie ich das machen soll.

    Hab die ComboBox mit einer ListBox erweitert, sortiert und einen Zähler für die ListBox eingebaut, nun zeigt er mir nur 3.344 Freunde an, obwohl auf dem Account an die 5.000 sind, lässt es automatisch die Freunde weg, die ihre Pinnwand-Funktion abgeschaltet haben?

    Nochmals lieben Dank, ich hoffen ich nerve nicht 😉

    LG Willi

  14. Simon A. Frank sagt:

    Hallo Willi,

    Mit der Möglichkeit, auf anderen Pinnwänden Botschaften zu hinterlassen sind natürlich einige sinnvolle Sachen denkbar, in den meisten Fällen wird dies jedoch als „Spam“ missbraucht, deshalb wird das Facebook wohl bald abschalten.

    Wann man gesperrt wird kann man aus meiner Erfahrung nicht genau sagen: Das hängt scheinbar davon ab, wie „vertrauenswürdig“ die App von Facebook eingestuft wird. Umso länger diese aktiv ist und umso weniger diese als Spam usw. markiert oder blockiert wird, desto mehr kann man damit posten. Bei einer neuen App sind es meist 25 Posts pro 24 Stunden auf fremden Pinnwänden.

    Das Access-Token kannst Du mit meinem Tool „Access-Token-Manager“ generieren (http://frank-it-beratung.com/blog/access-token-manager/), Du kannst es mit dem „Graph API Explorer“ direkt in Facebook erzeugen (http://frank-it-beratung.com/blog/2012/12/30/access-tokens-mit-facebook-graph-api-explorer-erstellen/) oder Du programmierst das „Login“ selbst, wie im ersten Teil des Tutorials beschrieben (http://frank-it-beratung.com/blog/2010/12/10/tutorial-ein-facebook-pinnwandeintrag-mit-visual-basic-oder-c-teil-1/)

    Deine letzte Frage: Ja, richtig verstanden.

    Ich hoffe, ich konnte etwas weiterhelfen und wünsche viel Erfolg bei Deinem Projekt!

    Schöne Grüße,

    Simon

  15. Willi sagt:

    Sag mal, weisst du zufällig wie lange man zwischen den einzelnen Posts mindesten warten muss, um keine Sperre zu bekommen? Hab manuell gepostet und dann hab ich für zwei Tage eine Sperre bekommen, weil ich die funktion zu schnell benutzt hab, denke nämlich daran das dann in meinem Tool zu automatisieren, dass es die Freundesliste durchläuft und in bestimmten Zeitabständen Postet.
    Was ich noch nicht so ganz verstehe ist, ob der Access-Token in dieser Version generiert und ins Textfeld „Access-Token“ ausgegeben wird oder brauch ich dafür dein Access-Token-Tool(der genaue Name fällt mir grad net ein) und trage dann daraus den Token ins Textfeld „Access-Token“ ein?
    Und vorerst letzte Frage: Ich muss ja nicht jeden FB-Account der das Tool nutzt als Entwickler registrieren, oder? Also ich nehme z.B. meinen Account, erstelle eine neue Anwendung, Trage die App-ID ein und kann das dann für jeden x-beliebigen Account nutzten, hab ich das so richtig verstanden?

    LG und Danke.

  16. Willi sagt:

    Supi, danke für die schnelle Antwort. Denkst du es wird andere Möglichkeiten dafür geben? Alleine wegen den mobilen Apps. Will ein paar Freunden ein bisschen helfen und brauche das dafür schon nur, weil Facebook nach jeder Aktion die Kontakte durcheinander würfelt und man so nicht mehr weiss, wen man schon angeklickt hat und wen nicht, bei knapp 2.500 Kontakten ist das echt lästig. Naja, werd erstmal zusehen, dass ich die Möglichkeit noch nutzte solange es geht.

  17. Simon A. Frank sagt:

    Hallo Willi, Danke für Dein Feedback. Es heißt jetzt nicht mehr „Anwendung“ sondern „App“ und ist hier zu finden – aber noch sehr ähnlich wie in meinem Tutorial beschrieben:

    https://developers.facebook.com/apps

    Der Code, der hier erklärt wird funktioniert weiterhin – irgendwann in Kürze wird nur von Facebook die Funktion abgestellt, Post auf fremden Pinnwänden zu schreiben – Details siehe mein Kommentar vom 7.1.2013

  18. Willi sagt:

    Hallo Simon,

    hab deinen Code ausprobiert und es scheint bislang alles ohne Probleme zu funktionieren. Leider hab ich das Problem, dass ich bei Facebook auf der Developers Seite nirgends was finde um eine Anwendung zu erstellen, scheint so, dass sich dort was geändert hat, der Post hier und dein Code sind ja schon etwas älter, geht das denn überhaupt noch? Also hat Facebook die Funktion vielleicht abgeschaltet? Und muss man evtl. was am Code ändern? Komme da leider nicht weiter würde mich über Hilfe freuen.

    LG Willi

  19. Simon A. Frank sagt:

    Im Oktober hat Facebook angekündigt, dass es „in Kürze“ nicht mehr via API möglich sein wird, auf Pinnwänden von Freunden zu schreiben (siehe auch meinen Post von November: http://frank-it-beratung.com/blog/2012/11/07/facebook-api-posts-auf-pinnwand-von-freunde-bald-nicht-mehr-moglich/) – derzeit geht es noch, aber jeder, der eine Anwendung entwickelt sollte dies bedenken!

  20. Simon A. Frank sagt:

    Hallo Tobias, Du musst auch die Klasse „FriendList“ anlegen – am Ende des Artikels findest Du den Link zum Quellcode!

  21. Tobias sagt:

    Ich habe ein Problem,
    und zwar das VB sagt, dass „Friendlist“ nicht definiert ist
    „Der Typ“FriendList“ ist nicht definiert

    hoffe du kanst mir helfen

  22. Simon A. Frank sagt:

    Hallo Tony,

    teste es doch mal „manuell“, d.h. kopiere die URL mit dem Token in den Browser (nicht den IE verwenden!):

    https://graph.facebook.com/me/friends?&access_token=XYZ

    Kommt dann auch ein Fehler?

    Schöne Grüße,

    Simon

  23. Tony sagt:

    ich bekomme irgendwie immer:
    {
    „error“: {
    „message“: „Malformed access token AAHScK8R3ZZIBAI5vBdGHL…“,
    „type“: „OAuthException“,
    „code“: 190
    }
    }
    und ich hab keine ahnung wieso… Oo

  24. Simon A. Frank sagt:

    Ich verstehe … leider kann ich den Fehler nicht reproduzieren, bei mir werden Freunde mit Umlauten problemlos dargestellt. Ich würde mal mit System.Text.Encoding rumspielen, schon mal UTF8 statt ASCII probiert?

  25. Christian Heß sagt:

    Nachtrag: Das Problem besteht ja nicht beim schreiben der Nachricht, sondern beim Einlesen der Freundesliste.

  26. Christian Heß sagt:

    Moin Simon,
    soweit so gut, das schluckt er jetzt! 😉

    Die Frage ist nur, wie verwandle ich meine eingelesene .json datei / den Memory stream entsprechend? Das sind ja wie ich das sehe unterschiedliche Datentypen.

    LG

  27. Simon A. Frank sagt:

    Oh, sorry, das „New“ ist zuviel, richtig ist:

    Dim UriRfc3986CharsToEscape() As String = {„!“, „*“, „‚“, „(„, „)“}

  28. Christian Heß sagt:

    Hallo Simon,
    irgendwas stimmt mit dem Code für Vb bei dem angegeben Post aber nicht die Zeile
    „New () {„!“, „*“, „‚“, „(„, „)“}“
    ist nicht richtig.

    Die „()“ Klammern mag er nicht. „Es wird ein Typ erwartet“
    Könntest du evtl. nachhsehen woran das Liegt?

    LG und vielen Dank 🙂
    Christian

  29. Simon A. Frank sagt:

    Hallo Christian, vielen Dank 🙂

    zu der Sache mit den Umlauten habe ich mal einen extra Beitrag geschrieben:

    http://frank-it-beratung.com/blog/2011/07/16/oauth-probleme-mit-umlauten-losungen-fur-php-perl-c/

    so müsste es eigentlich gehen!

  30. Christian Heß sagt:

    Hey, super tutorial, habe lange nach sowas gesucht 🙂

    Nun zu meinem Problem: Der Code kommt mit Sonderzeichen aller Art (zB dem „è“) nicht zurrecht. Wie muss ich den Code verändern, damit ich auch bei Freunden mit solchen Namen keine Fehler bekomme?

    LG

  31. Simon A. Frank sagt:

    ja, das ist ein Array, also mit []! Wenn es nicht klappt schicke es mir per Mail, dann helfe ich gerne!

  32. Hallo, ich bin schon viel weiter gekommen und habe ein Deserialisierungs Model für ein Facebook Account erstellt.

    Aber da gibt es ein Feld:

    „interested_in“: [
    „female“
    ],

    wie deserialisiere ich das, ist das eine Array, oder einer eine Unterklasse, und was ist das Item „female“ den überhaupt in vb.net Quellcode??

  33. Kanst du mir ein Deserialisirungs Modell für den Facebook Feed schreiben. Ich hänge da irgendwie etwas fest.

  34. Ich habe da ein kleines Problehm, den „next“ läst sich in Visual Basic leider nicht Declarieren 🙁

  35. Simon A. Frank sagt:

    Doch, das ist kein Problem – man muss die Klasse(n) wie folgt verändern. Es macht nichts, wenn „previous“ oder „next“ leer ist.

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

    [DataMember(Name=“paging“)]
    public PagingData Paging { get; set; }

    }

    [DataContract]
    public class PagingData
    {
    [DataMember]
    public string next { get; set; }

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

    • Da hast du Vaiablen vergessen^^

      Echt, ich verwendete für mein anderes Modul noch den alten Javascript Deserialisierer und der pakte mir alles schön in eine Directory und das ding war dan sehr mit Fehlern behaftet, leider :(.

      Aber ich werde es gleich mal umsetzen. Den mit Paging kann ich dann die gesamte Freundesliste holen.

      Ich habe übrigens dein Code einwenig umgeändert, access_token ist jetzt ein Get Parameter geworden und me wurde durch Acount ersetzt.

      Aber vielendank für diesen hilfreichen Anreiz, den dein Code hat mir echt sehr weiter geholfen!!!!

  36. Vielen dank, ich habe es jetzt geschaft, wer es selber sehen will,

    http://update.zentrix.co.cc/facebook_checker/app/explorer/FrindList.aspx?acount=&access_token=

    Aber ich habe noch eine kleine Frage, undzwar wie mache ich dass mit den Paging, weil das ist ja (leider) Dynamisch. Ich habe da ja auf seite 1 nur „Vor“ und schon ab seite 2 „Vor“ und „Zurick“, aber die Statische Klasse kann das ja nicht ohne Excption abbilden oder??

  37. Vielen dank, du weiß echt nicht wie sehr du mir geholfen hast ;))

  38. Der DataContractJsonSerializer Fehlt, ich kan in der endsprechenden namespace leider echt keine JSON namespace finden.

    Bin so langsam echt am verzweifeln, welche netversion brauche ich da?? Ich habe glaube Netframework 4 und Visual Studio 2010 Professional.

    • Simon A. Frank sagt:

      …das müsste eigentlich genügen und

      using System.Runtime.Serialization;
      using System.Runtime.Serialization.Json;

      aber ich schau mir das nochmals in meinem Projekt an, auf das ich gerade keinen Zugriff habe. Ich melde mich nochmal!

    • Ich schreibe in Visual Basic und da finde ich das leider nicht als namespace. Aber ich werde nochmal in C# nachsehen ;))

    • Simon A. Frank sagt:

      Ja, das geht auch in VB und jetzt ist mir die Lösung wieder eingefallen: wenn man nicht zufällig auch den Visual Studio Web Developer installiert hat geht das „automatisch“, ansonsten muss man unter „Verweise“ des Projekts die System.Runtime.Serialization hinzufügen!

  39. Also ich habe jetzt Versucht das JSON Request zu Deserialisieren, aber leider kennt ehr die ganzen Attribute _ und _ nicht! Was kann ich da machen?

    Grüße, Aleksandar Herbrich

  40. 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!

  41. 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!

  42. user sagt:

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

  43. Dominic sagt:

    Sehr schön, danke =)

    Werde ich mir erstmal schön angucken =)

    Gruß

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

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.