2011-10-12 29 views
0

我检索信息的收件箱与以下图形API调用:如何可以构造一个链接以查看facebook.com一条消息,如果我有消息ID

https://graph.facebook.com/me/inbox?access_token=... 

它返回消息的阵列每个都有一个标识“ID”(与FQL返回的消息ID相同)

我希望能够提供一个链接供用户直接在Facebook.com上查看消息。

喜欢的东西:https://www.facebook.com/messages/?action=read&tid= ....

这就是你,如果你从Facebook自己浏览到一个消息,你的链接。

但是,我似乎无法找到一种方法来发现从Graph API或FQL正确的tid。

我还没有找到替代URL的好运。

此URL用来工作,但现在坏了我:http://facebook.com/?sk=messages&tid= ...

它只是重定向到顶层消息页面:https://www.facebook.com/messages/

什么想法?

非常感谢

回答

0

从图形API得到me/inbox结果集给出ID为每个对象的一部分返回。这也是thread_id。

如果你的id是一个字符串对象(可能是一个guid),这是来自Facebook旧的消息系统存储结构。现在,他们已经更新到需要旧的要迁移到新

新的存储结构,所以,你有一个相当简单的检查:

如果线程ID是一个长期(的Int64/BigInt有),然后你有一个新的线程,并且可以使用 http://www.facebook.com/messages/?action=read&tid=id.THREAD_ID

如果线程ID是一个字符串,那么你有一个旧的线程,并可以使用

http://www.facebook.com/messages/?action=read&tid=THREAD_ID

很多编程语言翻译年龄有自己的形式来检查价值的类型。

var threadId = (string)data.thread_id; 
var longVal = 0L;  
var isLong = Int64.TryParse(threadId, out longVal); 
var threadUrl = (isLong) ? 
    "http://www.facebook.com/messages/?action=read&tid=id." + threadId : 
    "http://www.facebook.com/messages/?action=read&tid=" + threadId; 
相关问题