Как я могу управлять многими страницами от имени одного пользователя-администратора, не превышая квоты API?

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

По каким-либо деловым причинам наша компания-клиент добавила только ОДНОГО из своих сотрудников в качестве администратора (вместе с владельцем малого бизнеса) для каждой из этих страниц. Эта учетная запись пользователя добавила наше приложение, и мы получаем токены страницы и используем эти токены страницы для управления страницей (изменение контактной информации, добавление вкладки, получение сообщений на стене). Мы сталкиваемся с очень жесткими ограничениями запросов API. Прямо сейчас мы можем добавлять только около 3 новых страниц Facebook в минуту (что, я думаю, требует, возможно, 6-10 вызовов API, когда все сказано и сделано).

Я видел, как люди оценивают, что вам разрешено около 600 запросов / 600 секунд для токена доступа, но я думал, что, поскольку мы выполняли большую часть работы с токенами страницы, наши действия не будут учитываться в одном пределе API.

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


person Tony Bathgate    schedule 07.03.2013    source источник
comment
Извините, я думаю, что я был неясен. Мы не создаем эти страницы прямо сейчас. Эти страницы уже существуют. Со скоростью около 3 страниц в минуту мы добавляем страницу в нашу систему. Таким образом, мы получаем их токен доступа, обновляем их контактную информацию, добавляем вкладку и получаем информацию на вкладке.   -  person Tony Bathgate    schedule 07.03.2013
comment
Ограничения вызовов API должны быть для сеанса/токена доступа, и многие крупные приложения без проблем управляют сотнями страниц, поэтому я не знаю, почему у вас могут возникнуть проблемы - вы уверены, что случайно не выполняете вызовы API с помощью нет токена, токен приложения или (вместо токена страницы) токен доступа пользователя администратора?   -  person Igy    schedule 12.03.2013
comment
@Igy: я дважды проверил, и это рабочий процесс. 1) Позвоните, чтобы получить общую информацию о странице, используя наш собственный токен доступа. 2) Позвоните, чтобы получить токен доступа к странице, используя токен доступа администратора. 3) Позвоните, чтобы добавить вкладку, используя токен доступа к странице. 4) Затем мы (возможно) запускаем асинхронные задачи, чтобы установить имя вкладки на странице, используя токен доступа к странице. 5) затем мы запускаем асинхронные задачи для получения сообщений и комментариев со страницы. Проблема может быть на шаге 5; очевидно, мы используем токен администратора. Поскольку у всех этих страниц один и тот же администратор, я думаю, именно поэтому мы превышаем квоту.   -  person Tony Bathgate    schedule 16.03.2013
comment
... продолжение: мы модифицируем способ выполнения шага 5, чтобы он использовал токены страниц с меньшим количеством вызовов (путем использования вызовов FQL вместо вызовов графа и, возможно, использования push-уведомлений для новых сообщений/комментариев). Основываясь на нашей бизнес-логике, также есть случаи, когда нам, вероятно, вообще не нужно выполнять шаг 5. Я думаю, что это будет намного лучше, и скоро мы будем делать все, что в наших силах. Итак, спасибо за вклад @Igy.   -  person Tony Bathgate    schedule 16.03.2013


Ответы (3)


На самом деле это довольно просто, вам просто нужно запросить токен доступа для СТРАНИЦЫ, а не для пользователя.

    $mQuery=array('access_token'=> 'SELECT access_token FROM page WHERE page_id = 'page_id,    
                  'album_id'=> 'SELECT object_id FROM album WHERE owner = '.page_id.' AND name = "Timeline Photos"');
    $multiQueryResult = $facebook->api(array('method'=>'fql.multiquery', 'queries'=>$mQuery));

Первая строка даст вам токен доступа этого пользователя, а вторая — просто пример использования многозадачности и уменьшит количество вызовов.

Вы можете использовать не более 50 запросов в мультизапросе.

И если вы хотите сделать несколько вещей со своей страницей, вы можете использовать пакетный запрос. Это пример для размещения статуса, вы можете добавить больше, до 50 пакетных запросов в одном вызове.

$v['body']['message']=htmlspecialchars_decode($v['message'], ENT_QUOTES);
$v['body']['scheduled_publish_time']=strtotime($v['scheduled_publish_time']);
$v['body']['published']='false';
$v['body']=http_build_query($v['body']);
$batch[]=$v;

try {
    $batchresult = $facebook->api("/?batch=".urlencode(json_encode($batch)), 'POST', array('access_token'=>$access_token));
} catch (FacebookApiException $e) {
    echo $e->getMessage(); 
}
echo $batchresult;

Надеюсь это поможет.

person Julio Popócatl    schedule 23.03.2013

Как упомянул @Julio Popócatl, использование токена доступа к странице (сгенерированного из долгоживущего пользовательского токена) может быть хорошим выбором.

Эти токены доступа к странице после того, как они сгенерированы правильно, срок их действия никогда не истечет, поэтому вам нужно выполнить как минимум на один запрос меньше.

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

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

person Ivo Pereira    schedule 17.04.2013

Мы сталкиваемся с очень жесткими ограничениями запросов API. Прямо сейчас мы можем добавлять только около 3 новых страниц Facebook в минуту.

Я бы вообще не назвал это "жестким" ограничением. Представьте, что произойдет, если большое количество приложений создаст сотни или тысячи страниц за считанные минуты... спам Спам СПАМ!!1

Я видел, как люди оценивают, что вам разрешено около 600 запросов / 600 секунд для токена доступа, но я думал, что, поскольку мы выполняли большую часть работы с токенами страницы, наши действия не будут учитываться в одном пределе API.

Ограничение применяется только на основе идентификатора приложения. Что именно вы делаете с API и как кто (пользователь, страница) значения не имеет.

Можно ли как-то обойти этот предел

Добавление большого количества новых страниц за короткое время звучит для меня как спам, во многом. Я не могу придумать хорошую причину, по которой можно было бы это сделать.

person CBroe    schedule 07.03.2013
comment
Извините, я думаю, что другая информация, такая как вопрос здесь, говорит о токене доступа. Я предполагаю, что они имели в виду токен доступа к приложению. - person Tony Bathgate; 07.03.2013
comment
Так вообще то, что я хочу сделать (быстро внести изменения в сотни страниц фейсбука) невозможно? - person Tony Bathgate; 08.03.2013
comment
Это не спам, когда многие люди обновляют множество страниц, используя одно и то же приложение. Основная проблема в том, что мы не можем масштабироваться. В Facebook более 3 миллионов страниц, как они ожидают, что бизнес вырастет до 3 миллионов с 600 вызовами API за 10 минут? - person AGrunewald; 11.03.2013
comment
Это 600 вызовов API на токен доступа, используйте токены доступа пользователей от пользователей, использующих ваше приложение, и токены доступа к страницам для страниц, которые они администрируют. - person Igy; 11.03.2013