facebook應用實例(4)-發佈到塗鴉牆

發佈到塗鴉牆這裡用的是JavaScript SDK,其它的語言該怎麼寫我就沒有深入研究了。新版 Feed Dialog 的參考程式碼如下,可以和下面舊版的程式互相比較(2011.12.24 更新):


stream.publish

下面是舊版的 stream.publish 語法,已經不建議使用,不過還是可以執行。

function result_publish() {
    FB.ui(
        {
            method: 'stream.publish',
            message: '使用者預設的說話內容',
            attachment: {
                name: '標題',
                caption: '子標題',
                description: '描述',
                href: '標題連結的網址',
                properties: {
                    '項目標題': { 'text': '項目內容文字', 'href': '項目內容網址' },
                    '項目標題': { 'text': '項目內容文字', 'href': '項目內容網址' }
                },
                media: [{
                    type: 'image',
                    href: '圖片連結',
                    src: '圖片網址'
                }]
            },
            action_links: [
                { text: '發佈後右下角的提示', href: '提示連結的網址' }
            ]
        },
        function(response) {
            if (response && response.post_id) {
                //alert('Post was published.');
            } else {
                //alert('Post was not published.');
            }
        }
    );
}

首先當我們進到JavaScript SDK的介紹時,下面就有stream.publish的範例了。針對stream.publish有那些屬性,可以參考stream.publish的說明。另外由於Attachments屬性裡面還有很多其它的屬性,所以又有另一個Stream Attachments章節在介紹這個部份。

理論上使用facebook官方網站提供的範例,就可以順利將內容發佈到塗鴉牆了,然而在我先前研究的時候,卻會發生奇怪的錯誤--當我發佈的內容超過某個字數時,描述以下的內文就會全部不見。我不知道現在官方是否有修正這個錯誤,如果在撰寫程式時有遇到這種狀況,可以在JavaScript SDK的宣告中加入一段程式碼:

window.fbAsyncInit = function() {   //初始化登入狀態,使用JavaScript SDK
    //輸入應用程式ID
    FB.init({appId: '應用程式ID', status: true, cookie: true, xfbml: true});

    //解決stream.publish無法輸入太多資料的bug
    origPostTarget = FB.Content.postTarget;
    FB.Content.postTarget = function(opts) {
        opts.params = FB.JSON.flatten(opts.params);
        origPostTarget(opts);
    };
};