获取Facebook页面的活动

时间:2015-02-10 13:19:16

标签: facebook facebook-graph-api facebook-android-sdk

所以我需要使用图形api为用户的当前位置获取Facebook事件。根据文档,用户的城市是页面Facebook对象,其中包含" / events"边缘。所以我可以使用图形路径/ {page-id} /事件来获取城市事件,也可以指定自从和直到,但是如果没有这样的情况则会记录文件,结果将是最后几周的结果。

  

读取此端点将返回一个Event对象数组,其字段与该节点相同。

     

默认情况下,这只会在过去两周内返回事件,使用直到或自参数修改此范围。

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

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

所以我的问题是为什么数据是emty?我可以以某种方式提高搜索请求吗?

1 个答案:

答案 0 :(得分:0)

没有自动聚合和事件分配到位置页面。页面事件必须由页面本身明确创建。这就是为什么你没有看到任何结果。