Skip to content

Instantly share code, notes, and snippets.

@pedrobrasileiro
Forked from molinto/fourSquareAPI.js
Last active August 29, 2015 14:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pedrobrasileiro/60f2bd6cfb6eb99287d9 to your computer and use it in GitHub Desktop.
Save pedrobrasileiro/60f2bd6cfb6eb99287d9 to your computer and use it in GitHub Desktop.
/*
Author: James Shrager (@jshrager)
Intended use: Appcelerator Titanium
Usage: http://www.LearningTitanium.com (@learningTi)
*/
var client_id = "YOUR_CLIENT_ID";
var client_secret = "YOUR_CLIENT_SECRET";
var redirectUri = 'http://YOUR_URL/foursquareCallback.php';
var ui = require('ui/ui');
var overlay = require('ui/overlayHUD');
/*
* ONCE YOU HAVE AN ACTIVE TOKEN YOU CAN CALL THE API FROM WITHIN THE APP AS FOLLOWS:
* var foursquare = require('services/fourSqAPI');
* foursquare.callAPI("GET","venues/search", "ll="+lastCoords+"&limit=30&intent=checkin&radius=500, onSuccess_venues, onError);
*/
exports.callAPI = function(method, route, params, success, error)
{
var xhr = Titanium.Network.createHTTPClient();
xhr.open(method, "https://api.foursquare.com/v2/" + route + "?" + params + "&client_id=" + client_id+"&client_secret="+client_secret+"&v=20111208&oauth_token="+Ti.App.Properties.getString('foursquareToken'));
xhr.onerror = function(e) {
if ( error ) {
/* CALL THE ERROR FUNCTION PASSED IN */
error(e);
}
};
xhr.onload = function(_xhr) {
/* IF THERE IS A SUCCESS CALLBACK FUNCTION THEN CALL IT */
if ( success ) {
try{
var response = JSON.parse(xhr.responseText);
if(response.meta.code == 200)
{
/* CALL THE SUCCESS FUNCTION PASSED IN */
success(response);
response = null;
}
else
{
/* CALL THE ERROR FUNCTION PASSED IN */
error();
}
}
catch(e)
{
/* CALL THE ERROR FUNCTION PASSED IN */
error();
}
}
};
xhr.send();
};
exports.authorize = function(_args) {
var win, webView;
function authorizeUICallback(e)
{
/*
* IF URL LOADED HAS #access_token THEN REDIRECT TO A SCRIPT TO CHECK IF USER IS REGISTERED
* SAVE ACCESS TOKEN TO LOCAL PROPERTY
* IF LOGIN OR REGISTER SCRIPT LOADED THEN USER SIGNUP / LOGIN FLOW IS COMPLETE:
* CLOSE WINDOW
* CLOSE NAV GROUP
* FIRE START APP FUNCTION IN CONTROLLER
*/
if (e.url.indexOf('#access_token') != -1)
{
var token = e.url.split("=")[1];
Ti.App.Properties.setString("foursquareToken",token);
/* call a script with token in URL - check DB for token - if token exists then user exists - call login.php, if not call register.php */
webView.url = "YOUR_URL.php?token="+token;
} else if (e.url.indexOf('#error') != -1) {
alert("We're sorry, something went wrong. Please try again.");
_args.navGroup.hide();
_args.navGroup.close(win);
_args.baseWindow.close();
} else if(e.url.indexOf("register.php") != -1 || e.url.indexOf("login.php") != -1)
{
/* HAS AUTHORIZED */
var userId = e.url.split("=")[1];
Ti.App.Properties.setString('userId',userId);
Ti.App.Properties.setBool("foursquareAuth", true);
_args.navGroup.hide();
_args.navGroup.close(win);
_args.navGroup.close(_args.mainWind);
_args.baseWindow.close();
Ti.App.fireEvent("GLOBALLISTENER", {"TYPE": "startApp"});
}
}
/*
* LOAD A WEBVIEW AND INITIALISE THE FOURSQUARE OUTH FLOW
* WHEN PAGES LOAD CHECK IF THEY ARE FROM YOUR URL OR FOURSQUARE - IF NOT THERE IS AN ERROR
* WHEN URL IS FOURSQUARECALLBACK THEN CALL AUTHORIZEUICALLBACK SCRIPT AND DISPLAY A LOADING INDICATOR
*/
function showAuthorizeUI(pUrl)
{
win = Ti.UI.createWindow({
modal:true,
navBarHidden: false,
barColor: '#c42026',
title: null,
backgroundColor: '#f1f1f1',
barImage: 'images/navBar.png'
});
webView = ui.webView({url: pUrl});
//Ti.API.debug('Setting:[' + Ti.UI.AUTODETECT_NONE + ']');
webView.addEventListener('load',
function(e) {
if (e.url.indexOf('http://YOUR_URL/') != -1 || e.url.indexOf('foursquare.com') != -1) {
Titanium.API.debug(e);
if (e.url.indexOf('foursquareCallback.php#') != -1 || e.url.indexOf('https://YOUR_URL/register.php') != -1 || e.url.indexOf('https://YOURURL/login.php') != -1)
{
if (e.url.indexOf('foursquareCallback.php#') != -1)
{
overlay.load('Checking Details...').show(win);
}
authorizeUICallback(e);
}
}
else
{
alert("We're sorry, something went wrong. Please try again.");
_args.navGroup.hide();
_args.navGroup.close(win);
_args.baseWindow.close();
}
});
win.add(webView);
_args.navGroup.open(win);
}
showAuthorizeUI(String.format('https://foursquare.com/oauth2/authenticate?response_type=token&client_id=%s&redirect_uri=%s',client_id,redirectUri));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment