Facebook修复了图谱API中的/likes
。 /likes
现在返回喜欢图表中特定对象的用户的完整列表(照片,相册等)。在之前,它只返回3-5个用户。
我的问题是,如果不解析整个JSON并获得元素数,你如何计算“喜欢”的总数?我只对“喜欢”计数感兴趣;我对给予喜欢的用户不感兴趣。
将整个JSON数据集计算起来似乎有点贵。
EG:https://graph.facebook.com/161820597180936/likes
这张照片有1000多个喜欢。
答案 0 :(得分:2)
看到字符串是JSON,为什么不将它转换为标准的.net对象,并在它创建的数组上使用.Count。然后将此信息缓存15分钟或更长时间(取决于您想要信息的陈旧情况)。
上面的方法非常繁重,因为你基本上要搜索一个未知次数的字符串,返回索引,将它与int进行比较,添加另一个索引等等。并且上面的C#不起作用(假设它是您正在演示的C#)。
使用类似的东西:
public static T FromJson<T>(this string s)
{
var ser = new System.Web.Script.Serialization.JavaScriptSerializer.JavaScriptSerializer();
return ser.Deserialize<T>(s);
}
此方法是一种扩展方法,它采用格式正确的JSON字符串并将其转换为对象T,例如。
var result = // call facebook here and get your response string
List<FacebookLikes> likes = result.FromJson <List<FacebookLikes>>();
Response.Write(likes.Count.ToString());
// now cache the likes somewhere, and get from cache next time.
我不确定这个性能,没有做过任何测试,但对我来说它看起来更整洁,更具可读性。当你在缓存数据时,我会看到以前的方法可读性。
答案 1 :(得分:1)
为什么解析整个数据集会很昂贵?这应该花费几毫秒:
public static int CountLikes(string dataSet)
{
int i = 0;
int j = 0;
while ((i = dataSet.IndexOf('"id":', i)) != -1)
{
i += 5;
j++;
}
return j;
}
您还可以附加参数limit =#,例如: