如何使用Facebook Graph API执行FQL Insights查询

时间:2012-01-06 17:02:35

标签: facebook-graph-api facebook-c#-sdk facebook-fql facebook-insights

我尝试使用Graph API执行FQL查询以获取Insights计数器的值。

有谁知道我该怎么做?

我使用“Facebook C#SDK”版本5.4.1,C#4.0。

如果我使用文档中提供的C#示例代码

    var fb = new FacebookClient(m_accessToken);
    dynamic result = fb.Query("SELECT name, uid FROM user WHERE uid= me()");

我收到了很好的回复

{"name":"","uid":100002632407830}

使用相同的语法,如果我请求“pages_fans”数据洞察计数器并使用库5.4.1

var fb = new FacebookClient(m_accessToken);
  dynamic result = fb.Query("SELECT metric, value FROM insights WHERE object_id=6176018219 AND metric='page_fans' AND end_time=end_time_date('2011-12-31') AND period=period('lifetime')");

我总是收到一个空的回复

 {[]}

使用相同的代码但使用库5.2.1 我收到的回复总是很好

 {[{"metric":"page_fans","value":"125535"}]}

这是与此处描述的问题相同:Error with FQL query with library 5.4.1但使用其他语法。

目前我使用REST API(使用libary 5.2.1)使用FQL Insights查询,但我想使用Graph API(使用库5.4.1)迁移到FQL Insights查询,因为不推荐使用REST API。

错误在哪里:

  1. 在我的语法请求中?
  2. 在“Facebook C#SDK”库中?
  3. 在Facebook服务器上?
  4. 最好的问候。

4 个答案:

答案 0 :(得分:2)

我使用Facebook Graph API Explorer

提出了请求
https://graph.facebook.com/fql?q=SELECT metric, value FROM insights
WHERE object_id=6176018219 AND metric='page_fans' AND
end_time=end_time_date('2011-12-31') AND period=period('lifetime')

我总是收到空的回复。

{
  "data": [
  ]
}

这是Facebook的错误。

在Facebook上创建了一个关于它的错误:http://developers.facebook.com/bugs/232510993491615?browse=search_4f08c675cce9d2265724293

答案 1 :(得分:1)

我发现了另一种检索可靠信息的方法

我找到了另一种检索洞察力的方法,这种方式似乎是可靠的。 文档在此处http://developers.facebook.com/docs/reference/api/insights/

有更多选项允许格式和句点更改 - 以下示例。

https://graph.facebook.com/2439131959/insights/application_active_users/ [时间段]格式= JSON&安培;因为= [时间戳]&安培;直到= [时间戳]&安培; =的access_token [的access_token]

期间是日,月,周,寿命。 时间戳只能是有效的PST午夜。 access_token =可能。 1.不需要许可的指标。 2. app_id | secret_code或 3.您的身份验证令牌被授予您可以访问应用程序或页面(即所有者或洞察用户)的洞察数据的权限。

C#sdk示例:

FacebookClient fbClient =新的FacebookClient([appID],[secret]);

        DateTime untilDate= (new DateTime([Now].Year, [Now].Month, [Now].Day));
        DateTime sinceDate= (new DateTime([Now].Year, [Now].Month, [Now].Day)).AddDays(-1);
        TimeSpan t = (untilDate- new DateTime(1970, 1, 1));
        int timestampUntil = (int)t.TotalSeconds;
        t = (sinceDate- new DateTime(1970, 1, 1));
        int timeStampSince = (int)t.TotalSeconds;



        var result = (IDictionary<string, object>)fbClient.Get([appID] + "/insights/" + [metricID] + "/" + [period] + "?format=json&since="+timeStampSince+"&until="+timestampUntil );
         Console.WriteLine(result["data"]);

答案 2 :(得分:1)

获取访问令牌时确保您拥有正确的权限

<fb:login-button perms="read_insights"></fb:login-button>

答案 3 :(得分:0)

此问题与 Facebook C#SDK

有关

您可以做的最好的事情是在codeplex上提交错误,并将end_time_date的使用情况替换为"time in seconds"period"lifetime"