Подтвердить что ты не робот

Получение сторонних сообщений из API графиков Facebook

Я собираюсь создать приложение вкладки Facebook для клиента, который извлекает и отображает сообщения на странице Facebook. Приложение также предлагает возможность добавлять новые сообщения на страницу и комментировать существующие сообщения. Это достигается с помощью API-интерфейса Facebook (через PHP SDK).

У меня все работает, но у меня возникла проблема с публикацией из моего приложения. Когда пользователь отправляет сообщение, он отправляется в API-интерфейс Graph через следующий запрос.

$facebook->api([PAGE_ID]/feed', 'POST', array(
    'message' => [MESSAGE]
));

Этот запрос будет успешным, и сообщение появится на соответствующей странице Facebook с именем "Via my app name" под ним.

Когда я затем запрашиваю список сообщений на странице через API (запрос ниже), вышеупомянутое сообщение не появляется.

$posts = $facebook->api([PAGE_ID].'/feed');

У меня есть сильное чувство, что это связано с тем, что сообщение отправлено из стороннего приложения. Я слышал, что Facebook "понижает" позиции третьей стороны, чтобы поощрять использование своей собственной платформы. Появляются все сообщения, которые были отправлены непосредственно через Facebook.

Однако должен быть способ получить такие сообщения.

Обновление для Fisch ниже

Когда я делаю сообщение в API, возвращается следующий идентификатор сообщения:

112706495458566_468411663221379

Однако, когда я делаю запрос API для него:

$facebook->api('112706495458566_468411663221379');

Получаю следующий ответ:

{
    "error": {
        "message": "Unsupported get request.",
        "type": "GraphMethodException",
        "code": 100
    }
}

Однако, когда я делаю тот же запрос, но с идентификатором сообщения, уже включенного в запрос /feed.

$facebook->api('112706495458566_457890310940181');

Получаю следующий ответ.

{
    "id": "112706495458566_457890310940181",
    "from": {
        "category": "Local business",
        "name": "Genting Casino Southport",
        "id": "112706495458566"
    },
    "story": "\"Very well done to ste,...\" on their own status.",
    "privacy": {
        "value": ""
    },
    "type": "status",
    "application": {
        "name": "Mobile",
        "id": "2915120374"
    },
    "created_time": "2012-11-25T22:12:21+0000",
    "updated_time": "2012-11-25T22:12:21+0000",
    "comments": {
        "count": 0
    }
}

Поэтому по какой-то причине Facebook даже не позволяет мне посмотреть сообщение по его идентификатору.

Обновление # 2

В моем поиске ответа на это я столкнулся с исследованием, которое усиливает мои более ранние подозрения в отношении "веса", назначенного для сообщений сторонних приложений.

Из отчета EdgeRank Checker: "Когда объект создается в Facebook, ему присваивается вес. Мы полагаем, что Facebook стратегически уменьшил вес объектов, созданных с помощью API. Причиной этой стратегии было бы поощрение большего количества контента создание в рамках платформы Facebook, что в конечном итоге увеличивает ценность их платформы при одновременном увеличении количества показов объявлений".

http://adage.com/article/digitalnext/posting-facebook-truth-party-applications/229694

Это может объяснить, почему сообщения не передаются в ответ API/feed или /posts API.

Однако это не объясняет, почему API даже не вернет сообщение по его ID (см. обновление выше).

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

Обновление # 3

На основании приведенных ниже комментариев, я теперь пытаюсь сделать то же самое, но используя учетную запись Facebook, которая не является владельцем приложения, или на самом деле имеет какое-либо отношение администратора к любой странице в Facebook (моя личная учетная запись Facebook).

Я разрешил приложение, используя диалог oAuth, и принял следующие разрешения:

  • электронная почта
  • user_birthday
  • publish_stream

С моим блестящим новым токеном доступа я делаю следующий запрос API:

$post = $facebook->api('112706495458566/feed', 'POST', array(
    'message' => 'this is a test'
));

Кому я получаю следующий ответ:

array(1) {
    ["id"] => string(31) "112706495458566_470663409662871"
}

Затем я проверяю фактическую страницу Facebook, сообщение, которое я только что отправил, появилось из моей учетной записи пользователя Facebook, как и ожидалось.

Затем я делаю следующий запрос для получения всех сообщений на странице:

$posts = $facebook->api('112706495458566/feed');

Для чего я получаю длинный массив всех сообщений на странице (которые я не буду публиковать здесь). Тем не менее, сообщение, которое я только что отправил (и получил идентификатор обратно), не появляется.

Затем я делаю прямой запрос для этого сообщения, используя идентификатор, который был возвращен запросом POST.

$post = $facebook->api('112706495458566_470663409662871');

Что вызывает следующее исключение (в соответствии с предыдущей попыткой).

GraphMethodException: Unsupported get request.

Повторяю, эта попытка заключалась в использовании учетной записи, которая полностью не связана с приложением или с любой из страниц, на которые мы пытаемся получить данные. У учетной записи также никогда не было никакого контакта с приложением (т.е. Это был первый раз, когда разрешения были приняты и сгенерирован ключ oAuth).

4b9b3361

Ответ 1

Используйте комбинацию Yahoo Query Language и .ajax(), чтобы очистить Канал передачи Facebook.

Преимущество, связанное с очисткой данных на веб-странице LIVE Facebook, - это не нужен токен-ключ, чтобы получать последние в реальном времени фиды!

HTML:

<div id="results"></div>

jQuery:

$.ajax({
    url: "http://query.yahooapis.com/v1/public/yql",
    dataType: "jsonp",
    success: function(data) {
        console.log(data.query.results.json);
        $.each(data.query.results.json.entries, function(i, v) {
            $('#results').append(data.query.results.json.entries[i].content + '<br /><br />');
        });
    },
    data: {
        q: 'select * from json where url="https://www.facebook.com/feeds/page.php?id=112706495458566&format=json"',
        format: "json"
    }
});

DEMO: Вдохновленный этим онлайн-учебник.

jsFiddle Facebook-каналы


EDIT: Нажмите изображение для пересмотренного jsFiddle со стилем

O8AHe.png


EXTRA

В дополнение к моему ответу выше, здесь квазисвязывается jsFiddle под названием:

jsFiddle Tutorial: Создание динамического Div (теперь улучшено!)

В этом учебном пособии показано, как преобразовать разметку HTML, чтобы он стал "шаблоном", который готов к использованию с jQuery в качестве объекта, который затем может быть добавлен к веб-странице правильно.

Ответ 2

Дэн, я пробовал это -

  • Отправьте сообщение с APP на страницу

    POST: "PAGE_ID/feed"
    message: "hi"
    

    Результат: успешное сообщение

  • Запросить список сообщений на странице

    GET: "PAGE_ID/feed"
    

    Результат: все сообщения на странице вкл вышеупомянутый пост.


Почему это сработало?

Поскольку запрос GET был создан с использованием токена доступа пользователя, который является администратором приложения, через которое было отправлено сообщение.

Заключение

Я пробовал все случаи, и окончательный вывод заключается в том, что для извлечения фидов страницы вкл, которые публикуются некоторыми APP, вам нужно использовать токен доступа admin этого приложения (не большая проблема); else, вы просто получите остальные фиды.

Ответ 3

Когда вы делаете сообщение через API, Facebook возвращает вам идентификатор этого сообщения. Вы можете сохранить эти идентификаторы, а затем запросить их позже с помощью API-интерфейса графика или FQL