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?我可以以某种方式增加搜索请求吗?
嗯...,谢谢你!有什么方法可以改善搜索请求,或者最好的解决方案将其转移到后端? – 2015-02-10 13:33:05
哪个搜索请求? – Tobi 2015-02-10 14:05:23
您可以首先使用具有特定搜索词的坐标和半径搜索“place”。然后,获取结果页面并为每个页面请求'/ {page_id}/events'边缘 – Tobi 2015-02-10 14:12:09