Не удается получить друзей в API Facebook: Spring Social

Я пытаюсь получить имя друга пользователя с помощью Spring Social Facebook. Список друзей = facebook.friendOperations().getFriendProfiles(); Это утверждение дает мне ошибку 400 Bad Request.

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

    private Facebook facebook;

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

    @RequestMapping(method=RequestMethod.GET)
    public String helloFacebook(Model model) {
        if (!facebook.isAuthorized()) {
            return "redirect:/connect/facebook";
        }

        model.addAttribute(facebook.userOperations().getUserProfile());
        System.out.println(facebook.userOperations().getUserProfile().getName());
        System.out.println(facebook.userOperations().getUserProfile().getEmail());
        //PagedList<FacebookProfile> fbFrnds = facebook.friendOperations().getFriendProfiles();
        List<String> friendIds = facebook.friendOperations().getFriendIds();
        System.out.println("Id size : "+friendIds.size());
        List<FacebookProfile> friends = facebook.friendOperations().getFriendProfiles();
        System.out.println("Size : "+friends.size());
        for (FacebookProfile id : friends) {
            System.out.println(id.getName());
        }
        return "hello";
    }

}

Ошибка показана ниже.

2014-10-20 16:39:34.787  WARN 4648 --- [nio-8080-exec-6] o.s.web.client.RestTemplate              : GET request for "https://graph.facebook.com/v1.0/me/friends?fields=id%2Cusername%2Cname%2Cfirst_name%2Clast_name%2Cgender%2Clocale%2Ceducation%2Cwork%2Cemail%2Cthird_party_id%2Clink%2Ctimezone%2Cupdated_time%2Cverified%2Cabout%2Cbio%2Cbirthday%2Clocation%2Chometown%2Cinterested_in%2Creligion%2Cpolitical%2Cquotes%2Crelationship_status%2Csignificant_other%2Cwebsite" resulted in 400 (Bad Request); invoking error handler
{"error":{"message":"(#100) Unknown fields: username.","type":"OAuthException","code":100}}
2014-10-20 16:39:34.814 ERROR 4648 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.social.UncategorizedApiException: (#100) Unknown fields: username.] with root cause

org.springframework.web.client.HttpClientErrorException: 400 Bad Request
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
    at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleUncategorizedError(FacebookErrorHandler.java:155)
    at org.springframework.social.facebook.api.impl.FacebookErrorHandler.handleError(FacebookErrorHandler.java:68)
    at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:598)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:556)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:527)
    at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:259)
    at org.springframework.social.facebook.api.impl.FacebookTemplate.fetchConnections(FacebookTemplate.java:222)
    at org.springframework.social.facebook.api.impl.FriendTemplate.getFriendProfiles(FriendTemplate.java:135)
    at org.springframework.social.facebook.api.impl.FriendTemplate.getFriendProfiles(FriendTemplate.java:102)
    at hello.HelloController.helloFacebook(HelloController.java:39)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1695)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

Я дал следующее разрешение в разделе «Настройка разрешений центра приложений». введите здесь описание изображения

Любая идея, почему это происходит? Заранее спасибо.


person Krishnalal P    schedule 20.10.2014    source источник
comment
не знаю, что именно не так, но вам, вероятно, нужно проверить документацию facebook api - может быть, некоторые параметры изменили имя? Имейте в виду, что facebook поддерживает только их javascript API, Spring Social — это еще одна оболочка, которая может быть устаревшей. //изменить: Неизвестные поля: имя пользователя.   -  person freakman    schedule 20.10.2014


Ответы (1)


К сожалению, Facebook удалил свойство «имя пользователя» в версии 2.0 своего Graph API. Следовательно, Spring Social Facebook не сможет получить это свойство. (Если вас это расстраивает, то представьте мое разочарование, когда я узнал, что они удалили его всего через несколько дней после того, как вырезали релиз Spring Social для Facebook.)

Если вы измените свою зависимость Spring Social Facebook на 2.0.0.M1 (и убедитесь, что у вас есть репозиторий Spring, http://repo.spring.io/milestone, прописанный в вашей сборке), то он у вас должен работать. На самом деле, я был бы очень признателен, если бы вы попробовали этот выпуск и сообщили об ошибках или идеях по улучшению на https://jira.spring.io/browse/SOCIALFB.

Но также имейте в виду, что Graph API Facebook теперь ограничивает приложения, для которых они могут найти друзей. В частности, Graph API возвращает список друзей пользователя, если эти друзья также являются пользователями вашего приложения. Я не уверен, удовлетворит ли это ваши потребности или нет, но все это связано с изменениями на стороне Facebook... я мало что могу с этим поделать в Spring Social.

person Craig Walls    schedule 21.10.2014
comment
Спасибо, Крейг. :) Хотя мне уже удалось завести друзей на фейсбуке. - person Krishnalal P; 04.11.2014
comment
+ 1 --› API Graph вернет список друзей пользователя, только если эти друзья также являются пользователями вашего приложения. - person java_dude; 16.09.2015