Last active
August 29, 2015 14:05
-
-
Save lucahammer/a8994008f3ec91e0e33b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'dart:html'; | |
import 'dart:async'; | |
import 'dart:convert'; | |
var host = "graph.facebook.com/v1.0"; //Facebook Graph API | |
var group = "229552893839458"; //Gruppe mit der ich aktuell arbeite | |
var url = "http://$host/$group"; //URL die Gruppeninfo als JSON zurückgibt | |
var data; //HTML Element, wo die Daten dargestellt werden | |
var log; //HTML Element für Log-Einträge | |
var accessTokenShort = 'USE-YOUR-OWN'; //Access Token with group permissions (testing only!) | |
var appId ="USE-YOUR-OWN"; | |
var appSecret = "USE-YOUR-OWN"; //TODO: Sollte nie im Clientcode sein! | |
var accessToken = "USE-YOUR-OWN"; | |
Map posts; //Hier werden die jeweils aktuellen Daten von Facebook gespeichert | |
int counter = 1; //Hacky Counter, um anzuziegen die wievielte Seite geladen wurde | |
void main() { | |
querySelector('#load').onClick.listen(makeRequest); //Wartet darauf, dass auf den Load-Button geklickt wird, woraufhin die Infos geholt werden | |
data = querySelector('#json_content'); //Wählt das HTML Element, wo die Daten dargestellt werden. | |
querySelector('#longterm').onClick.listen(getLongTermToken); //wartet auf Klick | |
querySelector('#posts').onClick.listen(getPosts); //wartet auf Klick | |
querySelector('#moreposts').onClick.listen(getMorePosts); //Button für mehr Posts | |
log = querySelector('#log'); //Log-HTML-Element | |
} | |
/*void makeRequest(Event e) { //Einfacher get request | |
var path = url; | |
HttpRequest.getString(path) | |
.then(processString) | |
.catchError(handleError); | |
}*/ | |
void getPosts(Event e) { //Lädt die erste Seite an Posts | |
var httpRequest = new HttpRequest(); //neues httpRequest Objekt | |
var path = "https://graph.facebook.com/v2.1/$group/feed?access_token=$accessToken"; | |
httpRequest | |
..open('GET', path) //es handelt sich um einen GET request | |
..onLoadEnd.listen((e)=> getPostsComplete(httpRequest)) //wenn alles geladen ist führe requestComplete aus | |
..send(''); //kann leer gesendet werden, da nur GET | |
log.children.add(new LIElement()..text = 'Seite 0 geladen: $path'); | |
} | |
getPostsComplete(HttpRequest request) { | |
if (request.status == 200) { //falls alles OK ist mach folgendes | |
processPosts(request.response); //verarbeite das geladene Ergebnis(JSON) mit processString | |
} | |
else { //falls nicht OK gib den Fehlercode aus | |
data.children.add(new LIElement()..text = 'Failed. Status={$request.status}'); | |
} | |
} | |
void processPosts(json){ //Wandelt JSON in eine Dart Map um und gibt die Timecodes der Beiträge als Liste aus | |
posts = JSON.decode(json); | |
//data.children.add(new LIElement()..text = posts['data'][1].toString()); | |
for (var i=0; i<posts['data'].length; i++) { | |
data.children.add(new LIElement()..text = posts['data'][i]['created_time'].toString()); | |
} | |
} | |
void getMorePosts(path) { //Lade weitere Seiten | |
var httpRequest = new HttpRequest(); | |
var path = posts['paging']['next']; | |
httpRequest | |
..open('GET', path) //es handelt sich um einen GET request | |
..onLoadEnd.listen((e)=> getMorePostsComplete(httpRequest)) //wenn alles geladen ist führe requestComplete aus | |
..send(''); | |
} | |
getMorePostsComplete(HttpRequest request){ | |
if (request.status == 200) { //falls alles OK ist mach folgendes | |
processPosts(request.response); //verarbeite das geladene Ergebnis(JSON) mit processString | |
log.children.add(new LIElement()..text = 'Seite $counter geladen.'); | |
if (counter<30) { | |
getMorePosts(counter); | |
counter++; | |
} | |
} | |
else { //falls nicht OK gib den Fehlercode aus | |
data.children.add(new LIElement()..text = 'Failed. Status={$request.status}'); | |
} | |
} | |
void getLongTermToken(Event e) { //Holt sich mithilfe des KurztermToken, den man über den Weblogin bekommt einen Longtermtoken. | |
var httpRequest = new HttpRequest(); //neues httpRequest Objekt | |
var path = "https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=$appId&client_secret=$appSecret&fb_exchange_token=$accessTokenShort"; | |
httpRequest | |
..open('GET', path) //es handelt sich um einen GET request | |
..onLoadEnd.listen((e)=> tokenrequestComplete(httpRequest)) //wenn alles geladen ist führe requestComplete aus | |
..send(''); //kann leer gesendet werden, da nur GET | |
} | |
tokenrequestComplete(HttpRequest request) { | |
if (request.status == 200) { //falls alles OK ist mach folgendes | |
processToken(request.response); //verarbeite das geladene Ergebnis(JSON) mit processString | |
} | |
else { //falls nicht OK gib den Fehlercode aus | |
data.children.add(new LIElement()..text = 'Failed. Status={$request.status}'); | |
} | |
} | |
void processToken(token) { //gibt Longterm Access Token aus. Sollte später direkt in die Datenbank gespeichert werden. | |
data.children.add(new LIElement()..text = token.toString()); | |
} | |
void makeRequest(Event e) { //sauberer http request | |
var path = url; //was abgerufen werden soll | |
var httpRequest = new HttpRequest(); //neues httpRequest Objekt | |
httpRequest | |
..open('GET', path) //es handelt sich um einen GET request | |
..onLoadEnd.listen((e)=> requestComplete(httpRequest)) //wenn alles geladen ist führe requestComplete aus | |
..send(''); //kann leer gesendet werden, da nur GET | |
} | |
requestComplete(HttpRequest request) { | |
if (request.status == 200) { //falls alles OK ist mach folgendes | |
processString(request.response); //verarbeite das geladene Ergebnis(JSON) mit processString | |
} | |
else { //falls nicht OK gib den Fehlercode aus | |
data.children.add(new LIElement()..text = 'Failed. Status={$request.status}'); | |
} | |
} | |
processString(String jsonString) { //JSON verarbeiten | |
Map info = JSON.decode(jsonString); //Dekodiere den JSON String als eine Key-Value Map | |
//data.children.add(new LIElement()..text = info.toString()); //komplettes JSON in einfachen String umwandeln | |
data.children.add(new LIElement()..text = info['id']); //Value des Keys id als Listenelement ausgeben | |
data.children.add(new LIElement()..text = info['name']); //siehe oben | |
data.children.add(new LIElement()..text = info['description']); | |
data.children.add(new LIElement()..text = info['privacy']); | |
data.children.add(new LIElement()..text = info['icon']); | |
data.children.add(new LIElement()..text = info['updated_time']); | |
data.children.add(new LIElement()..text = info['email']); | |
/*for (int i = 0; i < info.length; i++) { //funktioniert nicht | |
var infoPunkt = info.; | |
data.children.add(new LIElement()..text = infoPunkt); | |
}*/ | |
} | |
handleError(Error error) { //falls etwas schief läuft, sag dass etwas schief lief | |
data.children.add(new LIElement()..text = 'Request failed. $error'); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment