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
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.
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!
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.
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
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?
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
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.
Ja, die Funktion wurde nun in den letzten Tage (wie bereits im Oktober angekündigt) abgeschalten, Details und andere Möglichkeiten sind hier nachzulesen (ich werde dazu auch mal ein Tutorial schreiben):
https://developers.facebook.com/roadmap/completed-changes/
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.
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.
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ß
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!
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.
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).
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).
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!
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
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
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
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
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.
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.
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
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
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!
Hallo Tobias, Du musst auch die Klasse „FriendList“ anlegen – am Ende des Artikels findest Du den Link zum Quellcode!
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
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
ich bekomme irgendwie immer:
{
„error“: {
„message“: „Malformed access token AAHScK8R3ZZIBAI5vBdGHL…“,
„type“: „OAuthException“,
„code“: 190
}
}
und ich hab keine ahnung wieso… Oo
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?
Nachtrag: Das Problem besteht ja nicht beim schreiben der Nachricht, sondern beim Einlesen der Freundesliste.
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
Oh, sorry, das „New“ ist zuviel, richtig ist:
Dim UriRfc3986CharsToEscape() As String = {„!“, „*“, „‚“, „(„, „)“}
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
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!
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
ja, das ist ein Array, also mit []! Wenn es nicht klappt schicke es mir per Mail, dann helfe ich gerne!
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??
Kanst du mir ein Deserialisirungs Modell für den Facebook Feed schreiben. Ich hänge da irgendwie etwas fest.
Ich habe da ein kleines Problehm, den „next“ läst sich in Visual Basic leider nicht Declarieren 🙁
ok, das Problehm habe ich gelößt ich habe nur die [] vergessen, also nicht next sondern [next]
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!!!!
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??
Vielen dank, du weiß echt nicht wie sehr du mir geholfen hast ;))
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.
…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 ;))
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!
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
Leider verstehe ich die Frage nicht ganz (oder Sitze gerade auf dem Schlauch) – welche Attribute meinst Du?
Es fehlt die gesamte Namespace (habe ich festgestellt)
Ich rede von den Attributen:
DataContract und DataMember
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!
Ist schon übersetzt: Ganz am Ende des Artikels sind zwei Links zu den Beispielen in Visual Basic!
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!
Hab es versucht in dev C++ zu Compalieren.. Welche Libaries brauche ich noch?
Das Beispiel ist C# nicht C++ – möglicherweise überlesen?
Sehr schön, danke =)
Werde ich mir erstmal schön angucken =)
Gruß
Pingback: Tutorial: Ein Facebook Pinnwandeintrag mit Visual Basic oder C# (Teil 2) « Frank IT Consulting&Training