npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

instafeed-node-js

v0.1.4

Published

A node.js module that allows you to asynchronously fetch posts from the Instagram Graph API by supplying a User Access Token.

Downloads

197

Readme

Instafeed for Node.js

This node.js module allows you to asynchronously fetch posts from the Instagram Graph API with a long-lived User Access Token. To use this module, it is recommended that you obtain a long-lived User Access Token from the User Token Generator tool in the Facebook Developers Console. A User Access Token will allow you to fetch only the Instagram posts from the account it was generated for.

For more information about how to obtain a User Access Token, see: Basic Display API Overview

Table of Contents

Usage

Note: It is highly recommended that you store User Access Tokens in an environment variable. Therefore, the code snippets below assume your User Access Token is stored in process.env.ig_user_access_token. Please be sure to update this value in the code snippets to correctly reference the variable for your User Access Token.

Installation

npm install instafeed-node-js

Basic Usage

// Require Module
const { instafeed, refreshToken } = require('instafeed-node-js');

// Fetch latest posts from Instagram
instafeed({
    access_token: process.env.ig_user_access_token
})

// Handle success response
.then((response) => {

    // Instagram posts
    let instagram_posts = response.data;

    // Log Instagram posts to console
    console.log(instagram_posts);

// Handle error response
}).catch((error) => {

    // Log error to console
    console.log(error);

// Optionally, you can make an API request to refresh your user access token after the request completes.
}).finally(() => {

    // Refresh user access token
    refreshToken({access_token: process.env.ig_user_access_token});

});

The rate limit for API calls made with User Access Tokens is 200 calls per hour, so it is recommended that you cache the Instagram posts, and only use Instafeed to fetch them when you want to update the cache.

Request specific number of posts

By default, Instafeed will request the latest 25 posts, which is the maximum number of posts the API will return per request. If you would like to request a smaller number of posts, you can pass requestedCount.

// Fetch latest posts from Instagram
instafeed({
    access_token: process.env.ig_user_access_token,
    requestedCount: 4 // Request only the latest 4 posts
})

Cursor Based Pagination

Instagram's API uses cursor based pagination. With every request Instafeed makes, the return value will contain an after property, which is the cursor that identifies the last post returned in the request. You can then pass that cursor to after when making a new request to get the next 'page' posts that come after the last post from the previous request.

// Fetch latest posts from Instagram
instafeed({
    access_token: process.env.ig_user_access_token,
    requestedCount: 25, // Set page size to 25 posts
    after: 'QVFIUi1OLWQxa240VnEtSy1Dd2FWZA0RjR0N2VllXaERDSFBNUDlYZAWZAfc1B1TURlT2daQkktQW5GZAWVvVVJVeHUwcVpkWVI4dUxRaW5WNkFpNGdaYwFtVkVR' // Pass a page cursor to get the posts that come after it
})

Refreshing Your Access Token

Instagram long lived User Access Tokens are valid for 60 days, but can be refreshed to extend their lifespan. Every time you refresh your User Access Token, the expiration date is set to 60 days again, and the API responds with the number of seconds until your User Access Token expires. When a User Access Token is refreshed, the API will not refresh it again until at least 24 hours have passed. The API will not throw an error if you refresh too often, so long as you're not hitting the 200 requests per hour rate limit. However it won't actually refresh the token until it recieves a refresh request after 24 hours have passed. The API will always accurately return the correct number of seconds until the User Access Token expires.

This module has a built-in helper function that will send a request to the /refresh_access_token endpoint to assist you in easily keeping your User Access Token valid.

// Refresh user access token
refreshToken({access_token: process.env.ig_user_access_token})

// Handle success response
.then((response) => {

    // Number of seconds until the User Access Token Expires
    let expiration = response.expires_in;

    // Log expiration to console
    console.log(expiration);

// Handle error response
}).catch((error) => {

    // Log error to console
    console.log(error);

});

Instafeed()

The instafeed() function makes a request to the /me/media endpoint of the Instagram Graph API.

Instafeed() Request Parameters

The instafeed() function accepts an object of options as it's only parameter.

| Option | Type | Required | Description | | :--- | :---: | :---: | :--- | | access_token | string | Required | A long-lived User Access Token for the Instagram account you want to fetch the posts for. | | requestedCount | int | Optional | The number of posts you want to fetch, the default value is 25, and the API will only return a maximum of 25 posts per request. An error will be thrown if you attempt to request more than 25 posts. | | after | string | Optional | An 'after' page cursor from a previous request that points to the end of the 'page' of data that was returned. By passing an 'after' page cursor, you're telling the API to return posts that come after the last post returned in a previous request. |

instafeed() Return Values

The instafeed() function will return the following values if the request was successful.

| Value | Type | Description | | :--- | :---: | :--- | | data | array | An array of Instagram post objects. The table below lists all properties attached to each Instagram post object. | | count | int | A count of the total number of posts the API returned. | | after | string | The 'after' page cursor returned from the API. You can pass this value to request the next set of posts. |

Each Instagram post object will contain the following properties. | Property | Type | Always Returned | Description | | :--- | :---: | :---: | :--- | | id | string | Yes | The media ID | | username | string | Yes | The username of the account that made the post. | | media_type | string | Yes | The media type. Can be IMAGE, VIDEO, or CAROUSEL_ALBUM. | | media_url | string | Yes | The media URL. If the media_type is IMAGE or CAROUSEL_ALBUM, this will be a link to an image. If the media_type is VIDEO, this will be a link to a video file. | | thubmnail_url | string | No | The thumbnail image URL, this is only returned if the media_type is VIDEO. | | permalink | string | Yes | The permanent URL to the Instagram post. | | caption | string | No | The caption text. If the post has no caption, the API does not return this. | | timestamp | string | Yes | The publish date in ISO 8601 format. | | image | string | Yes | This is a property added by the instafeed() function. Depending the media_type, this will either be the media_url or thumbnail_url. This will always contain an image URL. |

Note: instafeed() returns the post objects exactly as they are received from the API, but adds an image property to each post so you have a reliable URL to an image for the post regardless of the media_type. See the Basic Display API Reference for Media for a definitive reference to the data returned for each Instagram post.

refreshToken()

The refreshToken() function makes a request to the /refresh_access_token endpoint of the Instagram Graph API.

refreshToken() Request Parameters

The refreshToken() function accepts an object of options as it's only parameter.

| Option | Type | Required | Description | | :--- | :---: | :---: | :--- | | access_token | string | Required | A valid long-lived User Access Token that has not expired. |

refreshToken() Return Values

The refreshToken() function will return the following values if the request was successful.

| Property | Type | Always Returned | Description | | :--- | :---: | :---: | :--- | | access_token | string | Yes | A long-lived Instagram User Access Token. The original token is still valid, despite the API returning a different one here. | | token_type | string | Yes | The value is always 'bearer', I'm not sure what this is for. | | expires_in | int | Yes | The number of seconds until the long-lived User Access Token expires. |

Basic Display API Reference for refresh_access_token endpoint

Errors

In the event of an error, Instafeed will return an error message.

Instafeed Errors

Any errors thrown by Instafeed will be prefixed with [Instafeed Error]. The error message will contain instructions on how to fix the error.

Instagram API Errors

Any errors thrown by the Instagram API will be prefixed with [Instagram API Error]. The error message will contain the Error Code, Error Type, and Error Message returned from the API.

Changelog

Changelog

License

MIT License