Summer of Dart: Authentifizierte Facebook API Calls und alle Beiträge einer Gruppe abrufen

Heute hat es geregnet und ich habe etwas mehr Zeit als geplant mit dem Dartprojekt verbracht. Gute Fortschritte. Ich kann kurzfristige Access Token in langfristige umwandeln, die aktuellsten 20 Beiträge einer Gruppe abrufen und alle älteren auch. Der Code wird immer chaotischer, aber funktioniert.

Kurzlebigen Token in langlebigen Umwandeln

Eine Login-Routine habe ich immer noch nicht implementiert. Aber über den Graph-Explorer habe ich mir einen kurzelebigen Accesstoken für meinen Account geholt. Mit Gruppen-Berechtigung. Dazu habe ich eine Facebook App erstellt, im Graph Explorer ausgewählt und den ‚Get Access Token‘ Button geklickt. Der entstandene Access-Token ist allerdings nur ein paar Stunden gültig. Man kann ihn aber in einen langlebigen (1-2 Monate) umwandeln. Dazu braucht man zum kurzlebigen Token die App Id und das App Secret. Findet man beides bei den App Einstellungen. Hat man diese jeweils als Variablen in seinem Dart Programm gespeichert, kann man über einen HTTP Get Request den langlebigen Token bekommen: https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=$appId&client_secret=$appSecret&fb_exchange_token=$accessTokenShort

Authentifizierter API Call

Auch hier handelt es sich um einen einfachen Http-Request, an den nach einem ‚?‘ der Access Token gehängt wird. „https://graph.facebook.com/v2.1/$group/feed?access_token=$accessToken“ ruft etwa die aktuellsten Beiträge einer Gruppe ab.

Weitere Gruppenbeiträge abrufen

Facebook liefert JSON zurück, welches man mithilfe von JSON.decode in ein Dart Objekt umwandeln kann. Die größte Schwierigkeit für mich war sich in der Mischung aus Map und List zurechtzufinden. Ich wollte den Zeitstempel der Beiträge auf der Seite ausgeben, um schnell zu sehen, von wann die geladenen Beiträge sind. Zu denen kommt man mit folgender Konstruktion: „posts[‚data‘][i][‚created_time‘].toString()“.

  • „posts“ ist die Map in die ich die JSON response decodiert habe.
  • „[‚data‘]“ gibt mir den Value zum Key „data“ im „posts“ Objekt.
  • „[i]“ greift auf das i-te Element (wir befinden uns offensichtlich in einer for-Schleife) der List, welche die Value zum Key „data“ im „posts“ Objekt ist, zu.
  • „[‚created_time‘]“ wählt in der Map, welche ein Listenelement ist, welche ein Element einer Map ist, den Value zum Key „created_time“ aus.
  • „.toString()“ wandelt nun diesen Wert in einen String um, damit er ausgegeben werden kann.

Im Rückgabewert befinden sich auch Links um weiter und zurück zu navigieren, welche ich für den nächsten Http-Request nutze: „var path = posts[‚paging‘][’next‘];“. Dies wiederhole ich aktuell 30 mal, wobei das Programm abbricht, wenn es keinen „next“-Link mehr gibt. Dies passiert wenn man sich auf der letzten Seite befindet. Daher sollte ich irgendwann eine if-Abfrage einbauen, ob es denn einen Link gibt und sonst ausgeben, dass alle Beiträge geladen wurden.

Wie immer der gesamte Code als Gist. Ihr müsst allerdings eigene Access Token, App Ids und App Secrets einfügen. Und die dann nicht weitergeben.

Diese Mal auch das dazugehörige HTML. Inzwischen gibt es vier Buttons, um unterschiedliche Dinge zu machen.

Weitere Pläne

Man könnte den Code etwas aufräumen und besseres Error-Handling einführen. Aber das kann auch warten. Ich möchte als nächstes die Auswahl der Gruppe ins HTML verfrachten. Vermutlich ein einfaches „Paste Group URL“ Feld. Und dann statt dem komischen Counter-Dingens dem Weitere-Beiträge-Link folgen bis keiner mehr da ist. Außerdem würde ich gerne Daten lokal speichern, damit sie nicht ständig über die API abgefragt werden müssen. Allerdings habe ich noch keine Ahnung wie ich das mache. Würde am liebsten etwas fertiges (app engine datastore oä. nutzen). Falls Gruppe vorhanden, frag ob neue Beiträge hinzufügen. Und dann kann ich auch schon an unterschiedlichen Arten der Darstellung und einer ersten Suchfunktion arbeiten. Und wenn das alles dann funktioniert, dann mache ich mir Gedanken darüber das ganze als Tool zu Verfügung zu stellen.


Beitrag veröffentlicht

in

von

Schlagwörter:

Kommentare

Eine Antwort zu „Summer of Dart: Authentifizierte Facebook API Calls und alle Beiträge einer Gruppe abrufen“

  1. […] dem letzten Blogpost habe ich meinen Code um eine Zähl- und Sortierfunktion erweitert, damit ich mir die […]

Schreibe einen Kommentar

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