获取 Facebook 页面的事件

Posted

技术标签:

【中文标题】获取 Facebook 页面的事件【英文标题】:Getting Facebook page's events 【发布时间】:2015-02-10 13:19:16 【问题描述】:

所以我需要使用图形 api 获取用户当前位置的 Facebook 事件。根据文档,用户所在的城市是具有“/events”边缘的页面 Facebook 对象。因此,我可以使用图形路径/page-id/events 获取城市的事件,并且可能指定从开始到结束,但是如果没有此字段,则执行文档记录,而不是最后几周的结果。

读取此端点会返回一个与该节点具有相同字段的 Event 对象数组。

默认情况下,这只会返回最近两周内的事件,使用 until 或 since 参数来修改此范围。

API 表示该请求:

new Request(
session,
"/page-id/events",
null,
HttpMethod.GET,
new Request.Callback() 
    public void onCompleted(Response response) 
        /* handle the result */
    

).executeAsync();

将返回页面的事件。

好吧。我使用 Facebook 登录应用程序,而不是在此代码中:

public class FacebookActivity extends AbsActivity 

private static final String TAG = "YeedFacebookActivity";

private JSONObject location;
private JSONArray pageEvents, searchedEvents;

//this is executed in onCreate
protected void initializeFields() 
    super.initializeFields();
    ArrayList<String> permissions = new ArrayList<>(5);
    permissions.add("email");
    permissions.add("user_friends");
    permissions.add("user_location");
    permissions.add("user_events");

    final Bundle parameters = new Bundle(1);
    parameters.putString("fields", "location");

    Session.openActiveSession(this, true, permissions, new Session.StatusCallback() 
        @Override
        public void call(final Session session, SessionState sessionState, Exception e) 
            if (sessionState.isOpened()) 
                new Request(session, "/me", parameters, HttpMethod.GET, new Request.Callback() 
                    @Override
                    public void onCompleted(Response response) 
                        location = (JSONObject) response.getGraphObject().getProperty("location");
                        String cityId = "";
                        String cityName = "";
                        try 
                            cityId = location.getString("id");
                            cityName = location.getString("name");
                         catch (JSONException e1) 
                            e1.printStackTrace();
                        
                        //Requesting page events
                        new Request(session, cityId + "/events", null, HttpMethod.GET, new Request.Callback() 
                            @Override
                            public void onCompleted(Response response) 
                                Log.i(TAG, "PAGE\n" + response.toString());
                                pageEvents = (JSONArray) response.getGraphObject().getProperty("data");
                                Log.i(TAG, "PAGE\n" + pageEvents.toString());
                            
                        ).executeAsync();
                        //Search by city name
                        Bundle searchParams = new Bundle(2);
                        searchParams.putString("q", cityName);
                        searchParams.putString("type", "event");
                        new Request(session, "/search", searchParams, HttpMethod.GET, new Request.Callback() 
                            @Override
                            public void onCompleted(Response response) 
                                Log.i(TAG, "SEARCH\n" + response.toString());
                                searchedEvents = (JSONArray) response.getGraphObject().getProperty("data");
                                Log.i(TAG, "SEARCH\n" + searchedEvents.toString());
                            
                        ).executeAsync();
                    
                ).executeAsync();
            
        
    );


用于检索用户城市的外部请求。第一个内部请求返回空数据,第二个内部请求返回有关城市事件的正常数据,但它们没有按时间排序,我不需要所有这些事件,只需要几周后开始的所有事件,而是排序然后过滤它们在客户端是完全糟糕的解决方案。

所以我的问题是为什么数据是空的?我可以以某种方式增强搜索请求吗?

【问题讨论】:

【参考方案1】:

没有将事件自动聚合和分配到位置页面。页面事件必须由页面本身显式创建。这就是您看不到任何结果的原因。

【讨论】:

嗯...,谢谢!有什么方法可以改善搜索请求,或者最好的解决方案是将其转移到后端? 哪个搜索请求? 您可以首先使用带有坐标和半径的place 搜索,并带有一个特定的搜索词。然后,获取结果页面并为每个页面请求/page_id/events 边缘 对于我的城市,它会为其他人返回空数据,这没关系。太糟糕了,我们无法使用地理位置直接搜索事件。

以上是关于获取 Facebook 页面的事件的主要内容,如果未能解决你的问题,请参考以下文章

使用 graph Api 获取 Facebook 页面事件

如何获取 Facebook 页面的事件?

即使拥有管理员权限,我也无法从 Facebook 页面获取事件 [重复]

如何使用新的 facebook graph api v2.4 从页面获取事件

从 Facebook 事件中获取地名

Facebook:当用户点击粉丝页面上的“喜欢”按钮时获取