Получение всех сообщений и комментариев со страницы Facebook

Я пытаюсь получить все сообщения и комментарии со страницы Facebook. Пока это работает довольно хорошо, используя следующий FQL:

{'all_posts':
'SELECT created_time, post_id, actor_id, message, description, comments FROM stream 
   WHERE source_id=PAGE_ID ORDER BY created_time', 
'comments':
   'SELECT id, fromid, post_fbid, text, time, post_id FROM comment WHERE post_id   
    IN (SELECT post_id FROM #all_posts) ORDER BY post_id'
}

Я пытаюсь использовать библиотеку RestFB, но получаю

com.restfb.exception.FacebookResponseStatusException: Received Facebook error response 
(code 601): Parser error: unexpected '{' at position 0.

когда я пытаюсь выполнить запрос:

List<JsonObject> queryResults = facebookClient.executeQuery(query, JsonObject.class);

Как я могу решить эту проблему?

Заранее спасибо.


person Jan B    schedule 12.02.2013    source источник
comment
Какой у вас запрос, который вы передаете executeQuery()?   -  person robonerd    schedule 13.02.2013
comment
Я передал запрос, упомянутый после следующего fql выше, для выполнения Query. И это было ошибкой, потому что, как я теперь узнал, я должен использовать Multiquery-Support. Я сразу же опубликую рабочий код в качестве ответа.   -  person Jan B    schedule 13.02.2013
comment
Я отвечу на него позже, потому что мне нужно ждать 8 часов, пока мне разрешат ответить.   -  person Jan B    schedule 13.02.2013


Ответы (1)


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

Правильный способ сделать это — использовать поддержку нескольких запросов в RestFB (Выполнение нескольких запросов с помощью RestFb)

Map<String, String> queries = new HashMap<String, String>();
queries.put("all_posts", "select created_time, post_id, actor_id, message, description, comments from stream where source_id=279947942083512 ORDER BY created_time");
queries.put("comments", "SELECT fromid, username, text, time, post_id FROM comment WHERE post_id in (SELECT post_id FROM #all_posts) ORDER BY post_id");

MultiqueryResults queryResults = facebookClient.executeMultiquery(queries, MultiqueryResults.class);

Вы должны предоставить компонент MultiqueryResults, как описано в 1.

person Jan B    schedule 13.02.2013
comment
может ли кто-нибудь сделать пример компонента MultiqueryResults Bean для этих запросов? :) - person JackTurky; 27.02.2013
comment
открытый класс PostsAndCommentsMultiqueryResults { @Facebook(all_posts) private List‹StreamPost› сообщений; комментарии в личном списке @Facebook‹StreamComment›; публичный список‹StreamPost› getPosts() { return posts; } публичный список‹StreamComment› getComments() { вернуть комментарии; } } - person Jan B; 28.02.2013
comment
вам нужно создать bean-компоненты для StreamComment и StreamPost. Вы не можете использовать Post-Class из RestFB, потому что он предназначен для Graph API. - person Jan B; 28.02.2013
comment
о, большое спасибо! я пытался использовать API графа с RestFB, чтобы сделать ту же работу, но это не очень хорошо работает... если вы что-то знаете, вы можете взглянуть на stackoverflow.com/questions/15117398/ пожалуйста? :) - person JackTurky; 28.02.2013