2012-01-29 139 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