Facebook API: Hochauflösende valide Image-URLs

Guten Tag.

Über die FB-API bekommt man vergleichsweise kryptische Image-URLs, nämlich die Direktlinks in deren CDN. Diese haben drei Probleme:

1. Die URL zeigt auf die gering aufgelöste Version des Bildes, zu erkennen am “_s.jpg” (“s” für “small). Der gängige Ansatz, um an die hochauflösende Version zu kommen, besagt, dass man “_s” durch “_n” (für “normal?) zu ersetzen (einige empfehlen auch “_o” für “original”). Das funktioniert meistens, aber eben nicht immer. Korrekt scheint dieser (selbstverständlich undokumentierte) Ansatz, der quasi analog zur Profilbild-URL funktioniert:

<object_id> kommt aus der API. Achtung: Das funktioniert nur für Posts vom Typ “photo”; Posts vom Typ “link” müssen nach wie vor über die URL im Feld “picture” gehen! Und damit kommen wir direkt zum nächsten Problem:

2. Facebook nutzt Proxy-Skripte zur Generierung der niedrig aufgelösten Bilder. Zu erkennen an …/safe_image.php?…&url=<url_codiert> oder …/app_full_proxy.php?…&src=<url_codiert>. Diese muss man rausfilter, die tatsächliche URL dekodieren:

3. Profilbilder von altersbeschränkten Seiten sind ebenfalls altersbeschränkt 🙂 Für Zugriff muss man den Access Token anhängen (Quelle finde ich gerade nicht mehr wieder):

ggf. benötigt man das auch für die unter 1. genannten Bilder.

HTH

Facebook: API-Zugriff auf altersbeschränkte Seite

Der API-Zugriff auf die Posts einer Seite sieht in PHP eigentlich so aus:

Aber: Wenn die Seite altersbeschränkt ist, dann ist der Response leer.

Man kann das umgehen, indem man einen Access Token mitgibt. Da stellen sich allerdings zwei Fragen:

  1. Wie gibt man einen Token mit?
  2. Woher bekommt man so einen Token?

Zu Frage 1 schlägt das Internet von Query-Parametern bis Request-Header alles mögliche vor, dabei ist es recht einfach:

Wichtig ist dabei offenbar, dass der übergebene Access Token zur Art des Zugriffs passt. Anders gesagt: Es gibt verschiedene Arten von Tokens, nämlich User Access-, App Access-, Page Access-, und Client Token. Wenn ich, wie oben, mittels einer App-ID auf die API zugreife, dann scheint das nur mit einem App Access Token zu funktionieren. Das ist wichtig zu wissen für die folgende Art, so einen Token zu generieren (Quelle, und hier):

  1. Man öffne den Graph API Explorer
  2. Man wähle ganz oben unter “App” die App, über die man auf die API zugreifen will
  3. Man klicke “Zugriffsschlüssel anfordern” (“Get Access Token”)
  4. Man öffne den Tab “Extended Permissions”
  5. Man selektiere “manage_pages” und “
  6. Man klicke “Get Access Token”, akzeptiere die Permissions im Popup
  7. der erzeugte Token gilt für 1 Stunde, was man hier überprüfen kann (einfach rein pasten)
  8. mit diesem “short-lived access_token” kann man einen 60 Tage gültigen Token erzeugen, indem man ihn zusammen mit der App ID und dem App Secret in diese URL einsetzt:

https://graph.facebook.com/oauth/access_token?client_id=FB_APP_ID&client_secret=FB_APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=FB_PAGE_ACCESS_TOKEN_SHORT

Facebook-Apps erfordern HTTPS

Wer sich über folgende Warnung ärgert:

dem sei gesagt, dass Hilfe naht. Denn ab dem ersten Oktober verlangt Facebook zwingend eine “Secure Canvas URL” (und auch eine “Secure Page Tab URL”) für seine Apps:

Der Screenshot stammt aus den Einstellungen einer x-beliebigen App, für die keine secure URLs hinterlegt sind.

Hintergrundinfos dazu gibt es hier.

PS: Als Nutzer finde ich das super. Als Entwickler sollte man sich schnellstens um ein SSL-Zertifikat kümmern 🙂

UPDATE: Hier noch einige Infos (weiter unten im Text, nach der Effekthascherei)

UPDATE 2: Facebook bietet jetzt selbst Hosting von Apps an.

Alternativen für Facebook-Posts aus Actionscript

Wer mit der Facebook-API für Actionscript Posts absetzen will, kann das direkt machen:

oder als Javascript-Overlay:

oder als Pop-Up

Das data-Object beinhaltet die in den Docs unter “Publishing” beschriebenen Parameter.

Facebook Profilbild mit LoaderMax laden

Facebook-Profilbilder kommen von gefühlt 20.000 unterschiedlichen Server; vermutlich eine Load-Balancing-Sache. Und die crossdomain dieser Server ist nicht ganz so offen, wie man das auf den ersten Blick gerne hätte. Nun kann man natürlich aus der URL des Bildes (die sich ja abfragen lässt) den Server extrahieren, und die crossdomain dieses Servers laden… genau das bietet LoaderMax aber schon von haus aus:

das “true” des LoaderContextes bedeutet, dass die entsprechende crossdomain geladen wird.

Facebook Tab: Höhe eines iFrames (kein FBML!) setzen

Wenn man einen Facebook Tab in der Höhe ändern will (default ist 520×800), dann findet man dazu einige Vorschläge im Netz. Die meisten gehen davon aus, dass der Tab in FBML angelegt ist, was er aber nicht mehr sein muss; stattdessen kann man auch einen simplen IFrame benutzen. Die Lösung, die in dem Fall für mich funktioniert hat:

an das Ende des body hängen, also direkt vor </body>. Wichtig: Der div “fb-root”. Viele Lösungen im Netz basieren offenbar darauf, dass ein solches Element schon da ist – was zumindest bei mir nicht der Fall war.

Ich habe für den body außerdem padding und margin auf 0, sowie overflow auf hidden und height auf die Höhe des IFrames gesetzt.

Facebook Click-SPAM wieder entfernen

Auf Facebook häufen sich in letzter Zeit wieder die Clickjacking- (Like-Jacking-) Posts. Während man sich bei den meisten Links fragt, warum zum Henker die entsprechende Person da überhaupt draufgeklickt hat (siehe oben), so kann das trotzdem mal passieren. Anyway: Es ist relativ einfach, den “like” wieder zu entfernen. Man benötigt “nur” zum Beispiel Firebug – oder alternativ einen URL-Sniffer, einen Proxy, Live HTTP Headers, oder irgendwas anderes, um aufgerufene URLs zu sehen. Im Folgenden wird Firebug benutzt.

Wenn man nun also eine Seite geliked hat, so gehe man mit laufendem Firebug erneut auf diese Seite. In den aufgerufenen URLs findet sich auch das Facebook-Like-Script:

Diese URL ist es, die zum Clickjacking verwendet wird. Man kann sie auch direkt öffnen, und sieht dann den gewohnten Like-Button für die entsprechende Seite (siehe zum Beispiel hier für bentlarsen.de):

Und voilà, hier kann man natürlich nicht nur liken, sondern auch wieder unliken. Der entsprechende Eintrag auf der Pinnwand sollte zeitnah (nicht zwingend sofort!) verschwinden.

HTH