Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pradel/node-instagram
Instagram api client for node that support promises.
https://github.com/pradel/node-instagram
api authentication instagram nodejs promise stream typescript
Last synced: about 3 hours ago
JSON representation
Instagram api client for node that support promises.
- Host: GitHub
- URL: https://github.com/pradel/node-instagram
- Owner: pradel
- License: mit
- Created: 2016-06-24T12:20:41.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2022-12-08T14:26:59.000Z (about 2 years ago)
- Last Synced: 2025-01-25T22:10:34.799Z (7 days ago)
- Topics: api, authentication, instagram, nodejs, promise, stream, typescript
- Language: TypeScript
- Homepage:
- Size: 949 KB
- Stars: 190
- Watchers: 8
- Forks: 27
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![npm version](https://badge.fury.io/js/node-instagram.svg)](https://badge.fury.io/js/node-instagram)
[![npm](https://img.shields.io/npm/dm/node-instagram.svg)](https://www.npmjs.com/package/node-instagram)
[![Build Status](https://travis-ci.org/pradel/node-instagram.svg?branch=master)](https://travis-ci.org/pradel/node-instagram)
[![Coverage Status](https://coveralls.io/repos/github/pradel/node-instagram/badge.svg?branch=master)](https://coveralls.io/github/pradel/node-instagram?branch=master)
[![Dependency Status](https://david-dm.org/pradel/node-instagram.svg)](https://david-dm.org/pradel/node-instagram)
[![Known Vulnerabilities](https://snyk.io/test/npm/node-instagram/badge.svg)](https://snyk.io/test/npm/node-instagram)# node-instagram
> ⚠️ The legacy Instagram API is deprecated and will be disabled on June 29, 2020.
>
> More information https://www.instagram.com/developer.
>
> You should use the new Instagram Graph API.Instagram api client for node that supports promises and typescript.
You can find examples in the [examples](https://github.com/pradel/node-instagram/tree/master/examples) directory.
## Install
`npm install --save node-instagram`
`yarn add node-instagram`
## Usage
```javascript
import Instagram from "node-instagram";
// or
const Instagram = require("node-instagram").default;// Create a new instance.
const instagram = new Instagram({
clientId: "your-client-id",
clientSecret: "your-client-secret",
accessToken: "user-access-token"
});// You can use callbacks or promises
instagram.get("users/self", (err, data) => {
if (err) {
// an error occured
console.log(err);
} else {
console.log(data);
}
});// Get information about the owner of the access_token.
const data = await instagram.get("users/self");
console.log(data);// Handle errors
.get("tags/paris")
.then(data => {
console.log(data);
})
.catch(err => {
// An error occured
console.log(err);
});
```## Streaming
This lib have a stream method. It is used to receive new post as events. Streaming **can only be used** on all endpoints taking MIN_TAG_ID as parameter. Inside it is running setInterval.
```javascript
const stream = instagram.stream("tags/:tag-name/media/recent");stream.on("messages", messages => {
console.log(messages);
});// handle stream error
stream.on("error", err => {
// An error occur
console.log(err);
});
```## Server side authentication
Two steps are needed in order to receive an access_token for a user.
- Get an authentication url from instagram and redirect the user to it
- Exchange the code for an access_tokenYou can find a working example with express [here](https://github.com/pradel/node-instagram/tree/master/examples/express-auth).
To see more info about server side authentication take a look at the [instagram documentation](https://www.instagram.com/developer/authentication/).
```javascript
// Example with express// Your redirect url where you will handle the code param
const redirectUri = "http://localhost:3000/auth/instagram/callback";// First redirect user to instagram oauth
app.get("/auth/instagram", (req, res) => {
res.redirect(
instagram.getAuthorizationUrl(
redirectUri,
{
// an array of scopes
scope: ["basic", "likes"]
},
// an optional state
(state: "your state")
)
);
});// Handle auth code and get access_token for user
app.get("/auth/instagram/callback", async (req, res) => {
try {
// The code from the request, here req.query.code for express
const code = req.query.code;
const data = await instagram.authorizeUser(code, redirectUri);
// data.access_token contain the user access_token
res.json(data);
} catch (err) {
res.json(err);
}
});
```## Endpoints
To see all endpoint available take a look at [instagram developer documentation](https://www.instagram.com/developer/endpoints/).
```javascript
// Get information about current user
instagram.get("users/self", (err, data) => {
console.log(data);
});// Get information about a user.
instagram.get("users/:user-id").then(data => {
console.log(data);
});// Get the most recent media published by the owner of the access_token.
instagram.get("users/self/media/recent").then(data => {
console.log(data);
});// Get the most recent media published by a user.
instagram.get("users/:user-id/media/recent").then(data => {
console.log(data);
});// Get the list of recent media liked by the owner of the access_token.
instagram.get("users/self/media/liked").then(data => {
console.log(data);
});// Get a list of users matching the query.
instagram.get("users/search", { q: "paris" }).then(data => {
console.log(data);
});// Get information about this media.
instagram.get("media/:media-id").then(data => {
console.log(data);
});// Get a list of users who have liked this media.
instagram.get("media/:media-id/likes").then(data => {
console.log(data);
});// Set a like on this media by the currently authenticated user.
instagram.post("media/:media-id/likes").then(data => {
console.log(data);
});// Remove a like on this media by the currently authenticated user.
instagram.delete("media/:media-id/likes").then(data => {
console.log(data);
});// Get information about a tag object.
instagram.get("tags/:tag-name").then(data => {
console.log(data);
});// Get a list of recently tagged media.
instagram.get("tags/:tag-name/media/recent").then(data => {
console.log(data);
});// Search for tags by name.
instagram.get("tags/search", { q: "paris" }).then(data => {
console.log(data);
});
```It is also possible to send the access_token along as a parameter when you call an endpoint. For example:
```javascript
// Get information about current user
instagram.get("users/self", { access_token: accessToken }, (err, data) => {
console.log(data);
});// Search for tags by name.
.get("tags/search", { access_token: accessToken, q: "paris" })
.then(data => {
console.log(data);
});
```## Api
### `const instagram = new Instagram(config)`
Create a new Instagram instance
#### Arguments
- `clientId` **string**
- `accessToken` **string**### `instagram.get(endpoint, [params, callback])`
Make a GET request on endpoint
#### Arguments
- `endpoint` **string**
- `params` **object**
- `callback` **function**### `instagram.post(endpoint, [params, callback])`
Make a POST request on endpoint
#### Arguments
- `endpoint` **string**
- `params` **object**
- `callback` **function**### `instagram.delete(endpoint, [params, callback])`
Make a DELETE request on endpoint
#### Arguments
- `endpoint` **string**
- `params` **object**
- `callback` **function**### `instagram.stream(endpoint, params)`
Start a fake stream to a endpoint and return new messages found
#### Arguments
- `endpoint` **string**
- `params` **object**
- `params.interval` **number** interval to run inside **default** 10000
- `params.runOnCreation` **boolean** run the request when creating object
- `params.minTagId` **boolean** instagram min_tag_id to start request### `instagram.getAuthorizationUrl(redirectUri, options)`
Get a valid auth url for instagram
#### Arguments
- `redirectUri` **string** the url to redirect the user with the code
- `options` **object**
- `options.scope` **array|string** the scope to request
- `options.state` **string** optional state
- `callback` **function**### `instagram.authorizeUser(code, redirectUri, [callback])`
Handle the code returned by instagram an get a user access_token
#### Arguments
- `redirectUri` **string** code returned by instagram
- `redirectUri` **string**
- `callback` **function**## License
MIT © [Léo Pradel](https://www.leopradel.com/)