Извлеките местоположения друзей из Facebook с помощью fb_graph Ruby gem

#ruby-on-rails #ruby #facebook #facebook-graph-api

#ruby-on-rails #ruby #Facebook #facebook-graph-api

Вопрос:

Я пытаюсь получить местоположения всех друзей пользователя, используя gem: fb_graph. (версия 1.7.2)

Мои разрешения: publish_stream,read_friendlists, offline_access, friends_location,user_location

Я уже аутентифицировал пользователя и сохранил токен автономного доступа и его facebook id.

 user = User.find_by_email("person@email.com")
facebook_user = FbGraph::User.fetch(user.facebook_identifier, :access_token => user.facebook_access_token)
facebook_user.friends.map(amp;:location) => [nil, nil...]
  

Когда я проверяю разрешения внутри Facebook, он говорит, что у меня есть доступ к местоположениям друзей:

http://grab.by/a1Qm

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

У кого-нибудь есть какие-либо предложения или указания о том, как получить местоположения друзей?

Спасибо!

Комментарии:

1. Я не понимаю проблему. Судя по формулировке вашего вопроса, вы, похоже, не упомянули, с какой проблемой вы столкнулись.

2. Упс … извините, не следует размещать сообщения в SO, когда я устал. Я отредактировал и уточнил.

Ответ №1:

Таким образом, я смог получить необходимую мне информацию. Вы должны вызывать fetch после каждого вызова, поэтому

 user = User.find_by_email("email@domain.com")

facebook_user = FbGraph::User.fetch(user.facebook_identifier, :access_token => user.facebook_access_token)
friends = facebook_user.fetch.friends
friends.each do |friend|
  location = friend.fetch.location
  puts location.try(:name)
end
  

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

 friend_data = FbGraph::Query.new("SELECT uid, first_name, last_name, pic_square, current_location FROM user WHERE uid in (SELECT uid2 FROM friend WHERE uid1='#{user.facebook_identifier}')").fetch(user.facebook_access_token)
  

Ответ №2:

Разрешения API не переопределяют настройки конфиденциальности пользователя. Возможно ли, что ваши настройки конфиденциальности facebook блокируют это? Или, возможно, все настройки конфиденциальности ваших друзей блокируют это?

Комментарии:

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