Как разместить галерею-картинку на стене пользователя - PullRequest
2 голосов
/ 30 мая 2011

Наше приложение использует как PHP, так и JS-SDK Facebook.Мы можем получить доступ к изображениям пользователей и изображениям его друзей через оба SDK.Загрузка фотографий в пользовательские альбомы также работает.

В настоящее время пользователь выбирает одно из своих изображений, которое обрабатывается на нашем сервере и загружается на Facebook в альбом, из которого оно получено.Эта часть работает.Теперь мы хотим опубликовать это загруженное изображение на стене пользователя.Facebook сам создает сообщение в ленте пользователей о недавно загруженных изображениях (может быть отключено в запросе на загрузку), но эти сообщения не настраиваются.Стандартный запрос на публикацию в Facebook требует URL-адреса дополнительной фотографии.В документе говорится, что не разрешается ссылаться на изображения из сети доставки контента facebook (что было подтверждено графиком API, поскольку выдает соответствующую ошибку).

Возможно ли создать стандартную стену-пост, который содержит изображение галереи как-то?В идеале это будет использовать всплывающее окно галереи, но это явно очень приятно иметь.

Копия, размещенная извне, - это (нежелательный) обходной путь, который мы уже знаем.Повторная загрузка изображения возможна, если она не отображается в галерее дважды.

Ответы [ 3 ]

4 голосов
/ 09 июня 2011

Простое решение:

Получите Tinyurl для вас fbcdn'ed изображение через Tinyurl API:

Пример с URL сверху:

http://tinyurl.com/api-create.php?url=http://a4.sphotos.ak.fbcdn.net/hphotos-ak-snc3/13943_196960329960_683709960_2997879_7206516_n.jpg

Возвращает:

http://tinyurl.com/3ta96kh

Тогда используйте этот URL как "картинку", я попробовал это здесь, и это работает! : http://jsfiddle.net/dwarfy/VYAeD/27/

Было другое решение здесь но кажется, что facebook исправил это, и он все еще говорит об ошибке с CDN facebook, когда я публикую, используя https://graph.facebook.com/PICTURE_ID в качестве изображения вместо URL-адреса изображения FBCDN.

Я думаю, что это лучшее решение ...

В моем примере не используется параметр ссылки, но вы можете установить его для изображения галереи ...

1 голос
/ 09 июня 2011

Действительно, вы не можете публиковать на стенах пользователей изображение, сохраненное на fb, НО также вам не нужно физически сохранять его на вашем сервере.если вы хотите опубликовать изображение, например:

http://a4.sphotos.ak.fbcdn.net/hphotos-ak-snc3/13943_196960329960_683709960_2997879_7206516_n.jpg

Facebook, как вы знаете, не примет это.но нет проблем опубликовать что-то вроде этого: http://yourserver.com/script.php?image=a4.sphotos.ak.fbcdn.net/hphotos-ak-snc3/13943_196960329960_683709960_2997879_7206516_n.jpg (без http: // - это важно, если вы включите http: // facebook узнает, что происходит - и мы не хотим этого:)

script.php - это файл php на вашем сервере, который делает это:

<?
    $url = "http://".$_GET['image'];
    header('Content-type: image/jpeg');
    echo file_get_contents($url);   
?>

или что-то вроде этого:

<?
    $url = "http://".$_GET['image'];
    $image = imagecreatefromjpeg($url);
    //some image modifications here//
    header('Content-type: image/jpeg');
    echo imagejpeg($image, null, 100);
?>

вы также можете добавить базу данныхс URL и напишите что-то вроде этого: http://yourserver.com/script.php?imageid=ID скрытие реальных путей всех изображений.


Если вы хотите сэкономить на трафике после публикации изображений на стенах, просто перенаправьте:

<?
    //if published then just redirect
    $url = "http://".$_GET['image'];
    header('Location: '.$url); die();
?>
0 голосов
/ 06 июня 2011

Вы должны сделать копию этого изображения, иначе вы не сможете использовать это изображение в стандартном диалоговом окне.

Использовать функцию PHP

copy()

Я знаю, что вы ищете любую другую альтернативу, но создание резервного образа на вашем сервере или любом другом сервере является единственным решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...