{"_id":"instagram-node-lib","_rev":"24-881f29d16c068b5f1f967fc0f0921541","name":"instagram-node-lib","description":"This package is a wrapper for the Instagram API.","dist-tags":{"latest":"0.1.1"},"versions":{"0.0.1":{"name":"instagram-node-lib","description":"This package is a basic wrapper for the Instagram API.","version":"0.0.1","author":{"name":"David W. McKelvey","email":"david@mckelveycreative.com","url":"http://david.mckelveycreative.com/"},"contributors":[],"keywords":["instagram","api","lib"],"main":"./lib/class.instagram.js","engines":{"node":">= 0.4.5"},"directories":{"lib":"./lib"},"files":[""],"homepage":"https://github.com/mckelvey/instagram-node-lib","repository":{"type":"git","url":"git://github.com/mckelvey/instagram-node-lib.git"},"scripts":{"test":"expresso ./test/instagram.js"},"_id":"instagram-node-lib@0.0.1","_engineSupported":true,"_npmVersion":"0.3.18","_nodeVersion":"v0.4.5","_defaultsLoaded":true,"dist":{"shasum":"f1bcfa06d78ae9ad9e317af5e0c858a225bc24c0","tarball":"https://registry.npmjs.org/instagram-node-lib/-/instagram-node-lib-0.0.1.tgz","integrity":"sha512-NpvFlboupDPGuTWYA+3vH2ju7KoQXIJbC417nm5gXEk3NeVJ+OkLzvkS+rUx64bnzRbbTD/8tQH51wjeNzud2g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCC+yVm/jwnILpBxPLTQ38yL9nUDJ3mQgPfxHRrlzotDAIhALxGjMFoOe0yZS6ruUEPG8K0QeNVWIuWM49ageRa/g7q"}]}},"0.0.2":{"name":"instagram-node-lib","description":"This package is a wrapper for the Instagram API.","version":"0.0.2","author":{"name":"David W. McKelvey","email":"david@mckelveycreative.com","url":"http://david.mckelveycreative.com/"},"contributors":[],"keywords":["instagram","api","lib"],"main":"./lib/class.instagram.js","engines":{"node":">= 0.4.5"},"directories":{"lib":"./lib"},"files":[""],"homepage":"https://github.com/mckelvey/instagram-node-lib","repository":{"type":"git","url":"git://github.com/mckelvey/instagram-node-lib.git"},"scripts":{"test locations":"expresso ./test/instagram.locations.js","test media":"expresso ./test/instagram.media.js","test tags":"expresso ./test/instagram.tags.js","test users":"expresso ./test/instagram.users.js","test subscriptions":"expresso ./test/instagram.subscriptions.js"},"_id":"instagram-node-lib@0.0.2","_engineSupported":true,"_npmVersion":"0.3.18","_nodeVersion":"v0.4.5","_defaultsLoaded":true,"dist":{"shasum":"5e773b78aa08b5e3965d082796b647de254bcfe3","tarball":"https://registry.npmjs.org/instagram-node-lib/-/instagram-node-lib-0.0.2.tgz","integrity":"sha512-kiHN3mCqi0jeDfNR4JT97ihQoasR+ZKLiflZGipMzI+jUfIUbXaq309btXHDXHuyEhwa8QEjB/EQ7NoZi9KT+w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHv7Q7jki9gNevSTyed7tW6fd1WfLJ2SfcHft30D7vMRAiB4X9FUwhG9Y5oVHuJ2vp5dcbZq1Mp0DsOieb1ybYrOzA=="}]}},"0.0.3":{"name":"instagram-node-lib","description":"This package is a wrapper for the Instagram API.","version":"0.0.3","author":{"name":"David W. McKelvey","email":"david@mckelveycreative.com","url":"http://david.mckelveycreative.com/"},"contributors":[],"keywords":["instagram","api","lib"],"main":"./lib/class.instagram.js","engines":{"node":">= 0.4.5"},"directories":{"lib":"./lib"},"files":[""],"homepage":"https://github.com/mckelvey/instagram-node-lib","repository":{"type":"git","url":"git://github.com/mckelvey/instagram-node-lib.git"},"scripts":{"test locations":"expresso ./test/instagram.locations.js","test media":"expresso ./test/instagram.media.js","test tags":"expresso ./test/instagram.tags.js","test users":"expresso ./test/instagram.users.js","test subscriptions":"expresso ./test/instagram.subscriptions.js"},"_id":"instagram-node-lib@0.0.3","_engineSupported":true,"_npmVersion":"0.3.18","_nodeVersion":"v0.4.5","_defaultsLoaded":true,"dist":{"shasum":"feff36c843bc17d697c97f7fbcb9c983361d1f5c","tarball":"https://registry.npmjs.org/instagram-node-lib/-/instagram-node-lib-0.0.3.tgz","integrity":"sha512-IhhhcqhOCxjr7sgGdm3N1p+AhO2JdePFWagw152m6h1fMDVWBJqpgH7HIAVptkFuWA2OLxhVj9tP/vvnuK9nSQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8K557C8lTc+BNfjg4y9WHd5vvq//CsHKVKhw7CaO0JQIhAMk33ITYrWPMQW4wforyWuG10vOi0P0LUNKU72QxaNWc"}]}},"0.0.4":{"name":"instagram-node-lib","description":"This package is a wrapper for the Instagram API.","version":"0.0.4","author":{"name":"David W. McKelvey","email":"david@mckelveycreative.com","url":"http://david.mckelveycreative.com/"},"contributors":[],"keywords":["instagram","api","lib"],"main":"./lib/class.instagram.js","engines":{"node":">= 0.4.5"},"directories":{"lib":"./lib"},"files":[""],"homepage":"https://github.com/mckelvey/instagram-node-lib","repository":{"type":"git","url":"git://github.com/mckelvey/instagram-node-lib.git"},"scripts":{"test locations":"expresso ./test/instagram.locations.js","test media":"expresso ./test/instagram.media.js","test tags":"expresso ./test/instagram.tags.js","test users":"expresso ./test/instagram.users.js","test subscriptions":"expresso ./test/instagram.subscriptions.js"},"_id":"instagram-node-lib@0.0.4","_engineSupported":true,"_npmVersion":"0.3.18","_nodeVersion":"v0.4.5","_defaultsLoaded":true,"dist":{"shasum":"9f06960310d2684e5b6af00309137a00b11ce0a9","tarball":"https://registry.npmjs.org/instagram-node-lib/-/instagram-node-lib-0.0.4.tgz","integrity":"sha512-bdk8l1zJGygBvYEQmSHNXlF9py7SGPdyeNI7Sy6oFm2YjF9pntr6gXUJf7yO3sYYRdBmJ+2XKP82wf5wXofbEg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE8L9gwXaWBa4KcDLFwp8TAGHyugs3VOIuyg5/ZAPa9tAiAioxcpB6Z/aWDlnSOA5NUgSfoL1Nxc+85ePPeV7EDDXw=="}]}},"0.0.5":{"name":"instagram-node-lib","description":"This package is a wrapper for the Instagram API.","version":"0.0.5","author":{"name":"David W. McKelvey","email":"david@mckelveycreative.com","url":"http://david.mckelveycreative.com/"},"contributors":[],"keywords":["instagram","api","lib"],"main":"./lib/class.instagram.js","engines":{"node":">= 0.4.5"},"directories":{"lib":"./lib"},"files":[""],"homepage":"https://github.com/mckelvey/instagram-node-lib","repository":{"type":"git","url":"git://github.com/mckelvey/instagram-node-lib.git"},"scripts":{"test geographies":"expresso ./test/instagram.geographies.js","test locations":"expresso ./test/instagram.locations.js","test media":"expresso ./test/instagram.media.js","test tags":"expresso ./test/instagram.tags.js","test users":"expresso ./test/instagram.users.js","test subscriptions":"expresso ./test/instagram.subscriptions.js"},"_id":"instagram-node-lib@0.0.5","_engineSupported":true,"_npmVersion":"0.3.18","_nodeVersion":"v0.4.5","_defaultsLoaded":true,"dist":{"shasum":"d2478f464fbce1e5ff69787d2e22ad14f9f47200","tarball":"https://registry.npmjs.org/instagram-node-lib/-/instagram-node-lib-0.0.5.tgz","integrity":"sha512-no4m+LEiMkmV7/XhuUMzjDab0hNoUvuoHZeprqaRsxywFOQFfPulb/K9wgqo103qD8lteuDOi7sTCHk2R/MxQg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCIbZAJ5zTL+OVVqAQvG2aiOBqSC8jTl+6xmOq8Gm1dmAIhAIcy+qVebl8cfiZopfyTa3ywGYyOuDedmcYKDGVs4Dwf"}]}},"0.0.7":{"name":"instagram-node-lib","description":"This package is a wrapper for the Instagram API.","version":"0.0.7","author":{"name":"David W. McKelvey","email":"david@mckelveycreative.com","url":"http://david.mckelveycreative.com/"},"contributors":[],"keywords":["instagram","api","lib"],"main":"./lib/class.instagram.js","engines":{"node":">= 0.4.5"},"directories":{"lib":"./lib"},"files":[""],"homepage":"https://github.com/mckelvey/instagram-node-lib","repository":{"type":"git","url":"git://github.com/mckelvey/instagram-node-lib.git"},"scripts":{"test set":"expresso ./test/instagram.js","test geographies":"expresso ./test/instagram.geographies.js","test locations":"expresso ./test/instagram.locations.js","test media":"expresso ./test/instagram.media.js","test tags":"expresso ./test/instagram.tags.js","test users":"expresso ./test/instagram.users.js","test subscriptions":"expresso ./test/instagram.subscriptions.js","test oauth":"expresso ./test/instagram.oauth.js"},"_id":"instagram-node-lib@0.0.7","_engineSupported":true,"_npmVersion":"0.3.18","_nodeVersion":"v0.5.0-pre","_defaultsLoaded":true,"dist":{"shasum":"f4b016ed1570c235b5a1562e0b6d3ff733e0821a","tarball":"https://registry.npmjs.org/instagram-node-lib/-/instagram-node-lib-0.0.7.tgz","integrity":"sha512-0TKthul1IqAHCJ/pDYwujixL71KVRbt+9W0yxCMoqy9AJdJZFwlv97Di66TrjlfMLyhLqEonkcyaWuUE4OUCJg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRlzazTVamZRBFC+BQGTbZ2k2gWPjk7/vVIyZOjd93tAIgDRJl9znDTQ5oiYzXmhuTXH0QbZY1mF96VVJ2XxDU7wE="}]}},"0.0.8":{"name":"instagram-node-lib","description":"This package is a wrapper for the Instagram API.","version":"0.0.8","author":{"name":"David W. McKelvey","email":"david@mckelveycreative.com","url":"http://david.mckelveycreative.com/"},"contributors":[],"keywords":["instagram","api","lib"],"main":"./lib/class.instagram.js","engines":{"node":">= 0.4.5"},"directories":{"lib":"./lib"},"files":[""],"homepage":"https://github.com/mckelvey/instagram-node-lib","repository":{"type":"git","url":"git://github.com/mckelvey/instagram-node-lib.git"},"scripts":{"test set":"expresso ./test/instagram.js","test geographies":"expresso ./test/instagram.geographies.js","test locations":"expresso ./test/instagram.locations.js","test media":"expresso ./test/instagram.media.js","test tags":"expresso ./test/instagram.tags.js","test users":"expresso ./test/instagram.users.js","test subscriptions":"expresso ./test/instagram.subscriptions.js","test oauth":"expresso ./test/instagram.oauth.js"},"_npmUser":{"name":"mckelvey","email":"david@mckelveycreative.com"},"_id":"instagram-node-lib@0.0.8","dependencies":{},"devDependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.9","_defaultsLoaded":true,"dist":{"shasum":"2f655945b0e704af9206b3025cac1999fbbf9680","tarball":"https://registry.npmjs.org/instagram-node-lib/-/instagram-node-lib-0.0.8.tgz","integrity":"sha512-96L4cCOYnPjhIPcALYB7R+rNDqbXk52K4NnWaulknimQs5OPtgXK8S7hSuFN1BGzz3+SyRhf/ot8Z+Nn6D4evw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCN6VsPeDiHLjpTreLU/plWTpUO2H4NTjtW4PIPtD7uFgIhAL4WxVCMpMf5HZ1km13WZDyu3g9B9k3IDfb7ugpjuNmN"}]},"readme":"## What It Is\n\nThe Instagram Node Lib is a helper library for [node](http://nodejs.org) that makes communicating with the [Instagram API](http://instagram.com/developer/) easy.\n\n## Simple Example\n\nFollowing is an example that loads the library, sets my CLIENT_ID and CLIENT_SECRET for accessing the API and makes a simple call to get information on the tag `#blue`.\n\n    Instagram = require('instagram-node-lib');\n\n    Instagram.set('client_id', 'YOUR-CLIENT-ID');\n    Instagram.set('client_secret', 'YOUR-CLIENT-SECRET');\n\n    Instagram.tags.info({\n      name: 'blue',\n      complete: function(data){\n        console.log(data);\n      }\n    });\n\nWhen successful, the data logged in the console would be a javascript object like `{ media_count: 10863, name: 'blue' }`.\n\n## Installation\n\n    $ npm install instagram-node-lib\n\n## Setup\n\nTo use the library, you'll need to require it and at minimum, set your CLIENT_ID and CLIENT_SECRET given to you by Instagram.\n\n    Instagram = require('instagram-node-lib');\n\n    Instagram.set('client_id', 'YOUR-CLIENT-ID');\n    Instagram.set('client_secret', 'YOUR-CLIENT-SECRET');\n\nOptionally, if you intend to use the real-time API to manage subscriptions, then you can also set a global callback url. (You may also provide/override the callback url when subscribing.)\n\n    Instagram.set('callback_url', 'CALLBACK-URL');\n\nIf you intend to use user-specific methods (e.g. relationships), then you must also set a global redirect_uri (matching that in your [app settings in the API](http://instagram.com/developer/manage/)).\n\n    Instagram.set('redirect_uri', 'YOUR-REDIRECT-URI');\n\nLastly, if you find that the default max sockets of 5 is too few for the http(s) client, you can increase it as needed with the set method. The new max sockets value must be a positive integer greater than zero.\n\n    Instagram.set('maxSockets', 10);\n\n## Available Methods\n\nAll of the methods below follow a similar pattern. Each accepts a single javascript object with the needed parameters to complete the API call. Required parameters are shown below; refer to [the API docs](http://instagram.com/developer/endpoints/) for the optional parameters. All parameters are passed through to the request, so use the exact terms that the API docs provide.\n\nIn addition, the parameters object may include two functions, one of which will be executed at the conclusion of the request (i.e. `complete` and `error`).\n\n    {\n      name: 'blue',\n      complete: function(data, pagination){\n          // data is a javascript object/array/null matching that shipped Instagram\n          // when available (mostly /recent), pagination is a javascript object with the pagination information\n        },\n      error: function(errorMessage, errorObject, caller){\n          // errorMessage is the raised error message\n          // errorObject is either the object that caused the issue, or the nearest neighbor\n          // caller is the method in which the error occurred\n        }\n    }\n\nIn the event you do not provide a `complete` or `error` function, the library has fallback functions which post results to the console log.\n\n### Media\n\nThe following media methods are available. Required parameters are shown below, see the [Instagram API docs](http://instagram.com/developer/endpoints/media/) for the optional parameters.\n\n#### Popular\n\nGet the a set of 32 current popular media, each with all it's associated likes and comments.\n\n    Instagram.media.popular();\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Info\n\nGet the metadata for a single media item by media id.\n\n    Instagram.media.info({ media_id: 3 });\n      ->  { media object }\n\n#### Search\n\nWith a latitude and longitude (and an optional distance), find nearby media by geography.\n\n    Instagram.media.search({ lat: 48.858844300000001, lng: 2.2943506 });\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Likes\n\nAkin to an info request, this method only returns an array of likers for the media.\n\n    Instagram.media.likes({ media_id: 3 });\n      ->  [ { username: 'krisrak',\n              profile_picture: 'http://profile/path.jpg',\n              id: '#',\n              full_name: 'Rak Kris' },\n            { username: 'mikeyk',\n              profile_picture: 'http://profile/path.jpg',\n              id: '#',\n              full_name: 'Mike Krieger' } ]\n\nUsing an `access_token`, you can have the token user like or unlike a media item.\n\n    Instagram.media.like({ media_id: 3 });\n      ->  null // null is success, an error is failure\n\n    Instagram.media.unlike({ media_id: 3 });\n      ->  null // null is success, an error is failure\n\n#### Comments\n\nAkin to an info request, this method only returns an array of comments on the media.\n\n    Instagram.media.comments({ media_id: 3 });\n      ->  [ { created_time: '1279306830',\n              text: 'Love the sign here',\n              from: \n               { username: 'mikeyk',\n                 profile_picture: 'http://profile/path.jpg',\n                 id: '#',\n                 full_name: 'Mike Krieger' },\n              id: '8' },\n            { created_time: '1279315804',\n              text: 'Chilako taco',\n              from: \n               { username: 'kevin',\n                 profile_picture: 'http://profile/path.jpg',\n                 id: '#',\n                 full_name: 'Kevin Systrom' },\n              id: '3' } ]\n\nUsing an `access_token`, you can have the token user comment upon or delete their comment from a media item.\n\n    Instagram.media.comment({ media_id: 3, text: 'Instagame was here.' });\n      ->  { created_time: '1302926497',\n            text: 'Instagame was here.',\n            from:\n              { username: 'instagame',\n                profile_picture: 'http://profile/path.jpg',\n                id: '#',\n                full_name: '' },\n            id: '67236858' }\n\n    Instagram.media.uncomment({ media_id: 3, comment_id: 67236858 });\n      ->  null // null is success, an error is failure\n\n#### Subscriptions\n\nGeography subscriptions for media are also available with the following methods. A `callback_url` is required if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back. Note that while `unsubscribe` is identical to the generic subscriptions method below, here, `unsubscribe_all` only removes geography subscriptions.\n\n    Instagram.media.subscribe({ lat: 48.858844300000001, lng: 2.2943506, radius: 1000 });\n      ->  { object: 'geography',\n            object_id: '#',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n    Instagram.media.unsubscribe({ id: # });\n      ->  null // null is success, an error is failure\n\n    Instagram.media.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n### Tags\n\nThe following tag methods are available. Required parameters are shown below, see the [Instagram API docs](http://instagram.com/developer/endpoints/tags/) for the optional parameters.\n\n#### Info\n\nGet the metadata for a single tag by name.\n\n    Instagram.tags.info({ name: 'blue' });\n      ->  { media_count: 10863, name: 'blue' }\n\n#### Recent\n\nGet an array of media that have been tagged with the tag recently. \n\n    Instagram.tags.recent({ name: 'blue' });\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Search\n\nSearch for matching tags by name (q).\n\n    Instagram.tags.search({ q: 'blue' });\n      ->  [ { media_count: 10872, name: 'blue' },\n            { media_count: 931, name: 'bluesky' },\n            { media_count: 178, name: 'blueeyes' }, ... ]\n\n#### Subscriptions\n\nTag subscriptions are also available with the following methods. A `callback_url` is required if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back. Note that while `unsubscribe` is identical to the generic subscriptions method below, here, `unsubscribe_all` only removes tag subscriptions.\n\n    Instagram.tags.subscribe({ object_id: 'blue' });\n      ->  { object: 'tag',\n            object_id: 'blue',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n    Instagram.tags.unsubscribe({ id: # });\n      ->  null // null is success, an error is failure\n\n    Instagram.tags.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n### Locations\n\nThe following location methods are available. Required parameters are shown below, see the [Instagram API docs](http://instagram.com/developer/endpoints/locations/) for the optional parameters.\n\n#### Info\n\nGet the metadata for a single location by location id.\n\n    Instagram.locations.info({ location_id: 1 });\n      ->  { latitude: 37.78265474565738,\n            id: '1',\n            longitude: -122.387866973877,\n            name: 'Dogpatch Labs' }\n\n#### Recent\n\nGet an array of media that have been located with the matching location (by id) recently.\n\n    Instagram.locations.recent({ location_id: 1 });\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Search\n\nWith a latitude and longitude (and an optional distance), find nearby locations by geography.\n\n    Instagram.locations.search({ lat: 48.858844300000001, lng: 2.2943506 });\n      ->  [ { latitude: 48.8588443,\n              id: '723695',\n              longitude: 2.2943506,\n              name: 'Restaurant Jules Verne' },\n            { latitude: 48.8588443,\n              id: '788029',\n              longitude: 2.2943506,\n              name: 'Eiffel Tower, Paris' },\n            { latitude: 48.858543,\n              id: '1894075',\n              longitude: 2.2938285,\n              name: 'Caf� de l\\'homme' }, ... ]\n\n#### Subscriptions\n\nLocation subscriptions are also available with the following methods. A `callback_url` is required when subscribing if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back. Note that while `unsubscribe` is identical to the generic subscriptions method below, here, `unsubscribe_all` only removes location subscriptions.\n\n    Instagram.locations.subscribe({ object_id: '1257285' });\n      ->  { object: 'location',\n            object_id: '1257285',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n    Instagram.locations.unsubscribe({ id: # });\n      ->  null // null is success, an error is failure\n\n    Instagram.locations.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n### Users\n\nThe following user methods are available. Required parameters are shown below, see the [Instagram API docs](http://instagram.com/developer/endpoints/users/) for the optional parameters.\n\n#### Info\n\nGet the metadata for a single user by user id.\n\n    Instagram.users.info({ user_id: 291024 });\n      ->  { username: 'mckelvey',\n            counts: { media: 526, followed_by: 293, follows: 265 },\n            profile_picture: 'http://profile/path.jpg',\n            id: '291024',\n            full_name: 'David McKelvey' }\n\n#### Search\n\nSearch for matching users by name (q).\n\n    Instagram.users.search({ q: 'mckelvey' });\n      ->  [ { username: 'mckelvey',\n              profile_picture: 'http://profile/path.jpg',\n              id: '291024',\n              full_name: 'David McKelvey' }, ... ]\n\n#### Self\n\nGet the user media feed for the `access_token` supplied. This method obviously then requires `access_token` rather than simply `client_id`; see the OAuth section on obtaining an `access_token`. You can either supply it here or set it within the library.\n\n    Instagram.users.self();\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Liked by Self\n\nGet the media that has been liked by the user for the `access_token` supplied. This method obviously then requires `access_token` rather than simply `client_id`; see the OAuth section on obtaining an `access_token`. You can either supply it here or set it within the library.\n\n    Instagram.users.liked_by_self();\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Recent\n\nGet the user media feed for a user by user_id. This method requires `access_token` rather than simply `client_id` in case the requested user media is protected and the requesting user is not authorized to view the media; see the OAuth section on obtaining an `access_token`. You can either supply it here or set it within the library.\n\n    Instagram.users.recent({ user_id: 291024 });\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Relationships\n\nThe following methods allow you to view and alter user-to-user relationships via an `access_token` (assuming the scope `relationships` has been authorized for the token). Do review the outgoing and incoming references in the [Instagram API Relationship Docs](http://instagram.com/developer/endpoints/relationships/) as they can be confusing since they act in relation to the `access_token` used. _I didn't have any users to fully test the request/approve/ignore against; let me know if you encounter difficulties._\n\n    Instagram.users.follows({ user_id: 291024 });\n      ->  [ { username: 'mckelvey',\n              profile_picture: 'http://profile/path.jpg',\n              id: '291024',\n              full_name: 'David McKelvey' }, ... ]\n\n    Instagram.users.followed_by({ user_id: 291024 });\n      ->  [ { username: 'instagame',\n              profile_picture: 'http://profile/path.jpg',\n              id: '1340677',\n              full_name: '' }, ... ]\n\n    Instagram.users.requested_by({ user_id: 291024 });\n      ->  [ { username: 'instagame',\n              profile_picture: 'http://profile/path.jpg',\n              id: '1340677',\n              full_name: '' }, ... ]\n\n    Instagram.users.relationship({ user_id: 291024 });\n      ->  { outgoing_status: 'follows', // access_token user follows user 291024\n            incoming_status: 'none' } // user 291024 has no relationship with the access_token user\n\n    Instagram.users.follow({ user_id: 291024 });\n      ->  { outgoing_status: 'follows' } // success: access_token user follows user 291024\n\n    Instagram.users.unfollow({ user_id: 291024 });\n      ->  { outgoing_status: 'none' } // success: access_token user no longer follows user 291024\n\n    Instagram.users.block({ user_id: 291024 });\n      ->  { incoming_status: 'blocked_by_you' } // success: access_token user has blocked user 291024\n\n    Instagram.users.unblock({ user_id: 291024 });\n      ->  { incoming_status: 'none' } // success: access_token user no longer blocks user 291024\n\n    Instagram.users.approve({ user_id: 291024 });\n      ->  { incoming_status: 'followed_by' } // success: access_token user has allowed user 291024 to follow\n\n    Instagram.users.ignore({ user_id: 291024 });\n      ->  { incoming_status: 'requested_by' } // success: access_token user has ignored user 291024's follow request\n\n#### Subscriptions\n\nUser subscriptions are also available with the following methods. A `callback_url` is required when subscribing if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back. Note that because Instagram user subscriptions are based on your API client's authenticated users, `unsubscribe` is equivalent to `unsubscribe_all`, so only `unsubscribe_all` is provided.\n\n    Instagram.users.subscribe();\n      ->  { object: 'user',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n    Instagram.users.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n### Real-time Subscriptions\n\nIn addition to the above subscription methods within tags, locations and media, you can also interact with any subscription directly with the methods below. As with the others, it will be helpful to review the [Instagram API docs](http://instagram.com/developer/realtime/) for additional information.\n\nBe sure to include a GET route/method for the callback handshake at the `callback_url` that can handle the setup. This library includes a handshake method (example below based on Express), to which you can provide the request, the response and a complete method that will act upon the `verify_token` should you have provided it in the initial request.\n\n    app.get('/subscribe', function(request, response){\n      Instagram.subscriptions.handshake(request, response); \n    });\n\n#### Subscribe\n\nThe subscription request differs here in that it will not know what kind of object (tag, location, geography) to which you want to subscribe, so be sure to specify it. A `callback_url` is required when subscribing if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back.\n\n    Instagram.subscriptions.subscribe({ object: 'tag', object_id: 'blue' });\n      ->  { object: 'tag',\n            object_id: 'blue',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n#### Subscriptions\n\nRetrieve a list of all your subscriptions.\n\n    Instagram.subscriptions.list();\n      ->  [ { object: 'tag',\n              object_id: 'blue',\n              aspect: 'media',\n              callback_url: 'http://your.callback/path',\n              type: 'subscription',\n              id: '#' }, ... ]\n\n#### Unsubscribe\n\nTo unsubscribe from a single subscription, you must provide the subscription id.\n\n    Instagram.subscriptions.unsubscribe({ id: # });\n      ->  null // null is success, an error is failure\n\n#### Unsubscribe All\n\nUnsubscribe from all subscriptions of all kinds.\n\n    Instagram.subscriptions.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n## OAuth\n\nIn order to perform specific methods upon user data, you will need to have authorization from them through [Instagram OAuth](http://instagram.com/developer/auth/). Several methods are provided so that you can request authorization from users. You will need to specify your redirect_uri from your [application setup at Instagram](http://instagram.com/developer/manage/).\n\n    Instagram.set('redirect_uri', 'YOUR-REDIRECT-URI');\n\n#### Authorization Url\n\nTo obtain a user url for the link to Instagram, use the authorization_url method. You can include the optional parameters as needed, but be sure to use spaces instead of pluses (as they will be encoded to pluses).\n\n    url = Instagram.oauth.authorization_url({\n      scope: 'comments likes' // use a space when specifying a scope; it will be encoded into a plus\n      display: 'touch'\n    });\n\n#### Ask for an Access Token\n\nThe example below uses Express to specify a route to respond to the user's return from Instagram. It will pass the access_token and user object returned to a provided complete function. Your complete and error functions should handle your app server response (passed as a parameter for oauth only) *or* include a redirect parameter for simple redirects.\n\nIf you choose to use the simple redirect, be advised that due to the event model of node.js, your users may reach the redirect address before the complete method is executed.\n\n    app.get('/oauth', function(request, response){\n      Instagram.oauth.ask_for_access_token({\n        request: request,\n        response: response,\n        redirect: 'http://your.redirect/url', // optional\n        complete: function(params, response){\n          // params['access_token']\n          // params['user']\n          response.writeHead(200, {'Content-Type': 'text/plain'});\n          // or some other response ended with\n          response.end();\n        },\n        error: function(errorMessage, errorObject, caller, response){\n          // errorMessage is the raised error message\n          // errorObject is either the object that caused the issue, or the nearest neighbor\n          // caller is the method in which the error occurred\n          response.writeHead(406, {'Content-Type': 'text/plain'});\n          // or some other response ended with\n          response.end();\n        }\n      });\n      return null;\n    });\n\n## Developers\n\nHey, this is my first Node.js project, my first NPM package, and my first public repo (and happy to finally be giving back for all the code I've enjoyed over the years). If you have suggestions please email me, register an issue, fork (dev please) and branch, etc. (You know the routine probably better than I.)\n\nIf you add additional functionality, your pull request must have corresponding additional tests and supporting documentation.\n\nI've used [CoffeeScript](http://jashkenas.github.com/coffee-script) to write this library. If you haven't tried it, I highly recommend it. CoffeeScript takes some of the work out of javascript structures. Refer to the CoffeeScript docs for installation and usage. \n\n### Contributors\n\n  * [Andrew Senter](https://github.com/andrewsenter)\n  * [Olivier Balais](https://github.com/bobey)\n\nBoth Andrew and Olivier suggested better ways of handling the server response when requesting a token during OAuth.\n\n### Tests\n\nThere is a test suite in the /tests folder with the tests I used to ensure the library functions as intended. If you're adding or changing functionality, please add to or update the corresponding tests before issuing a pull request. The tests require [Express](https://github.com/visionmedia/express), [Expresso](https://github.com/visionmedia/expresso) and [Should](https://github.com/visionmedia/should.js):\n\n    npm install express\n    npm install expresso\n    npm install should\n\nIn addition, either export or add to your shell profile your CLIENT_ID, CLIENT_SECRET, ACCESS_TOKEN (if applicable) and CALLBACK_URL so that they are available during testing.\n","maintainers":[{"name":"mckelvey","email":"david@mckelveycreative.com"}]},"0.0.9":{"name":"instagram-node-lib","description":"This package is a wrapper for the Instagram API.","version":"0.0.9","author":{"name":"David W. McKelvey","email":"david@mckelveycreative.com","url":"http://david.mckelveycreative.com/"},"contributors":[],"keywords":["instagram","api","lib"],"main":"./lib/class.instagram.js","engines":{"node":">= 0.4.5"},"directories":{"lib":"./lib"},"files":[""],"homepage":"https://github.com/mckelvey/instagram-node-lib","repository":{"type":"git","url":"git://github.com/mckelvey/instagram-node-lib.git"},"scripts":{"test set":"expresso ./test/instagram.js","test geographies":"expresso ./test/instagram.geographies.js","test locations":"expresso ./test/instagram.locations.js","test media":"expresso ./test/instagram.media.js","test tags":"expresso ./test/instagram.tags.js","test users":"expresso ./test/instagram.users.js","test subscriptions":"expresso ./test/instagram.subscriptions.js","test oauth":"expresso ./test/instagram.oauth.js"},"_npmUser":{"name":"mckelvey","email":"david@mckelveycreative.com"},"_id":"instagram-node-lib@0.0.9","dependencies":{},"devDependencies":{},"optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.9","_defaultsLoaded":true,"dist":{"shasum":"f1fbd34b9490d22e3382a3f178a3e8b7fba3a2f7","tarball":"https://registry.npmjs.org/instagram-node-lib/-/instagram-node-lib-0.0.9.tgz","integrity":"sha512-isXwfHUWdMNQ793K95fJy3HvDNK7we0tfiIUx49cY7sXTkIdgEesv5UrNLfd+zcWo0PDiaX8bnxp7VwGvMmQEw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDx05ZWo36MByr7pW4TeoOXxtp5LUNvLHol8plfn2rU8gIgY8HizzywLxd1CDmaWcCD/qHFMPkvwb1bhP4AcOD2K1U="}]},"readme":"## What It Is\n\nThe Instagram Node Lib is a helper library for [node](http://nodejs.org) that makes communicating with the [Instagram API](http://instagram.com/developer/) easy.\n\n## Simple Example\n\nFollowing is an example that loads the library, sets my CLIENT_ID and CLIENT_SECRET for accessing the API and makes a simple call to get information on the tag `#blue`.\n\n    Instagram = require('instagram-node-lib');\n\n    Instagram.set('client_id', 'YOUR-CLIENT-ID');\n    Instagram.set('client_secret', 'YOUR-CLIENT-SECRET');\n\n    Instagram.tags.info({\n      name: 'blue',\n      complete: function(data){\n        console.log(data);\n      }\n    });\n\nWhen successful, the data logged in the console would be a javascript object like `{ media_count: 10863, name: 'blue' }`.\n\n## Installation\n\n    $ npm install instagram-node-lib\n\n## Setup\n\nTo use the library, you'll need to require it and at minimum, set your CLIENT_ID and CLIENT_SECRET given to you by Instagram.\n\n    Instagram = require('instagram-node-lib');\n\n    Instagram.set('client_id', 'YOUR-CLIENT-ID');\n    Instagram.set('client_secret', 'YOUR-CLIENT-SECRET');\n\nOptionally, if you intend to use the real-time API to manage subscriptions, then you can also set a global callback url. (You may also provide/override the callback url when subscribing.)\n\n    Instagram.set('callback_url', 'CALLBACK-URL');\n\nIf you intend to use user-specific methods (e.g. relationships), then you must also set a global redirect_uri (matching that in your [app settings in the API](http://instagram.com/developer/manage/)).\n\n    Instagram.set('redirect_uri', 'YOUR-REDIRECT-URI');\n\nLastly, if you find that the default max sockets of 5 is too few for the http(s) client, you can increase it as needed with the set method. The new max sockets value must be a positive integer greater than zero.\n\n    Instagram.set('maxSockets', 10);\n\n## Available Methods\n\nAll of the methods below follow a similar pattern. Each accepts a single javascript object with the needed parameters to complete the API call. Required parameters are shown below; refer to [the API docs](http://instagram.com/developer/endpoints/) for the optional parameters. All parameters are passed through to the request, so use the exact terms that the API docs provide.\n\nIn addition, the parameters object may include two functions, one of which will be executed at the conclusion of the request (i.e. `complete` and `error`).\n\n    {\n      name: 'blue',\n      complete: function(data, pagination){\n          // data is a javascript object/array/null matching that shipped Instagram\n          // when available (mostly /recent), pagination is a javascript object with the pagination information\n        },\n      error: function(errorMessage, errorObject, caller){\n          // errorMessage is the raised error message\n          // errorObject is either the object that caused the issue, or the nearest neighbor\n          // caller is the method in which the error occurred\n        }\n    }\n\nIn the event you do not provide a `complete` or `error` function, the library has fallback functions which post results to the console log.\n\n### Media\n\nThe following media methods are available. Required parameters are shown below, see the [Instagram API docs](http://instagram.com/developer/endpoints/media/) for the optional parameters.\n\n#### Popular\n\nGet the a set of 32 current popular media, each with all it's associated likes and comments.\n\n    Instagram.media.popular();\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Info\n\nGet the metadata for a single media item by media id.\n\n    Instagram.media.info({ media_id: 3 });\n      ->  { media object }\n\n#### Search\n\nWith a latitude and longitude (and an optional distance), find nearby media by geography.\n\n    Instagram.media.search({ lat: 48.858844300000001, lng: 2.2943506 });\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Likes\n\nAkin to an info request, this method only returns an array of likers for the media.\n\n    Instagram.media.likes({ media_id: 3 });\n      ->  [ { username: 'krisrak',\n              profile_picture: 'http://profile/path.jpg',\n              id: '#',\n              full_name: 'Rak Kris' },\n            { username: 'mikeyk',\n              profile_picture: 'http://profile/path.jpg',\n              id: '#',\n              full_name: 'Mike Krieger' } ]\n\nUsing an `access_token`, you can have the token user like or unlike a media item.\n\n    Instagram.media.like({ media_id: 3 });\n      ->  null // null is success, an error is failure\n\n    Instagram.media.unlike({ media_id: 3 });\n      ->  null // null is success, an error is failure\n\n#### Comments\n\nAkin to an info request, this method only returns an array of comments on the media.\n\n    Instagram.media.comments({ media_id: 3 });\n      ->  [ { created_time: '1279306830',\n              text: 'Love the sign here',\n              from: \n               { username: 'mikeyk',\n                 profile_picture: 'http://profile/path.jpg',\n                 id: '#',\n                 full_name: 'Mike Krieger' },\n              id: '8' },\n            { created_time: '1279315804',\n              text: 'Chilako taco',\n              from: \n               { username: 'kevin',\n                 profile_picture: 'http://profile/path.jpg',\n                 id: '#',\n                 full_name: 'Kevin Systrom' },\n              id: '3' } ]\n\nUsing an `access_token`, you can have the token user comment upon or delete their comment from a media item.\n\n    Instagram.media.comment({ media_id: 3, text: 'Instagame was here.' });\n      ->  { created_time: '1302926497',\n            text: 'Instagame was here.',\n            from:\n              { username: 'instagame',\n                profile_picture: 'http://profile/path.jpg',\n                id: '#',\n                full_name: '' },\n            id: '67236858' }\n\n    Instagram.media.uncomment({ media_id: 3, comment_id: 67236858 });\n      ->  null // null is success, an error is failure\n\n#### Subscriptions\n\nGeography subscriptions for media are also available with the following methods. A `callback_url` is required if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back. Note that while `unsubscribe` is identical to the generic subscriptions method below, here, `unsubscribe_all` only removes geography subscriptions.\n\n    Instagram.media.subscribe({ lat: 48.858844300000001, lng: 2.2943506, radius: 1000 });\n      ->  { object: 'geography',\n            object_id: '#',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n    Instagram.media.unsubscribe({ id: # });\n      ->  null // null is success, an error is failure\n\n    Instagram.media.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n### Tags\n\nThe following tag methods are available. Required parameters are shown below, see the [Instagram API docs](http://instagram.com/developer/endpoints/tags/) for the optional parameters.\n\n#### Info\n\nGet the metadata for a single tag by name.\n\n    Instagram.tags.info({ name: 'blue' });\n      ->  { media_count: 10863, name: 'blue' }\n\n#### Recent\n\nGet an array of media that have been tagged with the tag recently. \n\n    Instagram.tags.recent({ name: 'blue' });\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Search\n\nSearch for matching tags by name (q).\n\n    Instagram.tags.search({ q: 'blue' });\n      ->  [ { media_count: 10872, name: 'blue' },\n            { media_count: 931, name: 'bluesky' },\n            { media_count: 178, name: 'blueeyes' }, ... ]\n\n#### Subscriptions\n\nTag subscriptions are also available with the following methods. A `callback_url` is required if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back. Note that while `unsubscribe` is identical to the generic subscriptions method below, here, `unsubscribe_all` only removes tag subscriptions.\n\n    Instagram.tags.subscribe({ object_id: 'blue' });\n      ->  { object: 'tag',\n            object_id: 'blue',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n    Instagram.tags.unsubscribe({ id: # });\n      ->  null // null is success, an error is failure\n\n    Instagram.tags.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n### Locations\n\nThe following location methods are available. Required parameters are shown below, see the [Instagram API docs](http://instagram.com/developer/endpoints/locations/) for the optional parameters.\n\n#### Info\n\nGet the metadata for a single location by location id.\n\n    Instagram.locations.info({ location_id: 1 });\n      ->  { latitude: 37.78265474565738,\n            id: '1',\n            longitude: -122.387866973877,\n            name: 'Dogpatch Labs' }\n\n#### Recent\n\nGet an array of media that have been located with the matching location (by id) recently.\n\n    Instagram.locations.recent({ location_id: 1 });\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Search\n\nWith a latitude and longitude (and an optional distance), find nearby locations by geography.\n\n    Instagram.locations.search({ lat: 48.858844300000001, lng: 2.2943506 });\n      ->  [ { latitude: 48.8588443,\n              id: '723695',\n              longitude: 2.2943506,\n              name: 'Restaurant Jules Verne' },\n            { latitude: 48.8588443,\n              id: '788029',\n              longitude: 2.2943506,\n              name: 'Eiffel Tower, Paris' },\n            { latitude: 48.858543,\n              id: '1894075',\n              longitude: 2.2938285,\n              name: 'Caf� de l\\'homme' }, ... ]\n\n#### Subscriptions\n\nLocation subscriptions are also available with the following methods. A `callback_url` is required when subscribing if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back. Note that while `unsubscribe` is identical to the generic subscriptions method below, here, `unsubscribe_all` only removes location subscriptions.\n\n    Instagram.locations.subscribe({ object_id: '1257285' });\n      ->  { object: 'location',\n            object_id: '1257285',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n    Instagram.locations.unsubscribe({ id: # });\n      ->  null // null is success, an error is failure\n\n    Instagram.locations.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n### Users\n\nThe following user methods are available. Required parameters are shown below, see the [Instagram API docs](http://instagram.com/developer/endpoints/users/) for the optional parameters.\n\n#### Info\n\nGet the metadata for a single user by user id.\n\n    Instagram.users.info({ user_id: 291024 });\n      ->  { username: 'mckelvey',\n            counts: { media: 526, followed_by: 293, follows: 265 },\n            profile_picture: 'http://profile/path.jpg',\n            id: '291024',\n            full_name: 'David McKelvey' }\n\n#### Search\n\nSearch for matching users by name (q).\n\n    Instagram.users.search({ q: 'mckelvey' });\n      ->  [ { username: 'mckelvey',\n              profile_picture: 'http://profile/path.jpg',\n              id: '291024',\n              full_name: 'David McKelvey' }, ... ]\n\n#### Self\n\nGet the user media feed for the `access_token` supplied. This method obviously then requires `access_token` rather than simply `client_id`; see the OAuth section on obtaining an `access_token`. You can either supply it here or set it within the library.\n\n    Instagram.users.self();\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Liked by Self\n\nGet the media that has been liked by the user for the `access_token` supplied. This method obviously then requires `access_token` rather than simply `client_id`; see the OAuth section on obtaining an `access_token`. You can either supply it here or set it within the library.\n\n    Instagram.users.liked_by_self();\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Recent\n\nGet the user media feed for a user by user_id. This method requires `access_token` rather than simply `client_id` in case the requested user media is protected and the requesting user is not authorized to view the media; see the OAuth section on obtaining an `access_token`. You can either supply it here or set it within the library.\n\n    Instagram.users.recent({ user_id: 291024 });\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Relationships\n\nThe following methods allow you to view and alter user-to-user relationships via an `access_token` (assuming the scope `relationships` has been authorized for the token). Do review the outgoing and incoming references in the [Instagram API Relationship Docs](http://instagram.com/developer/endpoints/relationships/) as they can be confusing since they act in relation to the `access_token` used. _I didn't have any users to fully test the request/approve/ignore against; let me know if you encounter difficulties._\n\n    Instagram.users.follows({ user_id: 291024 });\n      ->  [ { username: 'mckelvey',\n              profile_picture: 'http://profile/path.jpg',\n              id: '291024',\n              full_name: 'David McKelvey' }, ... ]\n\n    Instagram.users.followed_by({ user_id: 291024 });\n      ->  [ { username: 'instagame',\n              profile_picture: 'http://profile/path.jpg',\n              id: '1340677',\n              full_name: '' }, ... ]\n\n    Instagram.users.requested_by({ user_id: 291024 });\n      ->  [ { username: 'instagame',\n              profile_picture: 'http://profile/path.jpg',\n              id: '1340677',\n              full_name: '' }, ... ]\n\n    Instagram.users.relationship({ user_id: 291024 });\n      ->  { outgoing_status: 'follows', // access_token user follows user 291024\n            incoming_status: 'none' } // user 291024 has no relationship with the access_token user\n\n    Instagram.users.follow({ user_id: 291024 });\n      ->  { outgoing_status: 'follows' } // success: access_token user follows user 291024\n\n    Instagram.users.unfollow({ user_id: 291024 });\n      ->  { outgoing_status: 'none' } // success: access_token user no longer follows user 291024\n\n    Instagram.users.block({ user_id: 291024 });\n      ->  { incoming_status: 'blocked_by_you' } // success: access_token user has blocked user 291024\n\n    Instagram.users.unblock({ user_id: 291024 });\n      ->  { incoming_status: 'none' } // success: access_token user no longer blocks user 291024\n\n    Instagram.users.approve({ user_id: 291024 });\n      ->  { incoming_status: 'followed_by' } // success: access_token user has allowed user 291024 to follow\n\n    Instagram.users.ignore({ user_id: 291024 });\n      ->  { incoming_status: 'requested_by' } // success: access_token user has ignored user 291024's follow request\n\n#### Subscriptions\n\nUser subscriptions are also available with the following methods. A `callback_url` is required when subscribing if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back. Note that because Instagram user subscriptions are based on your API client's authenticated users, `unsubscribe` is equivalent to `unsubscribe_all`, so only `unsubscribe_all` is provided.\n\n    Instagram.users.subscribe();\n      ->  { object: 'user',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n    Instagram.users.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n### Real-time Subscriptions\n\nIn addition to the above subscription methods within tags, locations and media, you can also interact with any subscription directly with the methods below. As with the others, it will be helpful to review the [Instagram API docs](http://instagram.com/developer/realtime/) for additional information.\n\nBe sure to include a GET route/method for the callback handshake at the `callback_url` that can handle the setup. This library includes a handshake method (example below based on Express), to which you can provide the request, the response and a complete method that will act upon the `verify_token` should you have provided it in the initial request.\n\n    app.get('/subscribe', function(request, response){\n      Instagram.subscriptions.handshake(request, response); \n    });\n\n#### Subscribe\n\nThe subscription request differs here in that it will not know what kind of object (tag, location, geography) to which you want to subscribe, so be sure to specify it. A `callback_url` is required when subscribing if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back.\n\n    Instagram.subscriptions.subscribe({ object: 'tag', object_id: 'blue' });\n      ->  { object: 'tag',\n            object_id: 'blue',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n#### Subscriptions\n\nRetrieve a list of all your subscriptions.\n\n    Instagram.subscriptions.list();\n      ->  [ { object: 'tag',\n              object_id: 'blue',\n              aspect: 'media',\n              callback_url: 'http://your.callback/path',\n              type: 'subscription',\n              id: '#' }, ... ]\n\n#### Unsubscribe\n\nTo unsubscribe from a single subscription, you must provide the subscription id.\n\n    Instagram.subscriptions.unsubscribe({ id: # });\n      ->  null // null is success, an error is failure\n\n#### Unsubscribe All\n\nUnsubscribe from all subscriptions of all kinds.\n\n    Instagram.subscriptions.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n## OAuth\n\nIn order to perform specific methods upon user data, you will need to have authorization from them through [Instagram OAuth](http://instagram.com/developer/auth/). Several methods are provided so that you can request authorization from users. You will need to specify your redirect_uri from your [application setup at Instagram](http://instagram.com/developer/manage/).\n\n    Instagram.set('redirect_uri', 'YOUR-REDIRECT-URI');\n\n#### Authorization Url\n\nTo obtain a user url for the link to Instagram, use the authorization_url method. You can include the optional parameters as needed, but be sure to use spaces instead of pluses (as they will be encoded to pluses).\n\n    url = Instagram.oauth.authorization_url({\n      scope: 'comments likes' // use a space when specifying a scope; it will be encoded into a plus\n      display: 'touch'\n    });\n\n#### Ask for an Access Token\n\nThe example below uses Express to specify a route to respond to the user's return from Instagram. It will pass the access_token and user object returned to a provided complete function. Your complete and error functions should handle your app server response (passed as a parameter for oauth only) *or* include a redirect parameter for simple redirects.\n\nIf you choose to use the simple redirect, be advised that due to the event model of node.js, your users may reach the redirect address before the complete method is executed.\n\n    app.get('/oauth', function(request, response){\n      Instagram.oauth.ask_for_access_token({\n        request: request,\n        response: response,\n        redirect: 'http://your.redirect/url', // optional\n        complete: function(params, response){\n          // params['access_token']\n          // params['user']\n          response.writeHead(200, {'Content-Type': 'text/plain'});\n          // or some other response ended with\n          response.end();\n        },\n        error: function(errorMessage, errorObject, caller, response){\n          // errorMessage is the raised error message\n          // errorObject is either the object that caused the issue, or the nearest neighbor\n          // caller is the method in which the error occurred\n          response.writeHead(406, {'Content-Type': 'text/plain'});\n          // or some other response ended with\n          response.end();\n        }\n      });\n      return null;\n    });\n\n## Developers\n\nHey, this is my first Node.js project, my first NPM package, and my first public repo (and happy to finally be giving back for all the code I've enjoyed over the years). If you have suggestions please email me, register an issue, fork (dev please) and branch, etc. (You know the routine probably better than I.)\n\nIf you add additional functionality, your pull request must have corresponding additional tests and supporting documentation.\n\nI've used [CoffeeScript](http://jashkenas.github.com/coffee-script) to write this library. If you haven't tried it, I highly recommend it. CoffeeScript takes some of the work out of javascript structures. Refer to the CoffeeScript docs for installation and usage. \n\n### Contributors\n\n  * [Andrew Senter](https://github.com/andrewsenter)\n  * [Olivier Balais](https://github.com/bobey)\n\nBoth Andrew and Olivier suggested better ways of handling the server response when requesting a token during OAuth.\n\n### Tests\n\nThere is a test suite in the /tests folder with the tests I used to ensure the library functions as intended. If you're adding or changing functionality, please add to or update the corresponding tests before issuing a pull request. The tests require [Express](https://github.com/visionmedia/express), [Expresso](https://github.com/visionmedia/expresso) and [Should](https://github.com/visionmedia/should.js):\n\n    npm install express\n    npm install expresso\n    npm install should\n\nIn addition, either export or add to your shell profile your CLIENT_ID, CLIENT_SECRET, ACCESS_TOKEN (if applicable) and CALLBACK_URL so that they are available during testing.\n","maintainers":[{"name":"mckelvey","email":"david@mckelveycreative.com"}]},"0.1.0":{"name":"instagram-node-lib","description":"This package is a wrapper for the Instagram API.","version":"0.1.0","author":{"name":"David W. McKelvey","email":"david@mckelveycreative.com","url":"http://david.mckelveycreative.com/"},"contributors":[],"keywords":["instagram","api","lib"],"main":"./lib/class.instagram.js","engines":{"node":">= 0.4.5"},"directories":{"lib":"./lib"},"files":[""],"homepage":"https://github.com/mckelvey/instagram-node-lib","repository":{"type":"git","url":"git://github.com/mckelvey/instagram-node-lib.git"},"scripts":{"test set":"expresso ./test/instagram.js","test geographies":"expresso ./test/instagram.geographies.js","test locations":"expresso ./test/instagram.locations.js","test media":"expresso ./test/instagram.media.js","test tags":"expresso ./test/instagram.tags.js","test users":"expresso ./test/instagram.users.js","test subscriptions":"expresso ./test/instagram.subscriptions.js","test oauth":"expresso ./test/instagram.oauth.js"},"readme":"## What It Is\n\nThe Instagram Node Lib is a helper library for [node](http://nodejs.org) that makes communicating with the [Instagram API](http://instagram.com/developer/) easy.\n\n## Simple Example\n\nFollowing is an example that loads the library, sets my CLIENT_ID and CLIENT_SECRET for accessing the API and makes a simple call to get information on the tag `#blue`.\n\n    Instagram = require('instagram-node-lib');\n\n    Instagram.set('client_id', 'YOUR-CLIENT-ID');\n    Instagram.set('client_secret', 'YOUR-CLIENT-SECRET');\n\n    Instagram.tags.info({\n      name: 'blue',\n      complete: function(data){\n        console.log(data);\n      }\n    });\n\nWhen successful, the data logged in the console would be a javascript object like `{ media_count: 10863, name: 'blue' }`.\n\n## Installation\n\n    $ npm install instagram-node-lib\n\n## Setup\n\nTo use the library, you'll need to require it and at minimum, set your CLIENT_ID and CLIENT_SECRET given to you by Instagram.\n\n    Instagram = require('instagram-node-lib');\n\n    Instagram.set('client_id', 'YOUR-CLIENT-ID');\n    Instagram.set('client_secret', 'YOUR-CLIENT-SECRET');\n\nOptionally, if you intend to use the real-time API to manage subscriptions, then you can also set a global callback url. (You may also provide/override the callback url when subscribing.)\n\n    Instagram.set('callback_url', 'CALLBACK-URL');\n\nIf you intend to use user-specific methods (e.g. relationships), then you must also set a global redirect_uri (matching that in your [app settings in the API](http://instagram.com/developer/manage/)).\n\n    Instagram.set('redirect_uri', 'YOUR-REDIRECT-URI');\n\nLastly, if you find that the default max sockets of 5 is too few for the http(s) client, you can increase it as needed with the set method. The new max sockets value must be a positive integer greater than zero.\n\n    Instagram.set('maxSockets', 10);\n\n## Available Methods\n\nAll of the methods below follow a similar pattern. Each accepts a single javascript object with the needed parameters to complete the API call. Required parameters are shown below; refer to [the API docs](http://instagram.com/developer/endpoints/) for the optional parameters. All parameters are passed through to the request, so use the exact terms that the API docs provide.\n\nIn addition, the parameters object may include two functions, one of which will be executed at the conclusion of the request (i.e. `complete` and `error`).\n\n    {\n      name: 'blue',\n      complete: function(data, pagination){\n          // data is a javascript object/array/null matching that shipped Instagram\n          // when available (mostly /recent), pagination is a javascript object with the pagination information\n        },\n      error: function(errorMessage, errorObject, caller){\n          // errorMessage is the raised error message\n          // errorObject is either the object that caused the issue, or the nearest neighbor\n          // caller is the method in which the error occurred\n        }\n    }\n\nIn the event you do not provide a `complete` or `error` function, the library has fallback functions which post results to the console log.\n\n### Media\n\nThe following media methods are available. Required parameters are shown below, see the [Instagram API docs](http://instagram.com/developer/endpoints/media/) for the optional parameters.\n\n#### Popular\n\nGet the a set of 32 current popular media, each with all it's associated likes and comments.\n\n    Instagram.media.popular();\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Info\n\nGet the metadata for a single media item by media id.\n\n    Instagram.media.info({ media_id: 3 });\n      ->  { media object }\n\n#### Search\n\nWith a latitude and longitude (and an optional distance), find nearby media by geography.\n\n    Instagram.media.search({ lat: 48.858844300000001, lng: 2.2943506 });\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Likes\n\nAkin to an info request, this method only returns an array of likers for the media.\n\n    Instagram.media.likes({ media_id: 3 });\n      ->  [ { username: 'krisrak',\n              profile_picture: 'http://profile/path.jpg',\n              id: '#',\n              full_name: 'Rak Kris' },\n            { username: 'mikeyk',\n              profile_picture: 'http://profile/path.jpg',\n              id: '#',\n              full_name: 'Mike Krieger' } ]\n\nUsing an `access_token`, you can have the token user like or unlike a media item.\n\n    Instagram.media.like({ media_id: 3 });\n      ->  null // null is success, an error is failure\n\n    Instagram.media.unlike({ media_id: 3 });\n      ->  null // null is success, an error is failure\n\n#### Comments\n\nAkin to an info request, this method only returns an array of comments on the media.\n\n    Instagram.media.comments({ media_id: 3 });\n      ->  [ { created_time: '1279306830',\n              text: 'Love the sign here',\n              from: \n               { username: 'mikeyk',\n                 profile_picture: 'http://profile/path.jpg',\n                 id: '#',\n                 full_name: 'Mike Krieger' },\n              id: '8' },\n            { created_time: '1279315804',\n              text: 'Chilako taco',\n              from: \n               { username: 'kevin',\n                 profile_picture: 'http://profile/path.jpg',\n                 id: '#',\n                 full_name: 'Kevin Systrom' },\n              id: '3' } ]\n\nUsing an `access_token`, you can have the token user comment upon or delete their comment from a media item.\n\n    Instagram.media.comment({ media_id: 3, text: 'Instagame was here.' });\n      ->  { created_time: '1302926497',\n            text: 'Instagame was here.',\n            from:\n              { username: 'instagame',\n                profile_picture: 'http://profile/path.jpg',\n                id: '#',\n                full_name: '' },\n            id: '67236858' }\n\n    Instagram.media.uncomment({ media_id: 3, comment_id: 67236858 });\n      ->  null // null is success, an error is failure\n\n#### Subscriptions\n\nGeography subscriptions for media are also available with the following methods. A `callback_url` is required if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back. Note that while `unsubscribe` is identical to the generic subscriptions method below, here, `unsubscribe_all` only removes geography subscriptions.\n\n    Instagram.media.subscribe({ lat: 48.858844300000001, lng: 2.2943506, radius: 1000 });\n      ->  { object: 'geography',\n            object_id: '#',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n    Instagram.media.unsubscribe({ id: # });\n      ->  null // null is success, an error is failure\n\n    Instagram.media.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n### Tags\n\nThe following tag methods are available. Required parameters are shown below, see the [Instagram API docs](http://instagram.com/developer/endpoints/tags/) for the optional parameters.\n\n#### Info\n\nGet the metadata for a single tag by name.\n\n    Instagram.tags.info({ name: 'blue' });\n      ->  { media_count: 10863, name: 'blue' }\n\n#### Recent\n\nGet an array of media that have been tagged with the tag recently. \n\n    Instagram.tags.recent({ name: 'blue' });\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Search\n\nSearch for matching tags by name (q).\n\n    Instagram.tags.search({ q: 'blue' });\n      ->  [ { media_count: 10872, name: 'blue' },\n            { media_count: 931, name: 'bluesky' },\n            { media_count: 178, name: 'blueeyes' }, ... ]\n\n#### Subscriptions\n\nTag subscriptions are also available with the following methods. A `callback_url` is required if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back. Note that while `unsubscribe` is identical to the generic subscriptions method below, here, `unsubscribe_all` only removes tag subscriptions.\n\n    Instagram.tags.subscribe({ object_id: 'blue' });\n      ->  { object: 'tag',\n            object_id: 'blue',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n    Instagram.tags.unsubscribe({ id: # });\n      ->  null // null is success, an error is failure\n\n    Instagram.tags.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n### Locations\n\nThe following location methods are available. Required parameters are shown below, see the [Instagram API docs](http://instagram.com/developer/endpoints/locations/) for the optional parameters.\n\n#### Info\n\nGet the metadata for a single location by location id.\n\n    Instagram.locations.info({ location_id: 1 });\n      ->  { latitude: 37.78265474565738,\n            id: '1',\n            longitude: -122.387866973877,\n            name: 'Dogpatch Labs' }\n\n#### Recent\n\nGet an array of media that have been located with the matching location (by id) recently.\n\n    Instagram.locations.recent({ location_id: 1 });\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Search\n\nWith a latitude and longitude (and an optional distance), find nearby locations by geography.\n\n    Instagram.locations.search({ lat: 48.858844300000001, lng: 2.2943506 });\n      ->  [ { latitude: 48.8588443,\n              id: '723695',\n              longitude: 2.2943506,\n              name: 'Restaurant Jules Verne' },\n            { latitude: 48.8588443,\n              id: '788029',\n              longitude: 2.2943506,\n              name: 'Eiffel Tower, Paris' },\n            { latitude: 48.858543,\n              id: '1894075',\n              longitude: 2.2938285,\n              name: 'Caf� de l\\'homme' }, ... ]\n\n#### Subscriptions\n\nLocation subscriptions are also available with the following methods. A `callback_url` is required when subscribing if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back. Note that while `unsubscribe` is identical to the generic subscriptions method below, here, `unsubscribe_all` only removes location subscriptions.\n\n    Instagram.locations.subscribe({ object_id: '1257285' });\n      ->  { object: 'location',\n            object_id: '1257285',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n    Instagram.locations.unsubscribe({ id: # });\n      ->  null // null is success, an error is failure\n\n    Instagram.locations.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n### Users\n\nThe following user methods are available. Required parameters are shown below, see the [Instagram API docs](http://instagram.com/developer/endpoints/users/) for the optional parameters.\n\n#### Info\n\nGet the metadata for a single user by user id.\n\n    Instagram.users.info({ user_id: 291024 });\n      ->  { username: 'mckelvey',\n            counts: { media: 526, followed_by: 293, follows: 265 },\n            profile_picture: 'http://profile/path.jpg',\n            id: '291024',\n            full_name: 'David McKelvey' }\n\n#### Search\n\nSearch for matching users by name (q).\n\n    Instagram.users.search({ q: 'mckelvey' });\n      ->  [ { username: 'mckelvey',\n              profile_picture: 'http://profile/path.jpg',\n              id: '291024',\n              full_name: 'David McKelvey' }, ... ]\n\n#### Self\n\nGet the user media feed for the `access_token` supplied. This method obviously then requires `access_token` rather than simply `client_id`; see the OAuth section on obtaining an `access_token`. You can either supply it here or set it within the library.\n\n    Instagram.users.self();\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Liked by Self\n\nGet the media that has been liked by the user for the `access_token` supplied. This method obviously then requires `access_token` rather than simply `client_id`; see the OAuth section on obtaining an `access_token`. You can either supply it here or set it within the library.\n\n    Instagram.users.liked_by_self();\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Recent\n\nGet the user media feed for a user by user_id. This method requires `access_token` rather than simply `client_id` in case the requested user media is protected and the requesting user is not authorized to view the media; see the OAuth section on obtaining an `access_token`. You can either supply it here or set it within the library.\n\n    Instagram.users.recent({ user_id: 291024 });\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Relationships\n\nThe following methods allow you to view and alter user-to-user relationships via an `access_token` (assuming the scope `relationships` has been authorized for the token). Do review the outgoing and incoming references in the [Instagram API Relationship Docs](http://instagram.com/developer/endpoints/relationships/) as they can be confusing since they act in relation to the `access_token` used. _I didn't have any users to fully test the request/approve/ignore against; let me know if you encounter difficulties._\n\n    Instagram.users.follows({ user_id: 291024 });\n      ->  [ { username: 'mckelvey',\n              profile_picture: 'http://profile/path.jpg',\n              id: '291024',\n              full_name: 'David McKelvey' }, ... ]\n\n    Instagram.users.followed_by({ user_id: 291024 });\n      ->  [ { username: 'instagame',\n              profile_picture: 'http://profile/path.jpg',\n              id: '1340677',\n              full_name: '' }, ... ]\n\n    Instagram.users.requested_by({ user_id: 291024 });\n      ->  [ { username: 'instagame',\n              profile_picture: 'http://profile/path.jpg',\n              id: '1340677',\n              full_name: '' }, ... ]\n\n    Instagram.users.relationship({ user_id: 291024 });\n      ->  { outgoing_status: 'follows', // access_token user follows user 291024\n            incoming_status: 'none' } // user 291024 has no relationship with the access_token user\n\n    Instagram.users.follow({ user_id: 291024 });\n      ->  { outgoing_status: 'follows' } // success: access_token user follows user 291024\n\n    Instagram.users.unfollow({ user_id: 291024 });\n      ->  { outgoing_status: 'none' } // success: access_token user no longer follows user 291024\n\n    Instagram.users.block({ user_id: 291024 });\n      ->  { incoming_status: 'blocked_by_you' } // success: access_token user has blocked user 291024\n\n    Instagram.users.unblock({ user_id: 291024 });\n      ->  { incoming_status: 'none' } // success: access_token user no longer blocks user 291024\n\n    Instagram.users.approve({ user_id: 291024 });\n      ->  { incoming_status: 'followed_by' } // success: access_token user has allowed user 291024 to follow\n\n    Instagram.users.ignore({ user_id: 291024 });\n      ->  { incoming_status: 'requested_by' } // success: access_token user has ignored user 291024's follow request\n\n#### Subscriptions\n\nUser subscriptions are also available with the following methods. A `callback_url` is required when subscribing if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back. Note that because Instagram user subscriptions are based on your API client's authenticated users, `unsubscribe` is equivalent to `unsubscribe_all`, so only `unsubscribe_all` is provided.\n\n    Instagram.users.subscribe();\n      ->  { object: 'user',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n    Instagram.users.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n### Real-time Subscriptions\n\nIn addition to the above subscription methods within tags, locations and media, you can also interact with any subscription directly with the methods below. As with the others, it will be helpful to review the [Instagram API docs](http://instagram.com/developer/realtime/) for additional information.\n\nBe sure to include a GET route/method for the callback handshake at the `callback_url` that can handle the setup. This library includes a handshake method (example below based on Express), to which you can provide the request, the response and a complete method that will act upon the `verify_token` should you have provided it in the initial request.\n\n    app.get('/subscribe', function(request, response){\n      Instagram.subscriptions.handshake(request, response); \n    });\n\n#### Subscribe\n\nThe subscription request differs here in that it will not know what kind of object (tag, location, geography) to which you want to subscribe, so be sure to specify it. A `callback_url` is required when subscribing if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back.\n\n    Instagram.subscriptions.subscribe({ object: 'tag', object_id: 'blue' });\n      ->  { object: 'tag',\n            object_id: 'blue',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n#### Subscriptions\n\nRetrieve a list of all your subscriptions.\n\n    Instagram.subscriptions.list();\n      ->  [ { object: 'tag',\n              object_id: 'blue',\n              aspect: 'media',\n              callback_url: 'http://your.callback/path',\n              type: 'subscription',\n              id: '#' }, ... ]\n\n#### Unsubscribe\n\nTo unsubscribe from a single subscription, you must provide the subscription id.\n\n    Instagram.subscriptions.unsubscribe({ id: # });\n      ->  null // null is success, an error is failure\n\n#### Unsubscribe All\n\nUnsubscribe from all subscriptions of all kinds.\n\n    Instagram.subscriptions.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n## OAuth\n\nIn order to perform specific methods upon user data, you will need to have authorization from them through [Instagram OAuth](http://instagram.com/developer/auth/). Several methods are provided so that you can request authorization from users. You will need to specify your redirect_uri from your [application setup at Instagram](http://instagram.com/developer/manage/).\n\n    Instagram.set('redirect_uri', 'YOUR-REDIRECT-URI');\n\n#### Authorization Url\n\nTo obtain a user url for the link to Instagram, use the authorization_url method. You can include the optional parameters as needed, but be sure to use spaces instead of pluses (as they will be encoded to pluses).\n\n    url = Instagram.oauth.authorization_url({\n      scope: 'comments likes' // use a space when specifying a scope; it will be encoded into a plus\n      display: 'touch'\n    });\n\n#### Ask for an Access Token\n\nThe example below uses Express to specify a route to respond to the user's return from Instagram. It will pass the access_token and user object returned to a provided complete function. Your complete and error functions should handle your app server response (passed as a parameter for oauth only) *or* include a redirect parameter for simple redirects.\n\nIf you choose to use the simple redirect, be advised that due to the event model of node.js, your users may reach the redirect address before the complete method is executed.\n\n    app.get('/oauth', function(request, response){\n      Instagram.oauth.ask_for_access_token({\n        request: request,\n        response: response,\n        redirect: 'http://your.redirect/url', // optional\n        complete: function(params, response){\n          // params['access_token']\n          // params['user']\n          response.writeHead(200, {'Content-Type': 'text/plain'});\n          // or some other response ended with\n          response.end();\n        },\n        error: function(errorMessage, errorObject, caller, response){\n          // errorMessage is the raised error message\n          // errorObject is either the object that caused the issue, or the nearest neighbor\n          // caller is the method in which the error occurred\n          response.writeHead(406, {'Content-Type': 'text/plain'});\n          // or some other response ended with\n          response.end();\n        }\n      });\n      return null;\n    });\n\n## Developers\n\nHey, this is my first Node.js project, my first NPM package, and my first public repo (and happy to finally be giving back for all the code I've enjoyed over the years). If you have suggestions please email me, register an issue, fork (dev please) and branch, etc. (You know the routine probably better than I.)\n\nIf you add additional functionality, your pull request must have corresponding additional tests and supporting documentation.\n\nI've used [CoffeeScript](http://jashkenas.github.com/coffee-script) to write this library. If you haven't tried it, I highly recommend it. CoffeeScript takes some of the work out of javascript structures. Refer to the CoffeeScript docs for installation and usage. \n\n### Contributors\n\n  * [Andrew Senter](https://github.com/andrewsenter)\n  * [Olivier Balais](https://github.com/bobey)\n  * [Joe McCann](https://github.com/joemccann)\n\nBoth Andrew and Olivier suggested better ways of handling the server response when requesting a token during OAuth. Joe provided a correction for [issue #4](https://github.com/mckelvey/instagram-node-lib/issues/4).\n\n### Tests\n\nThere is a test suite in the /tests folder with the tests I used to ensure the library functions as intended. If you're adding or changing functionality, please add to or update the corresponding tests before issuing a pull request. The tests require [Express](https://github.com/visionmedia/express), [Expresso](https://github.com/visionmedia/expresso) and [Should](https://github.com/visionmedia/should.js):\n\n    npm install express\n    npm install expresso\n    npm install should\n\nIn addition, either export or add to your shell profile your CLIENT_ID, CLIENT_SECRET, ACCESS_TOKEN (if applicable) and CALLBACK_URL so that they are available during testing.\n","_id":"instagram-node-lib@0.1.0","dist":{"shasum":"2f5c6c521f9af283c2e07b335cd1397c9b72a1ad","tarball":"https://registry.npmjs.org/instagram-node-lib/-/instagram-node-lib-0.1.0.tgz","integrity":"sha512-3ZdKUe+NZtP0IBuzrx8woOnrAoRrzvIuIxDcmulQ7ZySAu5YsEJmGEoXBZb0Qja3JnSMdjMVtADD+gH8vXiClg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAVpgHFhFd3TQ7lfxPLD41gM8R+Pr4GKapboTm6vb0LrAiAIJhIhI3sMSm6LdsJJihRo85WVPEaIibiA1uHbd06pTQ=="}]},"maintainers":[{"name":"mckelvey","email":"david@mckelveycreative.com"}]},"0.1.1":{"name":"instagram-node-lib","description":"This package is a wrapper for the Instagram API.","version":"0.1.1","author":{"name":"David W. McKelvey","email":"david@mckelveycreative.com","url":"http://david.mckelveycreative.com/"},"contributors":[],"keywords":["instagram","api","lib"],"main":"./lib/class.instagram.js","engines":{"node":">= 0.4.5"},"directories":{"lib":"./lib"},"files":[""],"homepage":"https://github.com/mckelvey/instagram-node-lib","repository":{"type":"git","url":"git://github.com/mckelvey/instagram-node-lib.git"},"scripts":{"test set":"expresso ./test/instagram.js","test geographies":"expresso ./test/instagram.geographies.js","test locations":"expresso ./test/instagram.locations.js","test media":"expresso ./test/instagram.media.js","test tags":"expresso ./test/instagram.tags.js","test users":"expresso ./test/instagram.users.js","test subscriptions":"expresso ./test/instagram.subscriptions.js","test oauth":"expresso ./test/instagram.oauth.js"},"readme":"## What It Is\n\nThe Instagram Node Lib is a helper library for [node](http://nodejs.org) that makes communicating with the [Instagram API](http://instagram.com/developer/) easy.\n\n## Simple Example\n\nFollowing is an example that loads the library, sets my CLIENT_ID and CLIENT_SECRET for accessing the API and makes a simple call to get information on the tag `#blue`.\n\n    Instagram = require('instagram-node-lib');\n\n    Instagram.set('client_id', 'YOUR-CLIENT-ID');\n    Instagram.set('client_secret', 'YOUR-CLIENT-SECRET');\n\n    Instagram.tags.info({\n      name: 'blue',\n      complete: function(data){\n        console.log(data);\n      }\n    });\n\nWhen successful, the data logged in the console would be a javascript object like `{ media_count: 10863, name: 'blue' }`.\n\n## Installation\n\n    $ npm install instagram-node-lib\n\n## Setup\n\nTo use the library, you'll need to require it and at minimum, set your CLIENT_ID and CLIENT_SECRET given to you by Instagram.\n\n    Instagram = require('instagram-node-lib');\n\n    Instagram.set('client_id', 'YOUR-CLIENT-ID');\n    Instagram.set('client_secret', 'YOUR-CLIENT-SECRET');\n\nOptionally, if you intend to use the real-time API to manage subscriptions, then you can also set a global callback url. (You may also provide/override the callback url when subscribing.)\n\n    Instagram.set('callback_url', 'CALLBACK-URL');\n\nIf you intend to use user-specific methods (e.g. relationships), then you must also set a global redirect_uri (matching that in your [app settings in the API](http://instagram.com/developer/manage/)).\n\n    Instagram.set('redirect_uri', 'YOUR-REDIRECT-URI');\n\nLastly, if you find that the default max sockets of 5 is too few for the http(s) client, you can increase it as needed with the set method. The new max sockets value must be a positive integer greater than zero.\n\n    Instagram.set('maxSockets', 10);\n\n## Available Methods\n\nAll of the methods below follow a similar pattern. Each accepts a single javascript object with the needed parameters to complete the API call. Required parameters are shown below; refer to [the API docs](http://instagram.com/developer/endpoints/) for the optional parameters. All parameters are passed through to the request, so use the exact terms that the API docs provide.\n\nIn addition, the parameters object may include two functions, one of which will be executed at the conclusion of the request (i.e. `complete` and `error`).\n\n    {\n      name: 'blue',\n      complete: function(data, pagination){\n          // data is a javascript object/array/null matching that shipped Instagram\n          // when available (mostly /recent), pagination is a javascript object with the pagination information\n        },\n      error: function(errorMessage, errorObject, caller){\n          // errorMessage is the raised error message\n          // errorObject is either the object that caused the issue, or the nearest neighbor\n          // caller is the method in which the error occurred\n        }\n    }\n\nIn the event you do not provide a `complete` or `error` function, the library has fallback functions which post results to the console log.\n\n### Media\n\nThe following media methods are available. Required parameters are shown below, see the [Instagram API docs](http://instagram.com/developer/endpoints/media/) for the optional parameters.\n\n#### Popular\n\nGet the a set of 32 current popular media, each with all it's associated likes and comments.\n\n    Instagram.media.popular();\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Info\n\nGet the metadata for a single media item by media id.\n\n    Instagram.media.info({ media_id: 3 });\n      ->  { media object }\n\n#### Search\n\nWith a latitude and longitude (and an optional distance), find nearby media by geography.\n\n    Instagram.media.search({ lat: 48.858844300000001, lng: 2.2943506 });\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Likes\n\nAkin to an info request, this method only returns an array of likers for the media.\n\n    Instagram.media.likes({ media_id: 3 });\n      ->  [ { username: 'krisrak',\n              profile_picture: 'http://profile/path.jpg',\n              id: '#',\n              full_name: 'Rak Kris' },\n            { username: 'mikeyk',\n              profile_picture: 'http://profile/path.jpg',\n              id: '#',\n              full_name: 'Mike Krieger' } ]\n\nUsing an `access_token`, you can have the token user like or unlike a media item.\n\n    Instagram.media.like({ media_id: 3 });\n      ->  null // null is success, an error is failure\n\n    Instagram.media.unlike({ media_id: 3 });\n      ->  null // null is success, an error is failure\n\n#### Comments\n\nAkin to an info request, this method only returns an array of comments on the media.\n\n    Instagram.media.comments({ media_id: 3 });\n      ->  [ { created_time: '1279306830',\n              text: 'Love the sign here',\n              from: \n               { username: 'mikeyk',\n                 profile_picture: 'http://profile/path.jpg',\n                 id: '#',\n                 full_name: 'Mike Krieger' },\n              id: '8' },\n            { created_time: '1279315804',\n              text: 'Chilako taco',\n              from: \n               { username: 'kevin',\n                 profile_picture: 'http://profile/path.jpg',\n                 id: '#',\n                 full_name: 'Kevin Systrom' },\n              id: '3' } ]\n\nUsing an `access_token`, you can have the token user comment upon or delete their comment from a media item.\n\n    Instagram.media.comment({ media_id: 3, text: 'Instagame was here.' });\n      ->  { created_time: '1302926497',\n            text: 'Instagame was here.',\n            from:\n              { username: 'instagame',\n                profile_picture: 'http://profile/path.jpg',\n                id: '#',\n                full_name: '' },\n            id: '67236858' }\n\n    Instagram.media.uncomment({ media_id: 3, comment_id: 67236858 });\n      ->  null // null is success, an error is failure\n\n#### Subscriptions\n\nGeography subscriptions for media are also available with the following methods. A `callback_url` is required if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back. Note that while `unsubscribe` is identical to the generic subscriptions method below, here, `unsubscribe_all` only removes geography subscriptions.\n\n    Instagram.media.subscribe({ lat: 48.858844300000001, lng: 2.2943506, radius: 1000 });\n      ->  { object: 'geography',\n            object_id: '#',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n    Instagram.media.unsubscribe({ id: # });\n      ->  null // null is success, an error is failure\n\n    Instagram.media.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n### Tags\n\nThe following tag methods are available. Required parameters are shown below, see the [Instagram API docs](http://instagram.com/developer/endpoints/tags/) for the optional parameters.\n\n#### Info\n\nGet the metadata for a single tag by name.\n\n    Instagram.tags.info({ name: 'blue' });\n      ->  { media_count: 10863, name: 'blue' }\n\n#### Recent\n\nGet an array of media that have been tagged with the tag recently. \n\n    Instagram.tags.recent({ name: 'blue' });\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Search\n\nSearch for matching tags by name (q).\n\n    Instagram.tags.search({ q: 'blue' });\n      ->  [ { media_count: 10872, name: 'blue' },\n            { media_count: 931, name: 'bluesky' },\n            { media_count: 178, name: 'blueeyes' }, ... ]\n\n#### Subscriptions\n\nTag subscriptions are also available with the following methods. A `callback_url` is required if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back. Note that while `unsubscribe` is identical to the generic subscriptions method below, here, `unsubscribe_all` only removes tag subscriptions.\n\n    Instagram.tags.subscribe({ object_id: 'blue' });\n      ->  { object: 'tag',\n            object_id: 'blue',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n    Instagram.tags.unsubscribe({ id: # });\n      ->  null // null is success, an error is failure\n\n    Instagram.tags.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n### Locations\n\nThe following location methods are available. Required parameters are shown below, see the [Instagram API docs](http://instagram.com/developer/endpoints/locations/) for the optional parameters.\n\n#### Info\n\nGet the metadata for a single location by location id.\n\n    Instagram.locations.info({ location_id: 1 });\n      ->  { latitude: 37.78265474565738,\n            id: '1',\n            longitude: -122.387866973877,\n            name: 'Dogpatch Labs' }\n\n#### Recent\n\nGet an array of media that have been located with the matching location (by id) recently.\n\n    Instagram.locations.recent({ location_id: 1 });\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Search\n\nWith a latitude and longitude (and an optional distance), find nearby locations by geography.\n\n    Instagram.locations.search({ lat: 48.858844300000001, lng: 2.2943506 });\n      ->  [ { latitude: 48.8588443,\n              id: '723695',\n              longitude: 2.2943506,\n              name: 'Restaurant Jules Verne' },\n            { latitude: 48.8588443,\n              id: '788029',\n              longitude: 2.2943506,\n              name: 'Eiffel Tower, Paris' },\n            { latitude: 48.858543,\n              id: '1894075',\n              longitude: 2.2938285,\n              name: 'Caf� de l\\'homme' }, ... ]\n\n#### Subscriptions\n\nLocation subscriptions are also available with the following methods. A `callback_url` is required when subscribing if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back. Note that while `unsubscribe` is identical to the generic subscriptions method below, here, `unsubscribe_all` only removes location subscriptions.\n\n    Instagram.locations.subscribe({ object_id: '1257285' });\n      ->  { object: 'location',\n            object_id: '1257285',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n    Instagram.locations.unsubscribe({ id: # });\n      ->  null // null is success, an error is failure\n\n    Instagram.locations.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n### Users\n\nThe following user methods are available. Required parameters are shown below, see the [Instagram API docs](http://instagram.com/developer/endpoints/users/) for the optional parameters.\n\n#### Info\n\nGet the metadata for a single user by user id.\n\n    Instagram.users.info({ user_id: 291024 });\n      ->  { username: 'mckelvey',\n            counts: { media: 526, followed_by: 293, follows: 265 },\n            profile_picture: 'http://profile/path.jpg',\n            id: '291024',\n            full_name: 'David McKelvey' }\n\n#### Search\n\nSearch for matching users by name (q).\n\n    Instagram.users.search({ q: 'mckelvey' });\n      ->  [ { username: 'mckelvey',\n              profile_picture: 'http://profile/path.jpg',\n              id: '291024',\n              full_name: 'David McKelvey' }, ... ]\n\n#### Self\n\nGet the user media feed for the `access_token` supplied. This method obviously then requires `access_token` rather than simply `client_id`; see the OAuth section on obtaining an `access_token`. You can either supply it here or set it within the library.\n\n    Instagram.users.self();\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Liked by Self\n\nGet the media that has been liked by the user for the `access_token` supplied. This method obviously then requires `access_token` rather than simply `client_id`; see the OAuth section on obtaining an `access_token`. You can either supply it here or set it within the library.\n\n    Instagram.users.liked_by_self();\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Recent\n\nGet the user media feed for a user by user_id. This method requires `access_token` rather than simply `client_id` in case the requested user media is protected and the requesting user is not authorized to view the media; see the OAuth section on obtaining an `access_token`. You can either supply it here or set it within the library.\n\n    Instagram.users.recent({ user_id: 291024 });\n      ->  [ { media object },\n            { media object },\n            { media object }, ... ]\n\n#### Relationships\n\nThe following methods allow you to view and alter user-to-user relationships via an `access_token` (assuming the scope `relationships` has been authorized for the token). Do review the outgoing and incoming references in the [Instagram API Relationship Docs](http://instagram.com/developer/endpoints/relationships/) as they can be confusing since they act in relation to the `access_token` used. _I didn't have any users to fully test the request/approve/ignore against; let me know if you encounter difficulties._\n\n    Instagram.users.follows({ user_id: 291024 });\n      ->  [ { username: 'mckelvey',\n              profile_picture: 'http://profile/path.jpg',\n              id: '291024',\n              full_name: 'David McKelvey' }, ... ]\n\n    Instagram.users.followed_by({ user_id: 291024 });\n      ->  [ { username: 'instagame',\n              profile_picture: 'http://profile/path.jpg',\n              id: '1340677',\n              full_name: '' }, ... ]\n\n    Instagram.users.requested_by({ user_id: 291024 });\n      ->  [ { username: 'instagame',\n              profile_picture: 'http://profile/path.jpg',\n              id: '1340677',\n              full_name: '' }, ... ]\n\n    Instagram.users.relationship({ user_id: 291024 });\n      ->  { outgoing_status: 'follows', // access_token user follows user 291024\n            incoming_status: 'none' } // user 291024 has no relationship with the access_token user\n\n    Instagram.users.follow({ user_id: 291024 });\n      ->  { outgoing_status: 'follows' } // success: access_token user follows user 291024\n\n    Instagram.users.unfollow({ user_id: 291024 });\n      ->  { outgoing_status: 'none' } // success: access_token user no longer follows user 291024\n\n    Instagram.users.block({ user_id: 291024 });\n      ->  { incoming_status: 'blocked_by_you' } // success: access_token user has blocked user 291024\n\n    Instagram.users.unblock({ user_id: 291024 });\n      ->  { incoming_status: 'none' } // success: access_token user no longer blocks user 291024\n\n    Instagram.users.approve({ user_id: 291024 });\n      ->  { incoming_status: 'followed_by' } // success: access_token user has allowed user 291024 to follow\n\n    Instagram.users.ignore({ user_id: 291024 });\n      ->  { incoming_status: 'requested_by' } // success: access_token user has ignored user 291024's follow request\n\n#### Subscriptions\n\nUser subscriptions are also available with the following methods. A `callback_url` is required when subscribing if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back. Note that because Instagram user subscriptions are based on your API client's authenticated users, `unsubscribe` is equivalent to `unsubscribe_all`, so only `unsubscribe_all` is provided.\n\n    Instagram.users.subscribe();\n      ->  { object: 'user',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n    Instagram.users.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n### Real-time Subscriptions\n\nIn addition to the above subscription methods within tags, locations and media, you can also interact with any subscription directly with the methods below. As with the others, it will be helpful to review the [Instagram API docs](http://instagram.com/developer/realtime/) for additional information.\n\nBe sure to include a GET route/method for the callback handshake at the `callback_url` that can handle the setup. This library includes a handshake method (example below based on Express), to which you can provide the request, the response and a complete method that will act upon the `verify_token` should you have provided it in the initial request.\n\n    app.get('/subscribe', function(request, response){\n      Instagram.subscriptions.handshake(request, response); \n    });\n\n#### Subscribe\n\nThe subscription request differs here in that it will not know what kind of object (tag, location, geography) to which you want to subscribe, so be sure to specify it. A `callback_url` is required when subscribing if not specified globally, and you may also provide a `verify_token` if you want to keep track of which subscription is coming back.\n\n    Instagram.subscriptions.subscribe({ object: 'tag', object_id: 'blue' });\n      ->  { object: 'tag',\n            object_id: 'blue',\n            aspect: 'media',\n            callback_url: 'http://your.callback/path',\n            type: 'subscription',\n            id: '#' }\n\n#### Subscriptions\n\nRetrieve a list of all your subscriptions.\n\n    Instagram.subscriptions.list();\n      ->  [ { object: 'tag',\n              object_id: 'blue',\n              aspect: 'media',\n              callback_url: 'http://your.callback/path',\n              type: 'subscription',\n              id: '#' }, ... ]\n\n#### Unsubscribe\n\nTo unsubscribe from a single subscription, you must provide the subscription id.\n\n    Instagram.subscriptions.unsubscribe({ id: # });\n      ->  null // null is success, an error is failure\n\n#### Unsubscribe All\n\nUnsubscribe from all subscriptions of all kinds.\n\n    Instagram.subscriptions.unsubscribe_all();\n      ->  null // null is success, an error is failure\n\n## OAuth\n\nIn order to perform specific methods upon user data, you will need to have authorization from them through [Instagram OAuth](http://instagram.com/developer/auth/). Several methods are provided so that you can request authorization from users. You will need to specify your redirect_uri from your [application setup at Instagram](http://instagram.com/developer/manage/).\n\n    Instagram.set('redirect_uri', 'YOUR-REDIRECT-URI');\n\n#### Authorization Url\n\nTo obtain a user url for the link to Instagram, use the authorization_url method. You can include the optional parameters as needed, but be sure to use spaces instead of pluses (as they will be encoded to pluses).\n\n    url = Instagram.oauth.authorization_url({\n      scope: 'comments likes' // use a space when specifying a scope; it will be encoded into a plus\n      display: 'touch'\n    });\n\n#### Ask for an Access Token\n\nThe example below uses Express to specify a route to respond to the user's return from Instagram. It will pass the access_token and user object returned to a provided complete function. Your complete and error functions should handle your app server response (passed as a parameter for oauth only) *or* include a redirect parameter for simple redirects.\n\nIf you choose to use the simple redirect, be advised that due to the event model of node.js, your users may reach the redirect address before the complete method is executed.\n\n    app.get('/oauth', function(request, response){\n      Instagram.oauth.ask_for_access_token({\n        request: request,\n        response: response,\n        redirect: 'http://your.redirect/url', // optional\n        complete: function(params, response){\n          // params['access_token']\n          // params['user']\n          response.writeHead(200, {'Content-Type': 'text/plain'});\n          // or some other response ended with\n          response.end();\n        },\n        error: function(errorMessage, errorObject, caller, response){\n          // errorMessage is the raised error message\n          // errorObject is either the object that caused the issue, or the nearest neighbor\n          // caller is the method in which the error occurred\n          response.writeHead(406, {'Content-Type': 'text/plain'});\n          // or some other response ended with\n          response.end();\n        }\n      });\n      return null;\n    });\n\n## Developers\n\nHey, this is my first Node.js project, my first NPM package, and my first public repo (and happy to finally be giving back for all the code I've enjoyed over the years). If you have suggestions please email me, register an issue, fork (dev please) and branch, etc. (You know the routine probably better than I.)\n\nIf you add additional functionality, your pull request must have corresponding additional tests and supporting documentation.\n\nI've used [CoffeeScript](http://jashkenas.github.com/coffee-script) to write this library. If you haven't tried it, I highly recommend it. CoffeeScript takes some of the work out of javascript structures. Refer to the CoffeeScript docs for installation and usage. \n\n### Contributors\n\n  * [Andrew Senter](https://github.com/andrewsenter)\n  * [Olivier Balais](https://github.com/bobey)\n  * [Joe McCann](https://github.com/joemccann)\n  * [dbrand666](https://github.com/dbrand666)\n\nBoth Andrew and Olivier suggested better ways of handling the server response when requesting a token during OAuth. Joe provided a correction for [issue #4](https://github.com/mckelvey/instagram-node-lib/issues/4). dbrand666 made the handling of params consistent for users.info [issue #8](https://github.com/mckelvey/instagram-node-lib/issues/8).\n\n### Tests\n\nThere is a test suite in the /tests folder with the tests I used to ensure the library functions as intended. If you're adding or changing functionality, please add to or update the corresponding tests before issuing a pull request. The tests require [Express](https://github.com/visionmedia/express), [Expresso](https://github.com/visionmedia/expresso) and [Should](https://github.com/visionmedia/should.js):\n\n    npm install express\n    npm install expresso\n    npm install should\n\nIn addition, either export or add to your shell profile your CLIENT_ID, CLIENT_SECRET, ACCESS_TOKEN (if applicable) and CALLBACK_URL so that they are available during testing.\n","_id":"instagram-node-lib@0.1.1","dist":{"shasum":"a2b5f69dc2aa213ea23409f4f473af271d235a54","tarball":"https://registry.npmjs.org/instagram-node-lib/-/instagram-node-lib-0.1.1.tgz","integrity":"sha512-xyPeOi7uq8YYurZO7WWR5YpQgtpUeYO8XRr+4XOzhTHLeAQKyowF1yQB55BULHxoXoDHyES+sPQL+HKI+wU/iQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHqr7rT3EQ70pZa3AW+uUzVtwr+Ylx5YM9IW79QTgBTEAiEA10j3ddkG5h51SW36pzFQVoy0vhhuFp7k1g29O5/x3L8="}]},"_npmVersion":"1.1.61","_npmUser":{"name":"mckelvey","email":"david@mckelveycreative.com"},"maintainers":[{"name":"mckelvey","email":"david@mckelveycreative.com"}]}},"maintainers":[{"name":"mckelvey","email":"david@mckelveycreative.com"}],"time":{"modified":"2022-06-19T01:34:39.556Z","created":"2011-04-11T03:50:13.179Z","0.0.1":"2011-04-11T03:50:13.373Z","0.0.2":"2011-04-11T03:59:18.396Z","0.0.3":"2011-04-16T06:48:04.426Z","0.0.4":"2011-05-04T03:33:27.301Z","0.0.5":"2011-05-22T00:23:38.807Z","0.0.7":"2011-06-23T20:55:35.684Z","0.0.8":"2012-06-30T16:18:37.426Z","0.0.9":"2012-06-30T16:33:15.288Z","0.1.0":"2012-08-21T04:18:01.492Z","0.1.1":"2012-10-18T16:07:25.651Z"},"author":{"name":"David W. McKelvey","email":"david@mckelveycreative.com","url":"http://david.mckelveycreative.com/"},"repository":{"type":"git","url":"git://github.com/mckelvey/instagram-node-lib.git"},"users":{"calmwinds":true}}