Skip to content

Commit

Permalink
adding credentials method and using it throughout, adding missing oau…
Browse files Browse the repository at this point in the history
…th users methods and tests; beginning likes and comments classes
  • Loading branch information
mckelvey committed Apr 15, 2011
1 parent 6b5a0c8 commit 5ad624a
Show file tree
Hide file tree
Showing 19 changed files with 182 additions and 50 deletions.
18 changes: 1 addition & 17 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,4 @@

## Todo

1. Add new tests for variations of requests (optional parameters).

2. Create object.subscriptions list method that lists only subscriptions with a matching object.

3. Added /v1/geographies to the lib but tests fail; no idea how the ids work.

4. Add OAuth

5. Allow for a better response for OAuth.

6. Add tests for count param for:
/tags/#/recent/media (150)
/tags/search (100)
/users/search (100)
/locations/#/recent/media (150)
/locations/search (100)
/media/search (100)
Visit [PivotalTracker](https://www.pivotaltracker.com/projects/273809) for detail.
14 changes: 13 additions & 1 deletion lib/class.instagram.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ class InstagramAPI
client_secret: if process.env['CLIENT_SECRET']? then process.env['CLIENT_SECRET'] else 'CLIENT-SECRET'
callback_url: if process.env['CALLBACK_URL']? then process.env['CALLBACK_URL'] else 'CALLBACK-URL'
redirect_uri: if process.env['REDIRECT_URI']? then process.env['REDIRECT_URI'] else 'REDIRECT_URI'
access_token: if process.env['ACCESS_TOKEN']? then process.env['ACCESS_TOKEN'] else null
@_options =
host: 'api.instagram.com'
port: null
Expand All @@ -20,7 +21,7 @@ class InstagramAPI
'Accept': 'application/json'
'Content-Length': 0
}
for module in ['media', 'tags', 'users', 'locations', 'geographies', 'subscriptions', 'oauth']
for module in ['media', 'likes', 'comments', 'tags', 'users', 'locations', 'geographies', 'subscriptions', 'oauth']
moduleClass = require "./class.instagram.#{module}"
@[module] = new moduleClass @

Expand Down Expand Up @@ -83,6 +84,17 @@ class InstagramAPI
Shared Request Methods
###

_credentials: (params, require = null) ->
if require? and params[require]? or params['access_token']? or params['client_id']?
return params
if require isnt null and @_config[require]?
params[require] = @_config[require]
else if @_config['access_token']?
params['access_token'] = @_config['access_token']
else if @_config['client_id']?
params['client_id'] = @_config['client_id']
return params

_request: (params) ->
options = @_clone(@_options)
options['path'] = params['path'] if params['path']?
Expand Down
11 changes: 11 additions & 0 deletions lib/class.instagram.comments.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@

class InstagramComments
constructor: (parent) ->
@parent = parent

comments: (params) ->
credentials = @parent._credentials {}
params['path'] = "/#{@parent._api_version}/media/#{params['media_id']}/comments?#{@parent._to_querystring(credentials)}"
@parent._request params

module.exports = InstagramComments
16 changes: 16 additions & 0 deletions lib/class.instagram.comments.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
(function() {
var InstagramComments;
InstagramComments = (function() {
function InstagramComments(parent) {
this.parent = parent;
}
InstagramComments.prototype.comments = function(params) {
var credentials;
credentials = this.parent._credentials({});
params['path'] = "/" + this.parent._api_version + "/media/" + params['media_id'] + "/comments?" + (this.parent._to_querystring(credentials));
return this.parent._request(params);
};
return InstagramComments;
})();
module.exports = InstagramComments;
}).call(this);
21 changes: 19 additions & 2 deletions lib/class.instagram.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions lib/class.instagram.likes.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@

class InstagramLikes
constructor: (parent) ->
@parent = parent

likes: (params) ->
credentials = @parent._credentials {}
params['path'] = "/#{@parent._api_version}/media/#{params['media_id']}/likes?#{@parent._to_querystring(params)}"
@parent._request params

