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

instagram-web-api

v2.2.2

Published

Instagram Private Web API client written in JS

Downloads

3,815

Readme

A Instagram Private Web API client 🤳✨❤️

Simple, easy and very complete implementation of the Instagram private web API.

  • Support for all the main functions of Instagram Web
  • Well tested, CI
  • All test runs daily

Install

npm install instagram-web-api

Usage

Intance Instagram and call login method; this stores the credentials in memory.

const Instagram = require('instagram-web-api')
const { username, password } = process.env

const client = new Instagram({ username, password })

client
  .login()
  .then(() => {
    client
      .getProfile()
      .then(console.log)
  })

Using async/await in Node >= 8

const Instagram = require('instagram-web-api')
const { username, password } = process.env

const client = new Instagram({ username, password })

;(async () => {
  await client.login()
  const profile = await client.getProfile()

  console.log(profile)
})()

Save cookies to disk by using a though-cookie store.

// Packages
const Instagram = require('instagram-web-api')
const FileCookieStore = require('tough-cookie-filestore2')

const { username, password } = process.env // Only required when no cookies are stored yet

const cookieStore = new FileCookieStore('./cookies.json')
const client = new Instagram({ username, password, cookieStore })

;(async () => {
  // URL or path of photo
  const photo =
    'https://scontent-scl1-1.cdninstagram.com/t51.2885-15/e35/22430378_307692683052790_5667315385519570944_n.jpg'

  await client.login()

  // Upload Photo to feed or story, just configure 'post' to 'feed' or 'story'
  const { media } = await client.uploadPhoto({ photo: photo, caption: 'testing', post: 'feed' })
  console.log(`https://www.instagram.com/p/${media.code}/`)
})()

API Reference

Instagram(credentials, opts)

const client = new Instagram({ username: '', password: '' }, { language: 'es-CL' })

Initializes the client.

  • credentials
    • username: The username of account
    • password: The password of account
    • cookieStore: An optional though-cookie cookie storage, which allows for persistent cookies. Default is undefined
  • opts
    • language: The language of response from API. Default is en-US
    • proxy: String of a proxy to tunnel all requests. Default is undefined

login(credentials)

const { username, password, cookies } = await client.login({ username: '', password: '' })
const { authenticated, user } = await client.login({ username: '', password: '' })

Login in the account, this method returns user (true when username is valid) and authenticated (true when login was successful)

  • credentials
    • username: The username of account
    • password: The password of account

logout()

await client.logout()

Logout in the account.

getHome()

const feed = await client.getHome('KGEAxpEdUwUrxxoJvxRoQeXFGooSlADHZ8UaDdSWbnOIxxoUUhyciJ7EGlxNlZjaYcUaXTgUM00qyBrgBhUsLezIGqVTlxqausga5W-fVax9xRryaBdN1EnIGvdQFgzxoMgaFoLO7v7xWQA=')

Get home feed timeline, media shared by the people you follow.

  • params
    • end_cursor (String) for pagination

getUserByUsername(params)

const instagram = await client.getUserByUsername({ username: 'instagram' })
const me = await client.getUserByUsername({ username: client.credentials.username })

Get user by username, this method not require authentication for public profiles.

  • params
    • username: The username of the profile

getFollowers(params)

const followers = await client.getFollowers({ userId: '1284161654' })

Get followers for given userId. Be aware that the response gets slightly altered for easier usage.

  • params
    • userId: The user id
    • first: Amount of followers to request. Default is 20
    • after: Optional end_cursor (String) for pagination.

getFollowings(params)

const followings = await client.getFollowings({ userId: '1284161654' })

Get followings for given userId. Be aware that the response gets slightly altered for easier usage.

  • params
    • userId: The user id
    • first: Amount of followings to request. Default is 20
    • after: Optional end_cursor (String) for pagination.

getActivity()

const activity = await client.getActivity()

Get activity of account, news following, liked, etc.

getProfile()

const profile = await client.getProfile()

Get profile the account first_name, last_name, email, username, phone_number, gender, birthday, biography, external_url and chaining_enabled.

updateProfile(params)

await client.updateProfile({ biography: '❤️', website: 'https://jlobos.com/', gender: 1 })

Update profile the account.

  • params
    • name: The full name. Default is
    • email: The email of account. Default is
    • username: The username of account. Default is client.credentials.username
    • phoneNumber: The Phone Number. Default is
    • gender: Number 1 male, 2 female and 3 not specified
    • biography: The Bio. Default is
    • website: The Website. Default is
    • similarAccountSuggestions: Boolean Include your account when recommending similar accounts people might want to follow. Default is true

changeProfilePhoto(params)

const fs = require('fs')

const photo = fs.join(__dirname, 'photo.jpg')
await client.changeProfilePhoto({ photo })

Change the profile photo.

  • params
    • photo: A String of path file or URL

deleteMedia(params)

await client.deleteMedia({ mediaId: '1442533050805297981' })

Delete a media, photo, video, etc. by the id.

  • params
    • mediaId: The media id

uploadPhoto(params)

const photo = 'https://scontent-scl1-1.cdninstagram.com/t51.2885-15/e35/16465198_658888867648924_4042368904838774784_n.jpg'
await client.uploadPhoto({ photo, caption: '❤️', post: 'feed' })

Upload a photo to Instagram. Only jpeg images allowed.

  • params
    • photo: A String of path file or URL
    • caption: The caption of photo. Default is
    • post: The local post, feed or story

getMediaFeedByLocation(params)

const location = await client.getMediaFeedByLocation({ locationId: '26914683' })

Get latitude, longitude, top posts, last media, country, city, and more related to the location.

  • params
    • locationId: The location id

