В декабре 2011 года Facebook официально отказался от REST API и запустил Graph API для публичного использования. С тех пор все новые функции были добавлены в Graph API, и Facebook позволил пользователям выполнять множество новых задач, некоторые из которых мы обсудим сегодня. В этом посте мы будем делать много запросов к API Graph, получать ответы JSON и, таким образом, манипулировать ими, чтобы получить желаемые результаты.
Токен доступа
Большинству запросов к Graph API нужен токен доступа в качестве параметра. Маркер доступа уникален для комбинации вошедшего в систему пользователя или страницы и приложения Facebook, которое выполняет запрос.
Токен связан с приложением Facebook для обработки разрешений, предоставленных пользователю приложению. Это определяет ресурсы, доступные через токен доступа. Таким образом, токен обеспечивает временный и безопасный доступ к Facebook. Вы можете получить токен доступа в Graph Explorer . Токен может иметь или не иметь время экспирации в зависимости от того, являются ли они краткосрочными или долгосрочными токенами. После истечения срока действия краткосрочного токена необходимо повторно пройти аутентификацию пользователя и получить новый токен.
Конкурсы на страницах Facebook
В последнее время небольшие и перспективные организации эффективно использовали страницы Facebook для продвижения своего контента. Тем не менее, получение «лайков» и, следовательно, увеличение вашей досягаемости — медленный и устойчивый процесс Для этого многие обращаются к рекламе в Facebook. Однако многие другие выбирают более дешевую альтернативу — организуя конкурсы через свою страницу.
Обычный конкурс включает в себя размещение фотографии или параграфа на странице об опыте. Конкурс оценивается по количеству лайков на посту или фотографии. Также есть дополнительное условие для участия в конкурсе. Чтобы «лайк» был действительным, пользователю также должна понравиться страница. Facebook не имеет встроенной функции, которая говорит вам, сколько лайков является общим для вашего поста и страницы. Это затрудняет оценку конкурсов.
Непрограммисты чувствуют, что единственный способ судить о конкурсе — проверять количество лайков вручную. К счастью, API Graph помогает нам выполнять это действие без особых хлопот.
Хотя я собираюсь выполнить действие через Python, этот процесс остается тем же для других языков. Важной частью являются целевые URL, на которые мы отправляем запросы, и данные, которые мы получаем из полученного JSON.
Концептуально простым способом сделать это было бы получить список лайков в посте и список лайков на странице, а затем сравнить их. Тем не менее, на данный момент в Facebook нет функциональности, которая бы получала список лайков на странице . Мы будем использовать обратный процесс, чтобы проверить, нравится ли каждому из них пост.
Следующий вызов проверяет, нравится ли пользователю страница или нет. Подробная документация доступна здесь .
GET /{user-id}/likes/{page-id}
Если пользователю нравится страница, ответ JSON содержит data
data
Мы используем следующую функцию, чтобы определить, нравится ли пользователю страница или нет.
def user_likes_page(user_id, page_id):
"""
Returns whether a user likes a page
"""
url = 'https://graph.facebook.com/%d/likes/%d/' % (user_id, page_id)
parameters = {'access_token': TOKEN}
r = requests.get(url, params = parameters)
result = json.loads(r.text)
if result['data']:
return True
else:
return False
Следующий шаг — получить список лайков для определенного поста и выяснить, нравится ли пользователям страница. Следующий звонок дает нам список лайков для поста, при условии, что у нас есть правильный доступ.
GET /{post-id}/likes/
Объединяя эти две идеи, мы делаем следующую функцию, чтобы проверить, сколько лайков в посте также является общим для страницы.
def get_common_likes(post_id, page_id):
"""
Returns the number of likes common to a post and the page
"""
count_likes = 0
url = 'https://graph.facebook.com/%d/likes/' % post_id
parameters = {'access_token': TOKEN}
r = requests.get(url, params = parameters)
result = json.loads(r.text)
for like in result['data']:
if user_likes_page(int(like['id']), page_id):
count_likes += 1
print 1
return count_likes
Массовое реагирование на сообщения на вашей временной шкале
В твой день рождения, я уверен, ты получишь сотни (если не тысячи) постов. Отвечать на каждый из них утомительно! Многие люди поднимают статус, поблагодарив всех за их пожелания, в то время как другие предпочитают поблагодарить каждого лично. Давайте посмотрим, как мы можем выбрать личный вариант и сделать это в короткие сроки.
Вызов для получения канала для пользователей или страниц заключается в следующем.
GET /{user-id}/feed
Если вы хотите получить сообщения на своей временной шкале, вы можете заменить {user-id}
Чтобы манипулировать сотнями и тысячами сообщений, вы не сможете получить их на одной странице. Вам нужно будет сделать шаг вперед и проверить next
Функция, которая получает все сообщения на вашей временной шкале, заключается в следующем.
def get_posts():
"""
Returns the list of posts on my timeline
"""
parameters = {'access_token': TOKEN}
r = requests.get('https://graph.facebook.com/me/feed', params=parameters)
result = json.loads(r.text)
return result['data']
Следующим шагом является публикация комментариев на вашей временной шкале. Вызов, который используется для выполнения этого действия, выглядит следующим образом.
POST /{object-id}/comments
Комментарий должен быть отправлен как message
POST
Итак, функция, которую мы используем для комментирования сообщений, заключается в следующем.
def comment_on_posts(posts):
"""Comments on all posts"""
for post in posts:
url = 'https://graph.facebook.com/%s/comments' % post['post_id']
message = 'Commenting through the Graph API'
parameters = {'access_token': TOKEN, 'message': message}
s = requests.post(url, data = parameters)
Скрипты, которые я использовал для обоих из них, можно найти на GitHub . Кроме того, вы можете сделать еще один шаг, сделав несколько запросов API одновременно.
Альтернативный подход
Акшит Хурана из Quora рассказывает о другом подходе к этому посредством использования языка запросов Facebook (FQL) . FQL — это SQL-подобный язык, который позволяет запрашивать данные, которые вы получаете через Graph API. Существует список таблиц , каждая из которых имеет собственный список столбцов, которые можно запрашивать, что помогает вам фильтровать ваши данные.
Вывод
Facebook много работает с момента запуска Graph API, и к нему часто добавляются новые функции. Если вы планируете работать с мобильными или веб-приложениями, связанными с Facebook, использование API Graph обязательно. Facebook также поддерживает обширную документацию , которая подробно объясняет функции и разнообразие использования Graph API.