Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit b2df507
Showing
62 changed files
with
5,672 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
Quova API Demo App | ||
----------------------------------- | ||
Created lovingly for the developer community by Mashery. | ||
|
||
[http://www.mashery.com](http://www.mashery.com) | ||
|
||
[http://developer.mashery.com](http://developer.mashery.com) | ||
|
||
SYNOPSIS | ||
----------------------------------- | ||
|
||
This demo App provides a way to see the Quova API in action. It's built using appMobi's Cross Platform Development Kit (XDK) that lets you create mobile apps for smartphones and tablets using standard web languages (HTML5, CSS, and JavaScript). | ||
|
||
FEATURES | ||
----------------------------------- | ||
|
||
Uses Quova's API to retrieve the following information based on your IP address - | ||
1. City | ||
2. State | ||
3. Country | ||
4. Google Map plotting your current location | ||
|
||
|
||
GETTING STARTED | ||
----------------------------------- | ||
|
||
You will need the following to get started - | ||
|
||
1. appMobi's XDK. Free Download - http://www.appmobi.com/?q=node/27 | ||
2. A Quova API key (Register at http://developer.quova.com/member/register). | ||
|
||
OBTAINING THE API KEY | ||
----------------------------------- | ||
|
||
Before you can begin using this app, you will need to get an API key from Quova at http://developer.quova.com/member/register. This will also give you a Single Sign-On Mashery ID with access to hundreds of other APIs. | ||
|
||
|
||
SETTING UP THE API KEY IN THIS APP | ||
----------------------------------- | ||
|
||
Once you have obtained your API key and secret, assign the API key to the variable api_key on line 1 of the file quova.js, like so - | ||
|
||
<pre> | ||
var apikey ='your_api_key_here'; | ||
</pre> | ||
|
||
You will need to do the same for the API secret. | ||
|
||
ABOUT Quova API | ||
----------------------------------- | ||
|
||
Quova provides the MOST IP geolocation data available on the planet. And it’s the most accurate. Tap into the datasource and develop your own customized geolocation apps. Learn more about the Quova API at http://developer.quova.com | ||
|
||
|
||
QUOVA API DOCUMENTATION | ||
----------------------------------- | ||
|
||
To learn more about the data set provided by Quova's API, you can read through the API documentation at http://developer.quova.com/iodocs | ||
|
||
|
||
ABOUT MASHERY API Network | ||
----------------------------------- | ||
This app is built using the Quova API, part of the Mashery API Network. The Mashery API Network gives you access to hundreds of APIs with single sign-on (SSO) access. When you sign in at http://developer.mashery.com, access and manage all of your applications and API keys in one central location. | ||
|
||
|
||
EXPLORE MORE APIs | ||
----------------------------------- | ||
Check out Mashery's API Network at http://developer.mashery.com/apis to explore other awesome APIs including NY Times, Klout, USA Today, Rotten Tomatoes and many more. | ||
|
||
|
||
SUPPORT | ||
======= | ||
If you have any questions or need any help obtaining an API key, you can reach out to us at: developer-relations@mashery.com |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,186 @@ | ||
/* xhr.js | ||
* This overrides the XMLHTTPRequest object to allow cross domain ajax requests | ||
*/ | ||
(function () { | ||
document.addEventListener("appMobi.device.remote.data", getRemoteExtCB, false); | ||
var ajaxCallbacks = []; | ||
|
||
function getRemoteExtCB(obj) { | ||
if (ajaxCallbacks.length > 0 && ajaxCallbacks[obj.id]) { | ||
ajaxCallbacks[obj.id](obj); | ||
} | ||
} | ||
|
||
XMLHttpRequest_Native = XMLHttpRequest; | ||
XMLHttpRequest.Extension = new Object; | ||
|
||
XMLHttpRequest.Extension.addObject = function (object) { | ||
uniqueId = Math.floor(Math.random() * 99999999); | ||
object.uniqueId = uniqueId; | ||
this[uniqueId] = object; | ||
return uniqueId; | ||
} | ||
|
||
XMLHttpRequest.Extension.sendXMLHTTP = function (data) { | ||
var myparams = new AppMobi.Device.RemoteDataParameters(); | ||
for (var j in data.headers) { | ||
myparams.addHeader(j, data.headers[j]); | ||
} | ||
|
||
myparams.url = data.requestData.URL; | ||
myparams.id = data.uniqueId; | ||
myparams.method = data.requestData.method | ||
myparams.body = data.body; | ||
try{ | ||
if(typeof myparams.body=="object"){ | ||
myparams.body=JSON.stringify(myparams.body); | ||
} | ||
ajaxCallbacks[myparams.id] = this.handleResponseData; | ||
AppMobi.device.getRemoteDataExt(myparams); | ||
} | ||
catch(e){} | ||
} | ||
|
||
XMLHttpRequest.Extension.handleResponseData = function (object) { | ||
|
||
var XMLObj = XMLHttpRequest.Extension[object.id]; | ||
//EMULATED "HEADERS RECEIVED" CHANGES | ||
var newHeaders = []; | ||
for (var j in object.extras.headers) { | ||
newHeaders[j.toLowerCase()] = object.extras.headers[j]; //jQuery looks for lowercase | ||
newHeaders[j] = object.extras.headers[j]; | ||
} | ||
XMLObj.responseData.headers = newHeaders; | ||
XMLObj.readyState = XMLObj.HEADERS_RECEIVED; | ||
if (typeof XMLObj.onreadystatechange == 'function') XMLObj.onreadystatechange(); | ||
|
||
XMLObj.readyState = XMLObj.LOADING; | ||
if (typeof XMLObj.onreadystatechange == 'function') XMLObj.onreadystatechange(); | ||
|
||
XMLObj.response = object.response; | ||
XMLObj.status = object.extras.status; | ||
XMLObj.responseText = object.response; | ||
XMLObj.responseXML = object.response; | ||
XMLObj.readyState = XMLObj.DONE; | ||
|
||
if (typeof XMLObj.onreadystatechange == 'function') XMLObj.onreadystatechange(); | ||
} | ||
|
||
|
||
// XMLHTTP REDEFINE | ||
//======================================================================================================================= | ||
//DEFINE "CONSTANTS" FOR CONSTRUCTOR | ||
XMLHttpRequest.UNSENT = 0; //const | ||
XMLHttpRequest.OPENED = 1; //const | ||
XMLHttpRequest.HEADERS_RECEIVED = 2; //const | ||
XMLHttpRequest.LOADING = 3; //const | ||
XMLHttpRequest.DONE = 4; //const | ||
|
||
//DEFINE "CONSTANTS" PROTOTYPE | ||
XMLHttpRequest.prototype.UNSENT = 0; //const | ||
XMLHttpRequest.prototype.OPENED = 1; //const | ||
XMLHttpRequest.prototype.HEADERS_RECEIVED = 2; //const | ||
XMLHttpRequest.prototype.LOADING = 3; //const | ||
XMLHttpRequest.prototype.DONE = 4; //const | ||
//XMLHttpRequest = {readyState:0 }; | ||
XMLHttpRequest.prototype.open; | ||
XMLHttpRequest.prototype.readyState = 0; | ||
XMLHttpRequest.prototype.onreadystatechange; | ||
XMLHttpRequest.prototype.headers = {}; | ||
XMLHttpRequest.prototype.body = ""; | ||
|
||
|
||
|
||
XMLHttpRequest.prototype.requestData = { | ||
'method': null, | ||
'URL': null, | ||
'asynchronous': true, | ||
'username': null, | ||
'password': null, | ||
'headers': null | ||
}; | ||
XMLHttpRequest.prototype.responseData = { | ||
'headers': null | ||
}; | ||
|
||
|
||
XMLHttpRequest.prototype.abort = function abort() {}; | ||
XMLHttpRequest.prototype.addEventListener = function addEventListener() {}; | ||
XMLHttpRequest.prototype.constructor = function XMLHttpRequest() {}; | ||
XMLHttpRequest.prototype.dispatchEvent = function dispatchEvent() {}; | ||
|
||
XMLHttpRequest.prototype.getAllResponseHeaders = function getAllResponseHeaders() { | ||
if (this.readyState == this.OPENED || this.readyState == this.UNSENT) return ""; | ||
else { | ||
return this.responseData.headers; | ||
} | ||
}; | ||
|
||
XMLHttpRequest.prototype.getResponseHeader = function getResponseHeader(header) { | ||
return this.responseData.headers && this.responseData.headers[header] ? this.responseData.headers[header] : ""; | ||
}; | ||
|
||
XMLHttpRequest.prototype.open = function (method, url, async, user, password) { | ||
//supported methods: CONNECT, DELETE, GET, HEAD, OPTIONS, POST, PUT, TRACE, or TRACK | ||
/* Empty the list of author request headers. | ||
Set the request method to method. | ||
Set the request URL to url. | ||
Set the request username to temp user. | ||
Set the request password to temp password. | ||
Set the asynchronous flag to the value of async. | ||
*/ | ||
this.requestData.method = method; | ||
this.requestData.URL = url; | ||
this.requestData.asynchronous = async; | ||
this.requestData.user = user; | ||
this.requestData.password = password; | ||
this.readyState = this.OPENED; | ||
if (typeof this.onreadystatechange == 'function') this.onreadystatechange(); | ||
|
||
} | ||
|
||
XMLHttpRequest.prototype.overrideMimeType = function overrideMimeType() {}; | ||
XMLHttpRequest.prototype.removeEventListener = function removeEventListener() {}; | ||
|
||
XMLHttpRequest.prototype.send = function send(data) { | ||
this.body = data; | ||
if(this.requestData.asynchronous===false) | ||
{ | ||
throw ("Synchronous XMLHtppRequest calls are not allowed. Please change your request to be asynchronous"); | ||
return; | ||
} | ||
XMLHttpRequest.Extension.sendXMLHTTP(this); | ||
}; | ||
|
||
XMLHttpRequest.prototype.setRequestHeader = function setRequestHeader(header, value) { | ||
this.headers[header] = value; | ||
}; | ||
|
||
|
||
function XMLHttpRequest() { | ||
XMLHttpRequest.Extension.addObject(this); | ||
this.onabort = null; | ||
this.onerror = null; | ||
this.onload = null; | ||
this.onloadstart = null; | ||
this.onprogress = null; | ||
this.onreadystatechange = null; | ||
this.readyState = 0; | ||
this.response = ""; | ||
this.responseText = ""; | ||
this.responseType = ""; | ||
this.responseXML = null; | ||
this.status = 0; | ||
this.statusText = ""; | ||
this.withCredentials = false; | ||
this.requestData = { | ||
'method': null, | ||
'URL': null, | ||
'asynchronous': null, | ||
'username': null, | ||
'password': null, | ||
'headers': null | ||
}; | ||
} | ||
window.XMLHttpRequest = XMLHttpRequest; | ||
})(); |
Oops, something went wrong.