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:
1 2 |
https://graph.facebook.com/<object_id>/picture https://graph.facebook.com/<object_id>/picture?type=normal |
<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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// check for "app_full_proxy.php": if(preg_match('/\/app_full_proxy\.php\?.*src=(.*)/', $url, $result)) { if(!empty($result[1])) { $sanitized = urldecode($result[1]); } } // check for "safe_image.php": else if(preg_match('/\/safe_image\.php\?.*url=(.*)/', $url, $result)) { if(!empty($result[1])) { $sanitized = urldecode($result[1]); } } |
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):
1 |
https://graph.facebook.com/<pageId>/picture?type=normal&access_token=<access_token> |
ggf. benötigt man das auch für die unter 1. genannten Bilder.
HTH