2015-02-10 35 views
0

所以我需要使用图形API获取用户当前位置的Facebook事件。根据文档用户的城市是具有“/事件”边缘的页面Facebook对象。因此,我可以使用图表路径/ {page-id} /事件获取城市事件,也许可以指定自从和直到,但如果这些结果不存在,则计算文档,而不是上周的结果。获取Facebook页面的事件

读取此端点将返回一个与该节点具有相同字段的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?我可以以某种方式增加搜索请求吗?

回答

0

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

+0

嗯...,谢谢你!有什么方法可以改善搜索请求,或者最好的解决方案将其转移到后端? – 2015-02-10 13:33:05

+0

哪个搜索请求? – Tobi 2015-02-10 14:05:23

+0

您可以首先使用具有特定搜索词的坐标和半径搜索“place”。然后,获取结果页面并为每个页面请求'/ {page_id}/events'边缘 – Tobi 2015-02-10 14:12:09