module.exports = InstagramLikes
16 changes: 16 additions & 0 deletions lib/class.instagram.likes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
(function() {
var InstagramLikes;
InstagramLikes = (function() {
function InstagramLikes(parent) {
this.parent = parent;
}
InstagramLikes.prototype.likes = function(params) {
var credentials;
credentials = this.parent._credentials({});
params['path'] = "/" + this.parent._api_version + "/media/" + params['media_id'] + "/likes?" + (this.parent._to_querystring(params));
return this.parent._request(params);
};
return InstagramLikes;
})();
module.exports = InstagramLikes;
}).call(this);
7 changes: 4 additions & 3 deletions lib/class.instagram.locations.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@ class InstagramLocations
@parent = parent

info: (params) ->
params['path'] = "/#{@parent._api_version}/locations/#{params['location_id']}?client_id=#{@parent._config.client_id}"
credentials = @parent._credentials {}
params['path'] = "/#{@parent._api_version}/locations/#{params['location_id']}?#{@parent._to_querystring(credentials)}"
@parent._request params

recent: (params) ->
params['client_id'] = @parent._config.client_id
params = @parent._credentials params
params['path'] = "/#{@parent._api_version}/locations/#{params['location_id']}/media/recent?#{@parent._to_querystring(params)}"
@parent._request params

search: (params) ->
params['client_id'] = @parent._config.client_id
params = @parent._credentials params
params['path'] = "/#{@parent._api_version}/locations/search?#{@parent._to_querystring(params)}"
@parent._request params

Expand Down
8 changes: 5 additions & 3 deletions lib/class.instagram.locations.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,18 @@
this.parent = parent;
}
InstagramLocations.prototype.info = function(params) {
params['path'] = "/" + this.parent._api_version + "/locations/" + params['location_id'] + "?client_id=" + this.parent._config.client_id;
var credentials;
credentials = this.parent._credentials({});
params['path'] = "/" + this.parent._api_version + "/locations/" + params['location_id'] + "?" + (this.parent._to_querystring(credentials));
return this.parent._request(params);
};
InstagramLocations.prototype.recent = function(params) {
params['client_id'] = this.parent._config.client_id;
params = this.parent._credentials(params);
params['path'] = "/" + this.parent._api_version + "/locations/" + params['location_id'] + "/media/recent?" + (this.parent._to_querystring(params));
return this.parent._request(params);
};
InstagramLocations.prototype.search = function(params) {
params['client_id'] = this.parent._config.client_id;
params = this.parent._credentials(params);
params['path'] = "/" + this.parent._api_version + "/locations/search?" + (this.parent._to_querystring(params));
return this.parent._request(params);
};
Expand Down
14 changes: 9 additions & 5 deletions lib/class.instagram.media.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,28 @@ class InstagramMedia
@parent = parent

popular: (params) ->
params['path'] = "/#{@parent._api_version}/media/popular?client_id=#{@parent._config.client_id}"
credentials = @parent._credentials {}
params['path'] = "/#{@parent._api_version}/media/popular?#{@parent._to_querystring(credentials)}"
@parent._request params

info: (params) ->
params['path'] = "/#{@parent._api_version}/media/#{params['media_id']}?client_id=#{@parent._config.client_id}"
credentials = @parent._credentials {}
params['path'] = "/#{@parent._api_version}/media/#{params['media_id']}?#{@parent._to_querystring(credentials)}"
@parent._request params

search: (params) ->
params['client_id'] = @parent._config.client_id
params = @parent._credentials params
params['path'] = "/#{@parent._api_version}/media/search?#{@parent._to_querystring(params)}"
@parent._request params

likes: (params) ->
params['path'] = "/#{@parent._api_version}/media/#{params['media_id']}/likes?client_id=#{@parent._config.client_id}"
credentials = @parent._credentials {}
params['path'] = "/#{@parent._api_version}/media/#{params['media_id']}/likes?#{@parent._to_querystring(credentials)}"
@parent._request params

