Facebook Graph API: поиск графического объекта по почтовому URL
Учитывая URL публичного поста в Facebook, как найти объект поста в FB Graph API? (во-вторых, почему так много пользовательских фидов пусто или почти пусто при доступе через API?)
Мы хотели бы иметь возможность комментировать или ставить лайки через API Graph v2.x, учитывая его URL. Для этого требуется идентификатор объекта сообщения, о котором мы можем догадаться, но доступ к реальному объекту через API оказался ненадежным (работает для некоторых сообщений, но не для других).
v2 API представил идентификаторы пользователей в области приложения, а идентификаторы сообщений, как правило, имеют вид {идентификатор пользователя в области приложений}_{уникальный идентификатор сообщения}. Ниже приводятся подробности некоторых попыток найти сообщения в API с различными комбинациями этих идентификаторов (глобальный идентификатор пользователя, идентификатор пользователя в области приложения и идентификатор сообщения).
Начнем с простого примера: https://www.facebook.com/evan.prodromou/posts/10153023417510505. Ключевыми характеристиками являются то, что они являются общедоступными, они не являются частью другого поста и, что наиболее важно, не имеют фотографий, которые добавляют дополнительные идентификаторы и URL-адреса для отдельных фотографий и набора фотографий. Профиль Эвана также общедоступен, т. https://www.facebook.com/evan.prodromou не отображает универсальный. Этот контент в настоящее время недоступен
Попытка пустого идентификатора записи с этого URL, /v1.0/10153023417510505 и /v2.2/10153023417510505, приводит к ошибке Unsupported get request (code 100).
Глобальный идентификатор пользователя Эвана - 525575504. Прикрепляя его в качестве префикса, /v1.0/525575504_10153023417510505 и /v2.2/525575504_10153023417510505 по- прежнему выдают одинаковую ошибку Unsupported get request.
Та же ошибка с использованием его идентификатора пользователя, указанного в приложении, /v2.2/10152350676805505_10153023417510505.
Хорошо, давайте попробуем другое направление. Мы будем просматривать страницу пользователя до тех пор, пока не найдем сообщение. Такое ощущение, что это скорее ожидаемый вариант использования API...
И глобальные /v2.2/525575504/posts и app- scoped /v2.2/10152350676805505/posts ничего не возвращают, но /v1.0/525575504/posts возвращает два последних сообщения, это как и это сообщение. Не уверен, почему только эти два, хотя есть много других недавних публичных сообщений. Подобное можно получить через его
id
поле в обеих версиях API, т.е. /v1.0/525575504_10153045879215505 и /v2.2/10152350676805505_10153045879215505, но обе версии API возвращают ошибку запроса Unsupported при получении сообщения через поле идентификатора, например /v1.0/525575503_35 0,2 / 10152350676805505_351575675029953Попробуем другой публичный пост, этот с картинками: https://www.facebook.com/andigalpern/posts/678121182314631. /v1.0/100003502653187_678121182314631, /v2.2/100003502653187_678121182314631 и /v2.2/499657186827699_678121182314631 все ошибки.
/v1.0/100003502653187/posts включает только один пост, например, и /v2.2/100003502653187/posts пуст.
Для справки, вот проблема GitHub, где мы отслеживали эту проблему.
2 ответа
В основном вам нужно read_stream
за это (которое ваше приложение не получит). И да, хотя пост публичный, вам все равно нужно read_stream
чтобы иметь возможность получить доступ для чтения всех видов сообщений.
Вы можете легко поиграть с этим в Graph API Explorer. Сначала дайте свое приложение read_stream
разрешение на получение идентификаторов элементов в вашем фиде - это даст вам идентификаторы "идентификатор пользователя в форме приложения, подчеркивающий идентификатор записи". Затем удалите read_stream
(нажав "Получить токен доступа" снова и используя кнопку "Очистить"), и попробуйте несколько user_*
разрешения - и вы увидите, что для большинства ваших сообщений, даже общедоступных, вы все равно будете получать только "Неподдерживаемый запрос на получение", что означает, что вы не можете читать этот объект.
Например, у меня есть общедоступное сообщение, где я разместил видео-пост с другой страницы на моей временной type
является video
а также status_type
является shared_story
, но ни user_status
ни user_videos
разрешите мне прочитать этот пост - только когда я даю read_stream
Опять же, мое приложение может прочитать этот пост. То же самое с другим публичным постом типа status
и status_type mobile_status_update
- читается с read_stream
не с любым из user_*
разрешения.
Вкратце: то, чего вы хотите достичь, больше невозможно с API v2 и ограничением, которое read_stream
будет предоставляться только приложениям на платформах, где не существует официального клиента FB.
Одно из предложений состоит в том, чтобы совершать вызовы API для написания постов на Facebook, поскольку они возвращают действительный post_id, который вы можете использовать.
Во-вторых, при попытке https://developers.facebook.com/tools/explorer/256884317673197/?method=GET&path=525575504%2Fposts&version=v2.0&;
Вы можете видеть, что идентификаторы его сообщений не начинаются с его public id
как вы написали 525575504_*
но они все еще ставят неподдерживаемый запрос на получение
В-третьих, поскольку выше не работает, эти сообщения являются общедоступными?