其實是從 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 位置幾乎是全滿狀態!
現場還有憤怒鳥遊戲可以玩,超可愛的說 XD
台灣台北!國旗這樣是故意的,每個國家似乎都是這個樣子 :P
TECH TALKS 開始了!第一個上台講的是 James Pearce
其後還有 Vikas Gupta 跟 Bear Douglas 兩位,其中 Bear Douglas 還因為講的太投入,跌落到講台後面去,不過人沒事啦,大家虛驚一場。
這是早上時段拿出來的小餐點。
然後這是午餐,其實還有其他的東西(餅乾跟其他飲料之類的),只是我只拿了這些。
窗外的視野相當好,這裡是全豐盛信義 105 大樓的頂樓,其實我是沒聽過,走到這裡才知道。
上午場結束之後,下午就陸陸續續出現許多團隊,開始今天的主軸了。大螢幕上面,是跟柏林即時連線打招呼的畫面。
然後下午茶出現了這個!這就是愛台灣啦(喂
這是晚餐的陣仗!我當初一直盧我同事要他跟我一起來,你看看你!沒有來後悔了吧!
傍晚了!
這次我沒有待到結束(後來知道結束的時間大概是 22:30 左右(抖!不過是個很有趣的體驗,而且我只有一個結論,那就是我英文實在好爛啊 Orz...