Facebook API API "API" теперь возвращает только 25 друзей на страницу? Что происходит?

Мое приложение (игра) работает на Facebook в течение некоторого времени. Я начинаю с запроса списка друзей через вызов API графика: my-uid/friends запрашивая имя пользователя и профиль pic.

Обычно я возвращаю список всех моих друзей до нескольких тысяч, пока он не начнет добавлять друзей на следующую страницу. Что приятно, так как большинство моих пользователей получают друзей в 1 вызов.

Внезапно, но без изменений в приложении. около 40 минут назад (18:40 вторник (PDT) - 2 мая 2012 года) Я начал получать ответы только с 25 друзьями на страницу!

Я все еще могу получить список всех друзей, используя несколько вызовов, но игра в настоящее время не настроена для этого. Может ли кто-нибудь сказать мне, почему внезапное изменение? Кто-нибудь еще видел похожие проблемы и как мне получить список, чтобы дать мне до 5000 друзей на страницу, как это было раньше.

Воспроизводимость с помощью API-интерфейсов Graph API

Ответ 1

Я не знаю, что еще вам сказать; возможно, возвращаемый номер по умолчанию изменился, но когда я попробую, вызов /me/friends?limit=5000 возвращает полный список для меня (но список моих друзей → 500 и 1000, поэтому, возможно, он отключается где-то на этом пути)

(Боковое примечание: среднее количество друзей было найдено ~ 190, поэтому, по-видимому, большинство пользователей будут иметь менее 500 в любом случае, и наличие страницы выше 500 будет краевым случаем

Ответ 2

Кажется, что facebook изменил свой предел до 25 результатов в других вызовах api (feed, posts, friends и т.д.), если вы запрашиваете друзей без параметров, ответ JSON показывает следующее:

"paging": {
    "next": "https://graph.facebook.com/USER_ID/friends?format=json&limit=25&offset=25&__after_id=LAST_ID"
}

В любом случае вы можете/всегда должны устанавливать параметры ограничения и смещения, чтобы предотвратить такие вещи, limit = 0 вернет список всех ваших друзей.

https://graph.facebook.com/USER_ID/friends?limit=0

Если вы только запрашиваете друзей у обычного пользователя, максимальное допустимое число равно 5000, поэтому предел должен мог быть 0 или 5000, если вы запрашиваете информацию с facebook page или другие виды вызовов api, например, сообщения или фид, этот лимит может увеличиваться или уменьшаться.

(Обновление) Facebook исправил эту ошибку, поэтому ограничение по умолчанию 0 возвращает 0 друзей, вы должны установить положительный предел, спасибо Dinuz

Ответ 3

В SDK 4.7 вам нужно передать пакет с количеством друзей, которых вы хотите вернуть, я установил его на 5000, так как это максимальное количество друзей, которых вы можете иметь на Facebook.

Вам также нужно настроить приложение как игру в консоли facebook dev и использовать приглашенных друзей, чтобы получить полный список друзей

Создайте свой пакет

Bundle bundle = new Bundle();

Добавить параметры в ваш пакет

bundle.putInt("limit", 5000);

Затем передайте его в свой GraphRequest

new GraphRequest(
            AccessToken.getCurrentAccessToken(),
            "/me/invitable_friends",
            bundle,
            HttpMethod.GET,
            new GraphRequest.Callback() {
                public void onCompleted(GraphResponse response) {
                   //Do something with the response
                }
            }
    ).executeAsync();

Ответ 4

Я думаю, что самое лучшее, что вы можете сделать, это добавить параметр limit = 5000, как говорит Igy.
Однако я опубликовал отчет об ошибке, поскольку это изменение не было замечено или описано в документе.

Ответ 5

Число результатов, возвращаемых конечной точкой /v2.2/me/friends, по умолчанию равно 25.

Список друзей теперь возвращает только друзей, которые также используют ваше приложение: список друзей, возвращаемых с помощью конечной точки /me/friends, теперь ограничен списком друзей, которые разрешили ваше приложение.

См. изменения в Facebook Журнал изменений API Facebook

Ответ 6

Если вы используете GraphRequest() (например, в React Native), вы можете поместить его прямо в поле строки, например:

new GraphRequest(
  '/me',
  {
    accessToken,
    parameters: {
        fields: {
          string: 'id,email,first_name,last_name,friends.limit(5000)'
        }
    }
    ...