在PHP 3.0 SDK中,没有getSession()或任何来自Facebook api外部的会话处理.根据这篇博客文章和这个错误报告,几天前facebook的开发者也以某种方式更新了JavaScript sdk .
在过去的几天里,托管的JS SDK引入了一个变化,它破坏了它与当前PHP SDK(2.x和3.x)之间的所有可比性.在其网站上同时使用JS和PHP SDK的开发人员可能会看到服务器端API失败.
但是,我不知道这是否真的会影响我的问题.就像在这个问题的答案中一样,我正在使用PHP检索OAuth对话框的访问令牌,并在会话中保存新的访问令牌.
以下代码显示了我如何处理此会话.$_REQUEST['session']是OAuth对话框响应的内容.
if(isset($_REQUEST['session'])) {
$response = json_decode(stripslashes($_REQUEST['session']), true);
if(isset($response['access_token'])) {
$this->api->setAccessToken($response['access_token']);
$_SESSION['access_token'] = $this->api->getAccessToken();
}
}
elseif(isset($_SESSION['access_token']) && ! isset($_REQUEST['signed_request']))
$this->api->setAccessToken($_SESSION['access_token']);
elseif(isset($_REQUEST['signed_request'])) {
Session::invalidate('fbuser');
$_SESSION['access_token'] = '';
}
Run Code Online (Sandbox Code Playgroud)
以下是我处理用户数据的方法:
try {
$this->user = Session::getVar('fbuser');
if ($this->user === false || is_null($this->user)) {
$facebookUser = $this->api->api('me?fields=id,name,first_name,last_name');
$this->user = new FBUserModel(array('fbId' => $facebookUser['fbId'], ...));
Session::setVar('fbuser', $this->user);
}
}
Run Code Online (Sandbox Code Playgroud)
测试时一切都很好看.仅在发生错误时:第一次设置权限后.现在,由于应用程序在线,似乎每个第二个用户平均发生错误 …
我对Facebook FQL的运作方式感到困惑.我需要获得特定页面的"本月粉丝".这是发表评论最多的用户.
在facebook FQL流文档中,它说:
流表的每个查询都限制在前30天或50个帖子中,以较大者为准,但是您可以使用特定于时间的字段(如created_time)和FQL运算符(例如<或>)来检索更大范围的帖子.
这就是我正在做的事情.我通过以下方式获取某个范围内的帖子:
SELECT actor_id,created_time FROM stream WHERE source_id = '.$wallid.' AND (created_time >= '.$date_start.' OR updated_time >= '.$date_start.')'
Run Code Online (Sandbox Code Playgroud)
这似乎有用 - 不知何故 - 但我的评论有问题.我不想获得特定帖子的所有评论,但是在一个时间范围内的所有评论.
SELECT fromid, time FROM comment WHERE post_id IN (SELECT post_id FROM stream WHERE source_id = '.$wallid.')
Run Code Online (Sandbox Code Playgroud)
这将返回约50条评论.当我添加以下内容时:
AND time > 1309478400 // 2011-07-01
Run Code Online (Sandbox Code Playgroud)
我也得到了评论.但是以下(2011-07-01 - 2011-07-02)我得到一个空数组:
AND time > 1309478400 AND time < 1309564800
Run Code Online (Sandbox Code Playgroud)
当我不添加时间条件时,似乎我可以通过运行带有递增限制的多个查询来返回超过50条注释:
... LIMIT 0, 50
... LIMIT 50, 50
Run Code Online (Sandbox Code Playgroud)
但是这种限制在我的时间条件下无法正常工作.
那么,有没有人已经做过类似的事情,或者任何人可以解释在哪些情况下限制有效,什么时候没有?
我有一个 http 方法的枚举:
export enum HttpMethod {
GET = 'GET', POST = 'POST', /*...*/
}
Run Code Online (Sandbox Code Playgroud)
然后我定义了一个基本的方法类型,它可以有 anyHttpMethod作为键:
type Methods = {
[M in HttpMethod]?: any;
};
Run Code Online (Sandbox Code Playgroud)
一个基本的 Route 类型可以使用这个 Method 类型:
type Route<M extends Methods = any> = {
methods: M;
}
Run Code Online (Sandbox Code Playgroud)
所以我可以定义任何路线,如:
interface AnyRoute extends Route<{
[HttpMethod.GET]: AnyRequestHandler;
}> {}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好。现在我想添加一个Validator:
type Validator<R extends Route, M extends HttpMethod> = {/*...*/}
Run Code Online (Sandbox Code Playgroud)
并且只希望允许将Methods添加到 中Validator,在 中定义Route:
type RouteMethodValidators<R extends Route> = { …Run Code Online (Sandbox Code Playgroud) php ×2
definition ×1
enums ×1
facebook ×1
facebook-fql ×1
generics ×1
javascript ×1
limit ×1
session ×1
typescript ×1