FacebookのGraph APIで写真を投稿する場合には、/ALBUM_ID/photos
のエンドポイントにHTTP POSTするのですが、そのときにmultipart/form-data形式にする必要があります。
https://developers.facebook.com/docs/reference/api/publishing/
詳しくは上記公式ドキュメントを参照してください。
ところで、以前紹介したfacebook-node-sdkでは、form-dataがサポートされていません。
https://github.com/Thuzi/facebook-node-sdk/issues/28
このようにIssueにもなっていましたが、現時点ではサポートされていないようです。PRしてくれとか言っているので、ちょっとのぞいてみましたがrequestが奥の方に埋まっているので、ちょっと手間がかかりそうでした。
とりあえず、動くものを作ってみようと思ったので、上記ライブラリは使わずに普通にrequestだけでやってみたところ、簡単にできてしまいました。
コードを貼り付けておきます。
var request = require('request');
function postMyPhoto(accessToken, message, file, callback) {
var form = request.post('https://graph.facebook.com/me/photos', function(err, res, data) {
if (err) return callback(err);
if (!data || data.error) return callback(data ? data.error : 'unknown error');
callback(null, data);
}).form();
form.append('access_token', accessToken);
form.append('message', message);
form.append('source', fs.createReadStream(file));
}
実は、streamを初めて使いました。使ったとは言わないか。 しかし、フローが分かりにくいです。明示的にstreamの終了はないものなのでしょうか。 興味はあるのでまたの機会に勉強しようと思います。
コメント