Instagram Private Web API client written in JS
npm install instagram-web-apiSimple, 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
``bash`
npm install instagram-web-api
Intance Instagram and call login method; this stores the credentials in memory.
`js
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
`js
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.
`js
// 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}/)`
})()
* Instagram
* new Instagram({ username, password, cookieStore }, { language, proxy, requestOptions })
* .login({ username, password })
* .logout()
* .getHome()
* .getUserByUsername({ username })
* .getFollowers({ userId, first, after })
* .getFollowings({ userId, first, after })
* .getActivity()
* .getProfile()
* .updateProfile({ name, email, username, phoneNumber, gender, biography, website, similarAccountSuggestions })
* .changeProfilePhoto({ photo })
* .deleteMedia({ mediaId })
* .uploadPhoto({ photo, caption, post })
* .getMediaFeedByLocation({ locationId })
* .getMediaFeedByHashtag({ hashtag })
* .locationSearch({ query, latitude, longitude })
* .getMediaByShortcode({ shortcode })
* .addComment({ mediaId, text })
* .deleteComment({ mediaId, commentId })
* .getChallenge({ challengeUrl })
* .updateChallenge({ challengeUrl, choice, securityCode })
* .resetChallenge({ challengeUrl })
* .replayChallenge({ challengeUrl })
* .approve({ userId })
* .ignore({ userId })
* .follow({ userId })
* .unfollow({ userId })
* .block({ userId })
* .unblock({ userId })
* .like({ mediaId })
* .unlike({ mediaId })
* .save({ mediaId })
* .unsave({ mediaId })
* .search({ query, context })
* .getPhotosByHashtag({hashtag, first, after})
* .getPhotosByUsername({username, first, after})
* .getPrivateProfilesFollowRequests(cursor)
* .getChainsData({ userId })
* .getMediaLikes({ shortcode, first, after })
* .getMediaComments({ shortcode, first, after })
js
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 $3
`js
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$3
`js
await client.logout()
`
> Logout in the account.$3
`js
const feed = await client.getHome('KGEAxpEdUwUrxxoJvxRoQeXFGooSlADHZ8UaDdSWbnOIxxoUUhyciJ7EGlxNlZjaYcUaXTgUM00qyBrgBhUsLezIGqVTlxqausga5W-fVax9xRryaBdN1EnIGvdQFgzxoMgaFoLO7v7xWQA=')
`
> Get home feed timeline, media shared by the people you follow.
- params
- end_cursor (String) for pagination$3
`js
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$3
`js
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.$3
`js
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. $3
`js
const activity = await client.getActivity()
`
> Get activity of account, news following, liked, etc.$3
`js
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.$3
`js
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$3
`js
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$3
`js
await client.deleteMedia({ mediaId: '1442533050805297981' })
`
> Delete a media, photo, video, etc. by the id.
- params
- mediaId: The media id$3
`js
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$3
`js
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$3
`js
const tag = client.getMediaFeedByHashtag({ hashtag: 'unicorn' })
`
> Explore last media and top posts feed related to a hashtag.
- params
- hashtag: A hashtag, not including the "#"$3
`js
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 $3
`js
const media = await client.getMediaByShortcode({ shortcode: 'BQE6Cq2AqM9' })
`
> Get data of a media by the Instagram shortcode
- params
- shortcode: A shortcode$3
`js
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$3
`js
await client.deleteComment({ mediaId: '1442533050805297981', commentId: '17848908229146688' })
`
> Delete a comment.
- params
- mediaId: The media id
- commentId: The comment id$3
`js
await client.getChallenge({ challengeUrl: '/challenge/1284161654/a1B2c3d4E6/' })
`
> Get information about a challenge.
- params
- challengeUrl: A String with a challenge path$3
`js
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 $3
`js
await client.resetChallenge({ challengeUrl: '/challenge/1284161654/a1B2c3d4E6/' })
`
> Reset a challenge to start over again.
- params
- challengeUrl: A String with a challenge path$3
`js
await client.replayChallenge({ challengeUrl: '/challenge/1284161654/a1B2c3d4E6/' })
`
> Request a new verification message.
- params
- challengeUrl: A String with a challenge path$3
`js
await client.approve({ userId: '1284161654' })
`
> Approve a friendship request.
- params
- userId: The user id$3
`js
await client.ignore({ userId: '1284161654' })
`
> Reject a friendship request.
- params
- userId: The user id$3
`js
await client.follow({ userId: '1284161654' })
`
> Follow a user.
- params
- userId: The user id$3
`js
await client.unfollow({ userId: '1284161654' })
`
> Unfollow a user.
- params
- userId: The user id$3
`js
await client.block({ userId: '1284161654' })
`
> Block a user.
- params
- userId: The user id$3
`js
await client.unblock({ userId: '1284161654' })
`
> Unblock a user.
- params
- userId: The user id$3
`js
await client.like({ mediaId: '1442533050805297981' })
`
> Like a media item.
- params
- mediaId: The media id$3
`js
await client.unlike({ mediaId: '1442533050805297981' })
`
> Unlike a media item.
- params
- mediaId: The media id$3
`js
await client.save({ mediaId: '1442533050805297981' })
`
> Save a media item.
- params
- mediaId: The media id$3
`js
await client.unsave({ mediaId: '1442533050805297981' })
`
> Unsave a media item.
- params
- mediaId: The media id$3
`js
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
$3
`js
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
$3
`js
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$3
`js
await client.getPrivateProfilesFollowRequests(cursor)
`$3
`js
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
$3
`js
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$3
`js
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 paginationMIT © Jesús Lobos