使うもの
基本の型をつくる
パッケージのインストール
1.package.json
をつくる
""にしてるので最新が落ちる。
バージョンしてしたければ、"express": "3.2."のようにする。
{
"name": "node-sns",
"version": "0.0.1",
"private": true,
"dependencies":{
"express": "*",
"facebook-node-sdk": "*"
}
}
2.インストール
npm install
本体
ルーティングファイルを指定しているところだけ注意。
ルーティングファイルを別ファイルにしていて同じディレクトリのroutes.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.all
でapi/*
というurlでアクセスされたときの共通処理を記述している。
/api/facebook/search
というurlでアクセスされたときにfacebook
を呼んで結果を返している。
このfacebook
はvar facebook = require('./facebook');
のとおり、別ファイルのfacebook.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
するかターミナルを再起動する。
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。
'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.アクセス
参考