comments: (params) ->
params['path'] = "/#{@parent._api_version}/media/#{params['media_id']}/comments?client_id=#{@parent._config.client_id}"
credentials = @parent._credentials {}
params['path'] = "/#{@parent._api_version}/media/#{params['media_id']}/comments?#{@parent._to_querystring(credentials)}"
@parent._request params

subscribe: (params) ->
Expand Down
18 changes: 13 additions & 5 deletions lib/class.instagram.media.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,32 @@
this.parent = parent;
}
InstagramMedia.prototype.popular = function(params) {
params['path'] = "/" + this.parent._api_version + "/media/popular?client_id=" + this.parent._config.client_id;
var credentials;
credentials = this.parent._credentials({});
params['path'] = "/" + this.parent._api_version + "/media/popular?" + (this.parent._to_querystring(credentials));
return this.parent._request(params);
};
InstagramMedia.prototype.info = function(params) {
params['path'] = "/" + this.parent._api_version + "/media/" + params['media_id'] + "?client_id=" + this.parent._config.client_id;
var credentials;
credentials = this.parent._credentials({});
params['path'] = "/" + this.parent._api_version + "/media/" + params['media_id'] + "?" + (this.parent._to_querystring(credentials));
return this.parent._request(params);
};
InstagramMedia.prototype.search = function(params) {
params['client_id'] = this.parent._config.client_id;
params = this.parent._credentials(params);
params['path'] = "/" + this.parent._api_version + "/media/search?" + (this.parent._to_querystring(params));
return this.parent._request(params);
};
InstagramMedia.prototype.likes = function(params) {
params['path'] = "/" + this.parent._api_version + "/media/" + params['media_id'] + "/likes?client_id=" + this.parent._config.client_id;
var credentials;
credentials = this.parent._credentials({});
params['path'] = "/" + this.parent._api_version + "/media/" + params['media_id'] + "/likes?" + (this.parent._to_querystring(credentials));
return this.parent._request(params);
};
InstagramMedia.prototype.comments = function(params) {
params['path'] = "/" + this.parent._api_version + "/media/" + params['media_id'] + "/comments?client_id=" + this.parent._config.client_id;
var credentials;
credentials = this.parent._credentials({});
params['path'] = "/" + this.parent._api_version + "/media/" + params['media_id'] + "/comments?" + (this.parent._to_querystring(credentials));
return this.parent._request(params);
};
InstagramMedia.prototype.subscribe = function(params) {
Expand Down
7 changes: 4 additions & 3 deletions lib/class.instagram.tags.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@ class InstagramTags
@parent = parent

info: (params) ->
params['path'] = "/#{@parent._api_version}/tags/#{params['name']}?client_id=#{@parent._config.client_id}"
credentials = @parent._credentials {}
params['path'] = "/#{@parent._api_version}/tags/#{params['name']}?#{@parent._to_querystring(credentials)}"
@parent._request params

recent: (params) ->
params['client_id'] = @parent._config.client_id
params = @parent._credentials params
params['path'] = "/#{@parent._api_version}/tags/#{params['name']}/media/recent?#{@parent._to_querystring(params)}"
@parent._request params

search: (params) ->
params['client_id'] = @parent._config.client_id
params = @parent._credentials params
params['path'] = "/#{@parent._api_version}/tags/search?#{@parent._to_querystring(params)}"
@parent._request params

Expand Down
8 changes: 5 additions & 3 deletions lib/class.instagram.tags.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,18 @@
this.parent = parent;
}
InstagramTags.prototype.info = function(params) {
params['path'] = "/" + this.parent._api_version + "/tags/" + params['name'] + "?client_id=" + this.parent._config.client_id;
var credentials;
credentials = this.parent._credentials({});
params['path'] = "/" + this.parent._api_version + "/tags/" + params['name'] + "?" + (this.parent._to_querystring(credentials));
return this.parent._request(params);
};
InstagramTags.prototype.recent = function(params) {
params['client_id'] = this.parent._config.client_id;
params = this.parent._credentials(params);
params['path'] = "/" + this.parent._api_version + "/tags/" + params['name'] + "/media/recent?" + (this.parent._to_querystring(params));
return this.parent._request(params);
};
InstagramTags.prototype.search = function(params) {
params['client_id'] = this.parent._config.client_id;
params = this.parent._credentials(params);
params['path'] = "/" + this.parent._api_version + "/tags/search?" + (this.parent._to_querystring(params));
return this.parent._request(params);
};
Expand Down
15 changes: 13 additions & 2 deletions lib/class.instagram.users.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,22 @@ class InstagramUsers
@parent = parent

info: (params) ->
params['path'] = "/#{@parent._api_version}/users/#{params['user_id']}?client_id=#{@parent._config.client_id}"
credentials = @parent._credentials {}
params['path'] = "/#{@parent._api_version}/users/#{params['user_id']}?#{@parent._to_querystring(credentials)}"
@parent._request params

self: (params) ->
params = @parent._credentials params, 'access_token'
params['path'] = "/#{@parent._api_version}/users/self/feed?#{@parent._to_querystring(params)}"
@parent._request params

recent: (params) ->
params = @parent._credentials params, 'access_token'
params['path'] = "/#{@parent._api_version}/users/#{params['user_id']}/media/recent?#{@parent._to_querystring(params)}"
@parent._request params

search: (params) ->
params['client_id'] = @parent._config.client_id
params = @parent._credentials params
params['path'] = "/#{@parent._api_version}/users/search?#{@parent._to_querystring(params)}"
@parent._request params

Expand Down
16 changes: 14 additions & 2 deletions lib/class.instagram.users.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,23 @@
this.parent = parent;
}
InstagramUsers.prototype.info = function(params) {
params['path'] = "/" + this.parent._api_version + "/users/" + params['user_id'] + "?client_id=" + this.parent._config.client_id;
var credentials;
credentials = this.parent._credentials({});
params['path'] = "/" + this.parent._api_version + "/users/" + params['user_id'] + "?" + (this.parent._to_querystring(credentials));
return this.parent._request(params);
};
InstagramUsers.prototype.self = function(params) {
params = this.parent._credentials(params, 'access_token');
params['path'] = "/" + this.parent._api_version + "/users/self/feed?" + (this.parent._to_querystring(params));
return this.parent._request(params);
};
InstagramUsers.prototype.recent = function(params) {
params = this.parent._credentials(params, 'access_token');
params['path'] = "/" + this.parent._api_version + "/users/" + params['user_id'] + "/media/recent?" + (this.parent._to_querystring(params));
return this.parent._request(params);
};
InstagramUsers.prototype.search = function(params) {
params['client_id'] = this.parent._config.client_id;
params = this.parent._credentials(params);
params['path'] = "/" + this.parent._api_version + "/users/search?" + (this.parent._to_querystring(params));
return this.parent._request(params);
};
Expand Down
3 changes: 1 addition & 2 deletions test/instagram.locations.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ module.exports =
data.length.should.be.above 0
data[0].should.have.property 'id'
pagination.should.have.property 'next_url'
pagination.should.have.property 'next_max_id'
pagination.should.have.property 'next_min_id'
pagination.should.have.property 'next_max_id' or pagination.should.have.property 'next_min_id'
'locations#search for 48.858844300000001/2.2943506': ->
test_helper 'locations#search for 48.858844300000001/2.2943506', Instagram, 'locations', 'search', { lat: 48.858844300000001, lng: 2.2943506 }, (data) ->
data.length.should.be.above 0
Expand Down
3 changes: 1 addition & 2 deletions test/instagram.locations.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@
data.length.should.be.above(0);
data[0].should.have.property('id');
pagination.should.have.property('next_url');
pagination.should.have.property('next_max_id');
return pagination.should.have.property('next_min_id');
return pagination.should.have.property('next_max_id' || pagination.should.have.property('next_min_id'));
});
},
'locations#search for 48.858844300000001/2.2943506': function() {
Expand Down
Loading

0 comments on commit 5ad624a

Please sign in to comment.