/ Facebook

[心得] Facebook World Hack Taipei 2012

其實是從 TonyQ 那邊得到這個訊息的。然後 Facebook World Hack 的消息之所以沒辦法傳遞出去,聽說是這個緣故:

User-agent: *
Disallow: /

這是 XDite 找到的,對了!這次的活動 XDite 與他的團隊獲得第一名!


解決的 ISSUE

當天其實只是自己默默的在玩 NodeJS 與 Facebook Open Graph, Graph API 這些東西。然後遇到了一些問題,

  • Open Graph 要使用 publish_actions 的時候,一直遇到 user access token 與 app access token 這兩件事情鬼打牆的情況。
  • NodeJS 的 fb module 如果要使用 upload_photo 其實是沒辦法用的,只能自己寫 upload 的模組來用。
  • publish_actions 可以把 Token 的請求關掉。
  • Graph API Exploter 改了,比之前好用得多。

首先來說一下 publish_actions 的 Token 請求去哪裡關掉。

  • 點進你的應用程式
  • 進去 Open Graph
  • 編輯你的 Action Type
  • 拉到最下面,有個__預覽__區塊
  • 底下有個超不顯眼的__進階__
  • Requires App Token to Publish 選__否__

這樣就可以了。但是其實我不知道為什麼會有這種情況。依照官方的說法是,

  • 使用 publish_actions 確實需要 user access token
  • 但是,如果將應用程式取得的 access_token 丟給他,他會回你
    This method must be called with an app access_token.
  • 好,依照他的建議,改用 app access token 丟改他,他會回你
    An active access token must be used to query information about the current user.
  • 然而,publish_actions 就是得使用 POST 的方式去送,所以這邊就鬼打牆了。

所以,希望有哪位高人可以指點一下。因為除了關閉 Token 之外,應該還是有辦法解決的吧?

另外,關於上傳相片這件事情,如果你用的跟我一樣的 module,那他可能會跟你說沒有檔案可以上傳。因此,你必須得另外寫個上傳的東西,來把你的相片傳給 Facebook。

這裡有相關討論:uploading a photo to facebook using https.request and a multipart form

然後,因為我複製貼上改了也不會動,所以我依照他的模式再次改寫一次,這次就會動了。當然,我使用的是 Coke 這套 Framework,所以有關於 form 的部份他已經幫我處理完了,所以我也不用再次針對 form 的檔案的部份再做處理。

var fb_access_token = '/* Your facebook access token here */';
var photo_slogan = 'Test from Facebook World Hack';
var filename = '/* Your photo filename here */';

var outputBits = [];
outputBits.push('------------0xKhTmLbOuNdArY\r\n');
outputBits.push('Content-Disposition: form-data; name="access_token"\r\n\r\n');
outputBits.push(fb_access_token + '\r\n');
outputBits.push('------------0xKhTmLbOuNdArY\r\n');
outputBits.push('Content-Disposition: form-data; name="message"\r\n\r\n');
outputBits.push(photo_slogan+'\r\n');
outputBits.push('------------0xKhTmLbOuNdArY\r\n');
outputBits.push('Content-Disposition: form-data; name="source"; filename="' +filename + '"\r\n');
outputBits.push('Content-Type: image/jpeg\r\n');
outputBits.push('Content-Transfer-Encoding: binary\r\n\r\n');
var output0    = outputBits.join("");

// This terminates the output body
var outputBits2 = [];
outputBits2.push('\r\n------------0xKhTmLbOuNdArY--\r\n');
var output2     = outputBits2.join("");

// Here's where we get the actual image
fs.readFile(filename, function(err, imageData) {
  if(err) {
        res.end('err');
  } else {
    var options = {
      host    : 'graph.facebook.com',
      port    : 443,
      path    : '/me/photos',
      method  : 'POST',
      headers :
        {
          'Content-Type'   : 'multipart/form-data; boundary=----------0xKhTmLbOuNdArY',
          'Content-Length' : output0.length + imageData.length + output2.length
        }
    };
    var request = https.request(options, function(response) {
      console.info('STATUS: ' + response.statusCode);
      console.info('HEADERS: ' + JSON.stringify(response.headers));
      response.setEncoding('utf8');

      response.on('data', function(chunk) {
        console.info('BODY: ' + chunk);
      });

      response.on('end', function() {
        res.end('ok');
      });

      response.on('close', function() {
        res.end('err');
      });
    });

    request.on('error', function(err) {
      res.end('err');
    });

    request.write(output0);
    request.write(imageData);
    request.write(output2);
    request.end();
  }
});

以上請自行測試,我在 NodeJS 0.8.6 的環境,是可以正常運作的(無責任逃。大致上是這個樣子,其實去了這次的活動,一直有種很興奮的感覺。大概是這種環境下,感覺好像可以寫出很厲害的東西(但是實際上也沒有就是了(掩面

另外,這場子的冷氣超冷的 XD

HACK 遊記(疑

這次會參加,也不知道為什麼收到了信件,然後就糊里糊塗的去報名了(喂)。其實我也沒有做了什麼東西出來,而且現場其實有很多機會可以跟 Facebook Developer 聊天之類的,不過礙於我英文太爛,所以窩在角落喝喝咖啡,吃小點心,做做自己的專案也是很合理的。

這是剛剛報到的時候,人其實蠻多的,大螢幕前面的 TECH TALKS 位置幾乎是全滿狀態!

IMG_1855

現場還有憤怒鳥遊戲可以玩,超可愛的說 XD

IMG_1857

台灣台北!國旗這樣是故意的,每個國家似乎都是這個樣子 :P

IMG_1858

TECH TALKS 開始了!第一個上台講的是 James Pearce

IMG_1863

其後還有 Vikas GuptaBear Douglas 兩位,其中 Bear Douglas 還因為講的太投入,跌落到講台後面去,不過人沒事啦,大家虛驚一場。

這是早上時段拿出來的小餐點。

IMG_1864

然後這是午餐,其實還有其他的東西(餅乾跟其他飲料之類的),只是我只拿了這些。

IMG_1865

窗外的視野相當好,這裡是全豐盛信義 105 大樓的頂樓,其實我是沒聽過,走到這裡才知道。

IMG_1867

上午場結束之後,下午就陸陸續續出現許多團隊,開始今天的主軸了。大螢幕上面,是跟柏林即時連線打招呼的畫面。

IMG_1870

然後下午茶出現了這個!這就是愛台灣啦(喂

IMG_1872

這是晚餐的陣仗!我當初一直盧我同事要他跟我一起來,你看看你!沒有來後悔了吧!

IMG_1874

IMG_1875

傍晚了!

IMG_1880

這次我沒有待到結束(後來知道結束的時間大概是 22:30 左右(抖!不過是個很有趣的體驗,而且我只有一個結論,那就是我英文實在好爛啊 Orz...