Sample express app which uses Google GData API
This commit is contained in:
parent
15f06f254f
commit
8050d82019
143
examples/express-gdata/server.js
Normal file
143
examples/express-gdata/server.js
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
|
||||||
|
var express = require('express'),
|
||||||
|
OAuth = require('oauth').OAuth,
|
||||||
|
querystring = require('querystring');
|
||||||
|
|
||||||
|
// Setup the Express.js server
|
||||||
|
var app = express.createServer();
|
||||||
|
app.use(express.logger());
|
||||||
|
app.use(express.bodyDecoder());
|
||||||
|
app.use(express.cookieDecoder());
|
||||||
|
app.use(express.session({
|
||||||
|
secret: "skjghskdjfhbqigohqdiouk"
|
||||||
|
}));
|
||||||
|
|
||||||
|
// Home Page
|
||||||
|
app.get('/', function(req, res){
|
||||||
|
if(!req.session.oauth_access_token) {
|
||||||
|
res.redirect("/google_login");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
res.redirect("/google_contacts");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Request an OAuth Request Token, and redirects the user to authorize it
|
||||||
|
app.get('/google_login', function(req, res) {
|
||||||
|
|
||||||
|
var getRequestTokenUrl = "https://www.google.com/accounts/OAuthGetRequestToken";
|
||||||
|
|
||||||
|
// GData specifid: scopes that wa want access to
|
||||||
|
var gdataScopes = [
|
||||||
|
querystring.escape("https://www.google.com/m8/feeds/"),
|
||||||
|
querystring.escape("https://www.google.com/calendar/feeds/")
|
||||||
|
];
|
||||||
|
|
||||||
|
var oa = new OAuth(getRequestTokenUrl+"?scope="+gdataScopes.join('+'),
|
||||||
|
"https://www.google.com/accounts/OAuthGetAccessToken",
|
||||||
|
"anonymous",
|
||||||
|
"anonymous",
|
||||||
|
"1.0",
|
||||||
|
"http://localhost:3000/google_cb"+( req.param('action') && req.param('action') != "" ? "?action="+querystring.escape(req.param('action')) : "" ),
|
||||||
|
"HMAC-SHA1");
|
||||||
|
|
||||||
|
oa.getOAuthRequestToken(function(error, oauth_token, oauth_token_secret, results){
|
||||||
|
if(error) {
|
||||||
|
console.log('error');
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// store the tokens in the session
|
||||||
|
req.session.oa = oa;
|
||||||
|
req.session.oauth_token = oauth_token;
|
||||||
|
req.session.oauth_token_secret = oauth_token_secret;
|
||||||
|
|
||||||
|
// redirect the user to authorize the token
|
||||||
|
res.redirect("https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token="+oauth_token);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// Callback for the authorization page
|
||||||
|
app.get('/google_cb', function(req, res) {
|
||||||
|
|
||||||
|
// get the OAuth access token with the 'oauth_verifier' that we received
|
||||||
|
req.session.oa.getOAuthAccessToken(
|
||||||
|
req.session.oauth_token,
|
||||||
|
req.session.oauth_token_secret,
|
||||||
|
req.param('oauth_verifier'),
|
||||||
|
function(error, oauth_access_token, oauth_access_token_secret, results2) {
|
||||||
|
|
||||||
|
if(error) {
|
||||||
|
console.log('error');
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
// store the access token in the session
|
||||||
|
req.session.oauth_access_token = oauth_access_token;
|
||||||
|
req.session.oauth_access_token_secret = oauth_access_token_secret;
|
||||||
|
|
||||||
|
res.redirect((req.param('action') && req.param('action') != "") ? req.param('action') : "/google_contacts");
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
function require_google_login(req, res, next) {
|
||||||
|
if(!req.session.oauth_access_token) {
|
||||||
|
res.redirect("/google_login?action="+querystring.escape(req.originalUrl));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
next();
|
||||||
|
};
|
||||||
|
|
||||||
|
app.get('/google_contacts', require_google_login, function(req, res) {
|
||||||
|
|
||||||
|
// Example using GData API v3
|
||||||
|
// GData Specific Header
|
||||||
|
req.session.oa._headers['GData-Version'] = '3.0';
|
||||||
|
|
||||||
|
req.session.oa.getProtectedResource(
|
||||||
|
"https://www.google.com/m8/feeds/contacts/default/full?alt=json",
|
||||||
|
"GET",
|
||||||
|
req.session.oauth_access_token,
|
||||||
|
req.session.oauth_access_token_secret,
|
||||||
|
function (error, data, response) {
|
||||||
|
|
||||||
|
var feed = JSON.parse(data);
|
||||||
|
|
||||||
|
res.render('google_contacts.ejs', {
|
||||||
|
locals: { feed: feed }
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get('/google_calendars', require_google_login, function(req, res) {
|
||||||
|
|
||||||
|
// Example using GData API v2
|
||||||
|
// GData Specific Header
|
||||||
|
req.session.oa._headers['GData-Version'] = '2';
|
||||||
|
|
||||||
|
req.session.oa.getProtectedResource(
|
||||||
|
"https://www.google.com/calendar/feeds/default/allcalendars/full?alt=jsonc",
|
||||||
|
"GET",
|
||||||
|
req.session.oauth_access_token,
|
||||||
|
req.session.oauth_access_token_secret,
|
||||||
|
function (error, data, response) {
|
||||||
|
|
||||||
|
var feed = JSON.parse(data);
|
||||||
|
|
||||||
|
res.render('google_calendars.ejs', {
|
||||||
|
locals: { feed: feed }
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
app.listen(3000);
|
||||||
|
console.log("listening on http://localhost:3000");
|
21
examples/express-gdata/views/google_calendars.ejs
Normal file
21
examples/express-gdata/views/google_calendars.ejs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
<p><a href="/google_contacts">Check google_contacts</a></p>
|
||||||
|
|
||||||
|
<h1>Google Calendars</h1>
|
||||||
|
|
||||||
|
<% for(var i = 0 ; i < feed.data.items.length ; i++ ) {
|
||||||
|
|
||||||
|
var calendar = feed.data.items[i]; %>
|
||||||
|
<div>
|
||||||
|
|
||||||
|
<h2 style="color:white;background-color:<%= calendar["color"] %>"><%= calendar["title"] %></h2>
|
||||||
|
|
||||||
|
<p>canEdit: <%= calendar["canEdit"] %></p>
|
||||||
|
<p>accessLevel: <%= calendar["accessLevel"] %></p>
|
||||||
|
<p>timeZone: <%= calendar["timeZone"] %></p>
|
||||||
|
<p>kind: <%= calendar["kind"] %></p>
|
||||||
|
<p>updated: <%= calendar["updated"] %></p>
|
||||||
|
<p>created: <%= calendar["created"] %></p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<% } %>
|
24
examples/express-gdata/views/google_contacts.ejs
Normal file
24
examples/express-gdata/views/google_contacts.ejs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
<p><a href="/google_calendars">Check google_calendars</a></p>
|
||||||
|
|
||||||
|
<h1>Google Contacts</h1>
|
||||||
|
|
||||||
|
<% for(var i = 0 ; i < feed.feed.entry.length ; i++ ) {
|
||||||
|
|
||||||
|
var contact = feed.feed.entry[i]; %>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<!-- you can access much more ! Just a sample: -->
|
||||||
|
<%= contact["title"]["$t"] %>
|
||||||
|
<% emails = contact["gd$email"] %>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<% for(var j = 0 ; j < emails.length ; j++) { %>
|
||||||
|
<li><%= emails[j]["address" ]%></li>
|
||||||
|
<% } %>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<% } %>
|
9
examples/express-gdata/views/layout.ejs
Normal file
9
examples/express-gdata/views/layout.ejs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<%- body %>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
x
Reference in New Issue
Block a user