1

Mein Ziel ist es, eine Liste von Ereignissen für eine bestimmte Facebook-Seite und ein Benutzerprofil abzurufen. Die Liste sollte nur Ereignisse in der Zukunft zurückgeben. Ich kann keinen Weg finden mit Spring Social Facebook API. Ich bin mit dem folgenden Code festgefahren.So erhalten Sie die Ereignisse einer Facebook-Seite mit Spring Social

mit 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"; 
    } 

} 

Antwort

1

Ich löste dies durch die RestOperations-API, die flexibler ist.

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"; 
    } 

} 
+0

Afaik die einzige Möglichkeit, eine Liste von Ereignisobjekten zu erhalten, ist 'EventOperations.getCreated zu nennen()' der R etzt eine Liste für den aktuell verbundenen Benutzer. Aber um Events für jede andere Seite oder Benutzer zu bekommen, bietet das Framework seltsamerweise keine Lösung. Also ich denke, Ihre vorgeschlagene Lösung ist der Weg zu gehen. – acdhirr

0

Neben Siya Antwort hier ist eine einfache Implementierung der EventData Klasse (nur eine Liste Halten der Event Objekte):

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; 
    } 
} 

Außerdem habe ich festgestellt, dass man die Felder in die angeben muss json Antwort für mehr als ein Standard-Set zu erscheinen:

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