#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, он говорит, что у меня есть доступ к местоположениям друзей:
Моя проблема в том, что когда я пытаюсь получить местоположения моих друзей, он всегда возвращает 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 друзей, и ни одно из местоположений также не вернулось для этой учетной записи.