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 System.Runtime.Serialization; using System.Runtime.Serialization.Json; using System.IO; /* Tutorial Teil 3: Facebook mit C# * http://www.Frank-IT-Beratung.com/blog/ */ namespace WindowsFormsApplication1 { public partial class Form1 : Form { FriendList myFriendList; public Form1() { InitializeComponent(); } private void cmdSenden_Click(object sender, EventArgs e) { byte[] Nachricht = null; byte[] Antwort = null; string AccessToken = null; string u = ""; AccessToken = txtAccessToken.Text; if (string.IsNullOrEmpty(AccessToken)) { MessageBox.Show("Bitte erst auf 'Login' klicken"); return; } //postet die Nachricht auf der Wall des ausgewählten Users string GraphURL = "https://graph.facebook.com/me/feed"; if (comboFreunde.Text != "me") { GraphURL = "https://graph.facebook.com/" + myFriendList.Friend[comboFreunde.SelectedIndex - 1].id + "/feed"; } //MessageBox.Show(GraphURL); //WebClient anlegen System.Net.WebClient myWebClient = new System.Net.WebClient(); //Except100 ausschalten, sonst gibt es u. U. Fehlermeldungen System.Net.ServicePointManager.Expect100Continue = false; u = "message=" + txtStatusupdate.Text + "&access_token=" + AccessToken; Nachricht = Encoding.UTF8.GetBytes(u); try { Antwort = myWebClient.UploadData(GraphURL, Nachricht); //MessageBox.Show(System.Text.Encoding.ASCII.GetString(Antwort)); MessageBox.Show("Erfogreich gepostet!"); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void cmdLogin_Click(object sender, EventArgs e) { string u = "https://graph.facebook.com/oauth/authorize?"; //Anwendungs-ID - hier statt ??? Ihre App ID eintragen u = u + "client_id=????"; //Berechtigung u = u + "&scope=publish_stream"; //URL, die nach Aufruf angezeigt wird u = u + "&redirect_uri=http://www.facebook.com/connect/login_success.html"; //Login-Typ u = u + "&type=user_agent"; u = u + "&display=popup"; webBrowser1.Navigate(u); } private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) { //der Access-Token hängt an der URL string q = webBrowser1.Url.ToString(); //jetzt auslesen if (q.Contains("#access_token=")) { q = q.Substring(q.IndexOf("access_token=") + 13); txtAccessToken.Text = q.Substring(0, q.IndexOf("&")); } } private void cmdFreundeLaden_Click(object sender, EventArgs e) { /* Im folgenden viel Copy & Paste von cmdSenden_Click * um im Rahmen des Tutorials die Unterschiede aufzuzeigen. * In der Praxis empfiehlt sich diese Redundanz natürlich nicht. */ byte[] Antwort = null; string AccessToken = null; AccessToken = txtAccessToken.Text; if (string.IsNullOrEmpty(AccessToken)) { MessageBox.Show("Bitte erst auf 'Login' klicken"); return; } //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)); MessageBox.Show("Liste der Freunde geladen!"); } catch (Exception ex) { MessageBox.Show(ex.Message); return; } //JSON deserialisieren DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(FriendList)); MemoryStream ms = new MemoryStream(Antwort); myFriendList = ser.ReadObject(ms) as FriendList; //Zum Test Name und ID des ersten Freundes ausgeben: //MessageBox.Show("Name: " + myFriendList.Friend[0].name + " / ID: " + myFriendList.Friend[0].id); //Alle Freunde in die ComoboBox: comboFreunde.Items.Add("me"); // erstes Element ist meine eigene Pinnwand for (int i = 0; i < myFriendList.Friend.Length; i++) { comboFreunde.Items.Add(myFriendList.Friend[i].name + " (ID: " + myFriendList.Friend[i].id + ")"); } comboFreunde.SelectedIndex = 0; } } }