2016-05-18 3 views
3

Я использую камень Koala: https://github.com/arsduo/koala для получения страниц результатов из API-интерфейса facebook.koala gem (Graph API) InvalidURIError при получении страниц результатов с помощью метода get_page

[Редактировать] Я построить объект @graph следующим образом:

@facebook = Koala::Facebook::API.new(access_token) 
@graph = @facebook.get_connection(..) 

После извлечения данных из Facebook, я получаю список результатов.

Я получаю next_page_params так:

next_page = @graph.next_page_params 

Что выглядит примерно так:

[\"v2.6/496090827168552/members\", {\"fields\"=>\"about,age_range,bio,cover,devices,email,education,first_name,gender,hometown,id,interested_in,last_name,languages,link,location,middle_name,name,political,picture.type(large),relationship_status,religion,work,website\", \"limit\"=>\"30\", \"icon_size\"=>\"16\", \"access_token\"=>\"EAAIeQOKC6YjJE3GUvyHqakVaIZCF1MY4jo5YtQ0qt2DFNPRa3O6akOXUMdx9eOozAFSOIZD\", \"offset\"=>\"30\", \"__after_id\"=>\"enc_AdACS2GnjoUp9fYXSa8maRmdCZAYMNRR7fqHpQG\"}] 

Теперь я выборка следующей страницы результата с помощью:

@graph.get_page(next_page) 

Это ошибка, которую я получаю:

`URI::InvalidURIError: bad URI(is not URI?): [%22v2.6/496090827168552/members%22,%20%7B%22fields%22=%3E%22about,age_range,bio,cover,devices,email,education,first_name,gender,hometown,id,interested_in,last_name,languages,link,location,middle_name,name,political,picture.type(large),relationship_status,religion,work,website%22,%20%22limit%22=%3E%2230%22,%20%22icon_size%22=%3E%2216%22,%20%22access_token%22=%3E%22CqXUMdx9eOozAHJl2cS4czacDnIwvEB96RCb1FSOIZD%22,%20%22offset%22=%3E%2230%22,%20%22__after_id%22=%3E%22enc_AdACS2GCCpmD1SFiHnmP0lpr0yiW8maRmdCZAYMNRR7fqHpQG%22%7D]` 
+0

Как вы создаете объект '@ graph'? Кажется, что вы вызываете 'next_page_params' на неправильный объект. – BoraMa

+0

Какой запрос API вы пытаетесь просмотреть? То есть члены того, что вы пытаетесь перечислить? – BoraMa

+0

@BoraMa Спасибо, это для членов группы. С facebook Api

ответ

0

Похоже, ваша проблема может быть здесь

@facebook = Koala::Facebook::API.new(access_token) 
@graph = @facebook.get_connection(..) 

На странице GitHub, он говорит, позвонить get_connection непосредственно @graph но вы настраиваете @graph к возвращаемому значению @facebook.get_connection(..). Скорее изменить его

@graph = Koala::Facebook::API.new(access_token) 
@graph.get_connection(..) 

Источник: https://github.com/arsduo/koala#graph-api

+0

Это то, что делает OP. Просто он хранит экземпляр API в «@facebook», а не «@graph». Но в конечном счете он вызывает get_connection по самому объекту API («@facebook» в своем случае), а затем сохраняет ответ в объекте «@graph». Ваше предложение, похоже, просто изменяет имя переменной, но не будет иметь никакого эффекта как такового. – Sam

0

Пара вещей здесь:

  1. Ваш ответ 'next_page_params', кажется, быть строкой, в то время как она должна быть массивом. Вы уверены, что это ответ, который вы получаете? Это может вызвать ошибку, когда метод пытается преобразовать его в URI, который нужно проанализировать. Следовательно, ошибки синтаксического анализа. Вы можете попытаться использовать eval(next_page), чтобы преобразовать его в фактический массив (примечание: eval считается небезопасным).

  2. Какой тип коалы вы используете? В последнем (v2.3.0) метод get_page доступен только для объекта API (@facebook в вашем случае), а не для объекта соединения (@graph). Таким образом, вы будете использовать:

    @facebook = Koala :: Facebook :: API.new (access_token) @graph = @ facebook.get_connection (..) next_page = @ graph.next_page_params @ facebook.get_page (next_page)

  3. Вы могли бы также попробовать вызвать следующую страницу напрямую, без первой выборки в Params как:

    @facebook = Koala :: Facebook :: API.new (access_token) @graph = @facebook. get_connection (..) @ graph.next_page

0

Я думаю, что проблема, как и другие, уже упоминалась. Вы можете путать с @graph, @facebook и results.

Ниже приведен пример использования Rails для получения списка друзей пользователя Facebook.

controller/feeds_controller.rb 
def do_sth_with_facebook_friends 
facebook = Facebook.new(current_user) 
facebook_friends = facebook.friends(params[:next_page]) 
... 
@next_page = facebook_friends.next_page_params 
//@next_page will be used as params[:next_page] when you send another request to load the next page 
... 
end 

lib/facebook.rb 
def initialize(user) 
@graph = Koala::Facebook::API.new(user.facebook_token) 
end 
def friends(page) 
page ? @graph.get_page(page) : @graph.get_connections('me', 'friends') 
end 

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