Spring Social — интеграция с Facebook

Мне нужно интегрировать spring-social с Facebook и получать новости/сообщения со страницы моей компании.

Фрагмент кода

public static void main(String[] args) {
        Facebook facebook1 = new FacebookTemplate("");
        FeedOperations feedOperations = facebook1.feedOperations();
        PagedList<Post> feeds = feedOperations.getFeed();

        for (Post post : feeds) {
            System.out.println("@" + post.getName());
        }
    }

Я сгенерировал ключ на "https://developers.facebook.com", но когда я ввожу то же самое в FacebookTemplate("");, и запускаю программу, она мне выдает ошибку.

Exception in thread "main" org.springframework.social.InvalidAuthorizationException: Invalid OAuth access token.
    at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleFacebookError(FacebookErrorHandler.java:81)
    at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleError(FacebookErrorHandler.java:59)
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:616)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:572)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:547)

Пожалуйста, помогите мне в этом отношении,

1.) Где и как я могу сгенерировать ключи.

2.) Как я могу получить доступ к каналам пользователей. Моему секретному ключу может потребоваться доступ к этому профилю пользователя.

3.) Где мне нужно предоставить пользователя


person Ankur Singhal    schedule 25.04.2016    source источник


Ответы (1)


Использование непосредственно конструктора FacebookTemplate предоставит вам только соединение без проверки подлинности (то есть без OAuth), которое будет работать для запросов, не требующих проверки подлинности. Вот почему вы получаете исключения авторизации, доступ к каналам требует аутентификации (аутентифицированный пользователь facebook, который предоставил вашему приложению надлежащее разрешение на выполнение этих действий).

Обратите внимание, что вам понадобится способ получить токен доступа пользователя для аутентификации, и сделать это в консольном приложении может оказаться непросто. Однако использовать Spring Social в веб-приложении довольно просто, в основном все, что вам нужно, это

@Controller
@RequestMapping("/")
public class HelloController {

    private Facebook facebook;
    private ConnectionRepository connectionRepository;

    @Inject
    public HelloController(Facebook facebook, ConnectionRepository connectionRepository) {
        this.facebook = facebook;
        this.connectionRepository = connectionRepository;
    }

    @RequestMapping(method=RequestMethod.GET)
    public String helloFacebook(Model model) {
        if (connectionRepository.findPrimaryConnection(Facebook.class) == null) {
            return "redirect:/connect/facebook";
        }

        model.addAttribute("facebookProfile", facebook.userOperations().getUserProfile());
        PagedList<Post> feed = facebook.feedOperations().getFeed();
        model.addAttribute("feed", feed);
        return "hello";
    }

}

(пример взят отсюда: https://github.com/spring-guides/gs-accessing-facebook) с конфигурацией с правильно настроенными spring.social.facebook.appId и spring.social.facebook.appSecret.

Однако, чтобы протестировать свои запросы с помощью консольного приложения, вы можете

  1. Создайте приложение на страницах API Facebook.
  2. Перейдите на страницу https://developers.facebook.com/tools/accesstoken/.
  3. Используйте эти токены в FacebookTemplate-конструкторе

Это всегда будет ваш пользователь, поэтому вы можете не захотеть выпускать это приложение в дикую природу ;)

person Matthias Kainer    schedule 05.08.2016