如何使用Spring Social获取Facebook页面的活动

时间:2017-01-12 22:16:33

标签: facebook-graph-api spring-boot spring-social-facebook

我的目标是检索某个Facebook页面和用户个人资料的事件列表。列表应该仅在将来返回事件。我似乎找不到使用Spring Social Facebook API的方法。我坚持使用以下代码。

使用Spring Social Facebook v3.0.0.M1

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

    private Facebook facebook;
    private ConnectionRepository connectionRepository;

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

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

        //Should  only return events in the future
        PagingParameters pagingParameters = new PagingParameters(10,0,0L,0L);
        PagedList<Event> userEvents = facebook.eventOperations().search("noCriteriaNeed",pagingParameters);
        PagedList<Event> pageEventfacebooks = facebook.pageOperations().facebookOperations("pageID").eventOperations().search("noCriteriaNeed",pagingParameters);


        model.addAttribute("UserfacebookEvents", userEvents);
        model.addAttribute("PagefacebookEvents", pageEventfacebooks);
        return "hello";
    }

}

2 个答案:

答案 0 :(得分:1)

我通过使用更灵活的RestOperations API解决了这个问题。

package com.housescent.almanac.web.controller;

import com.housescent.almanac.web.model.EventData;
import org.springframework.social.connect.ConnectionRepository;
import org.springframework.social.facebook.api.Facebook;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

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

    private Facebook facebook;
    private ConnectionRepository connectionRepository;

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

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

        EventData userEvents = facebook.restOperations().getForObject("https://graph.facebook.com/v2.8/pageid/events",EventData.class);


        model.addAttribute("PagefacebookEvents", userEvents);
        return "hello";
    }

}

答案 1 :(得分:1)

除了Siya的答案之外,还有EventData类的简单实现(只是一个包含Event个对象的List:

import java.util.List;
import org.springframework.social.facebook.api.Event;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class EventData {

    private List<Event> data;

    public List<Event> getData() {
        return data;
    }
}

此外,我发现需要指定json响应中的字段超过要显示的标准集:

https://graph.facebook.com/v2.12/[pageid]/events?
fields=id,name,message,description,place,start_time,end_time,picture,cover