2012-01-29 56 views
5

How can I construct a link to view a message on facebook.com if I have the message id的问题,但没有答案。如果我使用/ me/inbox API端点获得了线程的id,并且需要将用户重定向到显示此线程的Facebook本身,该怎么办?我如何构建URL。似乎有像http://www.facebook.com/messages/?action=read&tid=id.143666952390138这样的URL,其中线程ID是最后的数字。但也有一些陌生人的网址,如http://www.facebook.com/messages/?action=read&tid=27726d81656e4c07ae5654116cccb724,其中以前的规则不起作用。 有没有解决方案使用Graph API或FQL获取线程URL?如何获得知道线程ID的消息线程URL?

回答

8

如果你拥有的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; 
+1

这将是巨大的,如果一切是这样简单,但要求从图形API/ME /收件箱时的27726d81656e4c07ae5654116cccb724(ID应该如何才能正常打开Facebook的线程页)线程我得到一个64位的“ID “:”1956133107397“。如果我使用来自/ me/inbox(64位之一)的id来构造线程页面url,我会得到“No message found”错误。我无法使用Graph API从facebook中检索更长的十六进制id。 – vian 2012-02-04 08:14:03

+1

我不知道你对值做了什么,但我总是尝试使用我上面发布的代码始终工作。当然,你必须拥有一个**有效的用户访问令牌和'read_mailbox'权限**。请参阅:https://developers.facebook.com/docs/reference/api/permissions – DMCS 2012-02-04 09:39:26

+0

我有一个read_mailbox权限,我检查它的工作,但由于某种原因,我可以得到长十六进制字符串ID只有当我使用/我/线程连接,当我使用/我/收件箱我得到一个非工作的ID。如果不需要用户成为应用程序的开发人员,使用/ me/threads会更容易。 – vian 2012-02-07 09:36:50