getMediaFeedByHashtag(params)

const tag = client.getMediaFeedByHashtag({ hashtag: 'unicorn' })

Explore last media and top posts feed related to a hashtag.

  • params
    • hashtag: A hashtag, not including the "#"

locationSearch(params)

const venues = client.locationSearch({ query: 'chile', latitude: -33.45, longitude: -70.6667 })

Search venues by latitude and longitude.

  • params
    • latitude: Latitude
    • longitude: Longitude
    • query: A optional location name. Default is

getMediaByShortcode(params)

const media = await client.getMediaByShortcode({ shortcode: 'BQE6Cq2AqM9' })

Get data of a media by the Instagram shortcode

  • params
    • shortcode: A shortcode

addComment(params)

await client.addComment({ mediaId: 1442533050805297981, text: 'awesome' })

Add comment to a media item.

  • params
    • mediaId: The media id
    • text: Comment text
    • replyToCommentId: Optional comment id to which to reply

deleteComment(params)

await client.deleteComment({ mediaId: '1442533050805297981', commentId: '17848908229146688' })

Delete a comment.

  • params
    • mediaId: The media id
    • commentId: The comment id

getChallenge(params)

await client.getChallenge({ challengeUrl: '/challenge/1284161654/a1B2c3d4E6/' })

Get information about a challenge.

  • params
    • challengeUrl: A String with a challenge path

updateChallenge(params)

const challengeUrl = '/challenge/1284161654/a1B2c3d4E6/'

await client.updateChallenge({ challengeUrl, choice: 0 })
await client.updateChallenge({ challengeUrl, securityCode: 123456  })

Request or submit a verification code for the given challenge.

  • params
    • challengeUrl: A String with a challenge path
    • choice: Number 0 for phone and 1 for email. Default is ``
    • securityCode: Number the received verification code for the challenge. Default is ``

resetChallenge(params)

await client.resetChallenge({ challengeUrl: '/challenge/1284161654/a1B2c3d4E6/' })

Reset a challenge to start over again.

  • params
    • challengeUrl: A String with a challenge path

replayChallenge(params)

await client.replayChallenge({ challengeUrl: '/challenge/1284161654/a1B2c3d4E6/' })

Request a new verification message.

  • params
    • challengeUrl: A String with a challenge path

approve(params)

await client.approve({ userId: '1284161654' })

Approve a friendship request.

  • params
    • userId: The user id

ignore(params)

await client.ignore({ userId: '1284161654' })

Reject a friendship request.

  • params
    • userId: The user id

follow(params)

await client.follow({ userId: '1284161654' })

Follow a user.

  • params
    • userId: The user id

unfollow(params)

await client.unfollow({ userId: '1284161654' })

Unfollow a user.

  • params
    • userId: The user id

block(params)

await client.block({ userId: '1284161654' })

Block a user.

  • params
    • userId: The user id

unblock(params)

await client.unblock({ userId: '1284161654' })

Unblock a user.

  • params
    • userId: The user id

like(params)

await client.like({ mediaId: '1442533050805297981' })

Like a media item.

  • params
    • mediaId: The media id

unlike(params)

await client.unlike({ mediaId: '1442533050805297981' })

Unlike a media item.

  • params
    • mediaId: The media id

save(params)

await client.save({ mediaId: '1442533050805297981' })

Save a media item.

  • params
    • mediaId: The media id

unsave(params)

await client.unsave({ mediaId: '1442533050805297981' })

Unsave a media item.

  • params
    • mediaId: The media id

search(params)

await client.search({ query: 'unicorn' })

Search users, places, or hashtags.

  • params
    • query: Query

    • context: The context of search, hashtag, place, user or blended. Default is blended

getPhotosByHashtag(params)

await client.getPhotosByHashtag({ hashtag: 'unicorn' })

Get photos for hashtag.

  • params
    • hashtag: A String with a hashtag
    • first: A number of records to return
    • after: The query cursor String for pagination

getPhotosByUsername(params)

await client.getPhotosByUsername({ username: 'unicorn' })

Gets user photos.

  • params
    • username: A String with a hashtag
    • first: A number of records to return
    • after: The query cursor String for pagination

getPrivateProfilesFollowRequests

await client.getPrivateProfilesFollowRequests(cursor)

getChainsData

await client.getChainsData({ userId })

This will return the similar accounts, that you see, when you click on the ARROW in a profile.

  • params
    • userId: The user id

getMediaLikes(params)

await client.getMediaLikes({ shortcode: 'B-0000000', first: '49', after: '' })

This will return the media likes.

  • params
    • shortcode: The shortcode media like this: https://www.instagram.com/p/B-00000000/, only put shortcode like this : B-000000000
    • first: A number of records to return max is 49
    • after: The query cursor String for pagination

getMediaComments(params)

await client.getMediaComments({ shortcode: 'B-0000000', first: '12', after: '' }).catch((error) => {
  console.log(error);
})
.then((response) => {
  console.log(response);
});

//The query cursor 'after' maybe return an array, if array you need to convert like this: 
let pointer = response.page_info.end_cursor;
// this will try to convert array to json stringify
  try{
  		pointer = JSON.parse(pointer);
  		pointer = JSON.stringify(pointer);
  }catch(e){
  		console.log('Pointer is not array!, don't need to be converted!');
  }

This will return the media comments.

  • params
    • shortcode: The shortcode media like this: https://www.instagram.com/p/B-00000000/, only put shortcode like this : B-000000000
    • first: A number of records to return max is 49
    • after: The query cursor String for pagination

License

MIT © Jesús Lobos