Facebook Status Post per Graph API in ASP.NET

Ehrlich gesagt, habe ich ein wenig Frust über DOTNETOPENAUTH. Die Abstraktion versteckt einige Details ein Blick in den Source Code reicht nicht, also einfach mal die Facebook Doku angesehen und ganz alte HTTP Requests ausgeführt. Es gibt nicht eine API es gibt mehrere.

Zunächst muss man sich authentifizieren. Das geschieht per URL

   1:   Response.Redirect(
String.Format("https://graph.facebook.com/oauth/authorize?client_id={0}&redirect_uri={1}&scope={2}",
   2:                    ConfigurationManager.AppSettings("appkey"), Request.Url.AbsoluteUri, scope))

 

Darin enthalten die übliche APPID und Secret (kommt hier aus der Web Config) und die benötigten Rechte im Querystring scope. Statt Stream_publish nehme ich publish_actions,offline_access. Letzters um den Access_token länger gültig zu bekommen.

Facebook wechselt dann die API von Graph auf Dialog (#19) um die Anmeldung bei Facebook durchzuführen. Wenn der Benutzer mit diesen Browser angemeldet ist, wird er den Dialog nicht sehen.

image

Als nächstes ist wieder die eigene Website dran und erhält einen Code den man auswerten kann. Damit geht man dann zu Facebook und holt sich den Access Token (#22), der als Text geliefert  und in Code Zeile 17 und ff zerlegt wird.

MIt dem Token kann man dann den Post in die eigen Timeline ausführen (#23 und Zeile 25 im VB.NET Sample)

   1:    If Request("code") Is Nothing Then
   2:   
   3:          Else
   4:              Dim tokens As New Dictionary(Of String, String)()
   5:   
   6:              Dim url As String = String.Format("https://graph.facebook.com/oauth/access_token?
client_id={0}&redirect_uri={1}&scope={2}&code={3}&client_secret={4}"
,
   7:                                                ConfigurationManager.AppSettings("appkey"),
   8:                                                Request.Url.AbsoluteUri,
   9:                                                scope,
  10:                                                Request.QueryString("code"),
  11:                                                ConfigurationManager.AppSettings("secret"))
  12:   
  13:              Dim req As HttpWebRequest = TryCast(WebRequest.Create(url), HttpWebRequest)
  14:              Using resp As HttpWebResponse = TryCast(req.GetResponse(), HttpWebResponse)
  15:                  Dim reader As New StreamReader(resp.GetResponseStream())
  16:                  Dim vals As String = reader.ReadToEnd()
  17:                  For Each token As String In vals.Split("&"c)
  18:                      tokens.Add(token.Substring(0, token.IndexOf("=")),
token.Substring(token.IndexOf("=") + 1, token.Length - token.IndexOf("=") - 1))
  19:                  Next
  20:   
  21:              End Using
  22:              Dim access_token As String = tokens("access_token")
  23:              Dim client = New FacebookClient(access_token)
  24:   
  25:              client.Post("/me/feed", New With {
  26:                  .message = "Hallo Welt-ich teste nur ", .privacy = New With {.value = "SELF"}})
  27:          End If

Damit ich meine Facebook Freunde nicht nerve, habe ich die SIchtbarkeit auf mich beschränkt.

image

Kommentare sind geschlossen