20
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Node.js+ExpressでFacebook APIをさわる

Posted at

使うもの

基本の型をつくる

パッケージのインストール

1.package.jsonをつくる

""にしてるので最新が落ちる。
バージョンしてしたければ、"express": "3.2.
"のようにする。

package.json
{
    "name": "node-sns",
    "version": "0.0.1",
    "private": true,
    "dependencies":{
        "express": "*",
        "facebook-node-sdk": "*"
    }
}

2.インストール

npm install

本体

ルーティングファイルを指定しているところだけ注意。
ルーティングファイルを別ファイルにしていて同じディレクトリのroutes.jsということ。

app.js
'use strict';
var http = require('http');
var express = require('express');
// ルーティングファイルを指定
var routes = require('./routes');
var app = express();
var server = http.createServer(app);

routes.configRoutes(app, server);

server.listen(3000);
console.log('Listening on port %d in %s mode', server.address().port, app.settings.env);

ルーティング

app.allapi/*というurlでアクセスされたときの共通処理を記述している。

/api/facebook/searchというurlでアクセスされたときにfacebookを呼んで結果を返している。
このfacebookvar facebook = require('./facebook');のとおり、別ファイルのfacebook.jsを指している。

routes.js
'use strict';
var configRoutes;
var url = require('url');
var facebook = require('./facebook');
var urlInfo;

configRoutes = function(app, server) {
    app.get('/', function(request, response) {
        response.redirect('/index.html');
    });

    app.all('/api/*', function(request, response, next){
    	// クエリー文字列を含めてurl情報を取得(trueオプションでクエリ文字列も取得)
    	urlInfo = url.parse(request.url, true);
    	// jsonでレスポンス(外部の人もアクセスできるようにAccess-Control-Allow-Originを設定)
	    response.contentType('json');
	    response.header('Access-Control-Allow-Origin', '*');
	    next();
	});
    app.get('/api/facebook/search', function(request, response) {
    	facebook.search(urlInfo,
            function(result){
                response.send(result);
            }
        );
    });
}

module.exports = {configRoutes: configRoutes};

Facebook API処理

Facebook APIのアカウント作成

以下にアクセスしてログインする。

[MY APPS]タブの[Add a New App]でwwwのAppを追加する。

で、以下をメモ。
App ID
App Secret

環境変数設定

App IDとApp Secretは環境変数に設定する。
Macだったら.bash_profileとかで以下のように書いて、source ~/.bash_profileするかターミナルを再起動する。

.bash_profile
export FB_APP_ID="YOURS"
export FB_APP_SECRET="YOURS"

Facebook API処理

とりあえず、検索だけ。
Facebook Graph APIは、次のようにGETでアクセスする。

  • /me
  • /{user-id}
  • /{user-id}/feed
  • /{album-id}/photos

とりあえず、パターンによらず全てクエリ文字列のidとして受け取ってそのまま渡す。
一応、fields指定もクエリ文字列指定でできるようにする。

search以外のメソッドを追加したときは、最後のexportsに追加するのを忘れないように。

facebook-node-sdk公式サイトのREADME.mdがタイポしていてappIdがappIDになっているので注意。正しいのはappId。

facebook.js
'use strict';
// https://github.com/amachang/facebook-node-sdk
var Facebook = require('facebook-node-sdk');
var facebook = new Facebook({
  appId: process.env.FB_APP_ID,
  secret: process.env.FB_APP_SECRET
});

function search(urlInfo, callback) {
  var id = '/4';
  if( urlInfo.query.id ) {
    id = urlInfo.query.id
  }
  var parameters = {};
  if( urlInfo.query.fields ) {
    parameters.fields = urlInfo.query.fields
  }
  facebook.api(id, parameters, function(err, data) {
    console.log(err);
    callback(data);
  });
}

module.exports = {
    search: search
}

動かす

1.server起動

node app.js

2.アクセス

参考

20
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?