获取 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 页面的事件的主要内容,如果未能解决你的问题,请参考以下文章
即使拥有管理员权限,我也无法从 Facebook 页面获取事件 [重复]