/jinsta

javascript + instagram + algorithms

Primary LanguageTypeScriptMIT LicenseMIT

jinsta

special thanks to @timgrossmann for creating instapy !! (:

check out our discord channel and chat me there to get an invite for the channel :)

getting started basic

  • install nodejs
  • open the terminal
  • npm install -g jinsta
  • jinsta -u instagram_username -p instagram_password -w workspace_path
    • the -w parameter could be ./jinsta_data for example
    • jinsta will save log files and session data in this folder
  • run jinsta --help for additional information

update

  • npm update -g jinsta

advanced configuration

example index.js

  • install nodejs
  • open the terminal and create a new folder
    • the name the folder must be different than 'jinsta'
  • npm init -y
  • npm install jinsta
  • create a new file index.js

plain javascript

var jinsta = require('jinsta');

var setup = jinsta.default;
var Config = jinsta.Config;
var timeline = jinsta.timeline;
var hashtag = jinsta.hashtag;
var storyMassView = jinsta.storyMassView;

var config = new Config(
	'instagram_username',
	'instagram_password',
	'workspace_path' // like './jinsta_data'
);

var massview = true;

// have a look at https://github.com/breuerfelix/jinsta/blob/master/src/core/config.ts for an example
config.likeLimit = 30;
// you can edit every property you want
// just do it like we change the keywords here
config.keywords = [ 'vegan', 'climate', 'sports' ];

setup(config).then(function(client) {
	if (massview) {
		storyMassView(client, config);
	}

	if (config.tags.length) {
		// run hashtag feed
		hashtag(client, config);
	} else {
		// run timeline feed
		timeline(client, config);
	}
});
  • node index.js to start the bot

es6 javascript

import {
	setup,
	Config,
	hashtag,
	timeline,
	storyMassView,
} from 'jinsta';

async function main() {
	const workspace = './workspace';

	const { IG_USERNAME, IG_PASSWORD } = process.env;
	const config = new Config(
		IG_USERNAME,
		IG_PASSWORD,
		workspace,
	);

	const massview = false;
	//config.tags = ['vegan', 'world'];
	//config.likeLimit = 10;

	const client = await setup(config);

	if (massview) {
		await storyMassView(client, config);
	}

	if (config.tags.length) {
		// run hashtag feed
		await hashtag(client, config);
	} else {
		// run timeline feed
		await timeline(client, config);
	}
}

main();

proxy

if you're running jinsta on a server in the internet or in a cloud environment it could be really helpful to use a proxy, so it is not that easy for instagram to catch you up. if you are running jinsta from home this may not be needed.

there are two ways to achieve this:

  1. append --proxy ip.ip.ip.ip:port on the commandline
  2. set following configuration in the advanced configuration: config.proxy = 'ip.ip.ip.ip:port'

like by hashtag

the bot will go through all tags and split the like limit randomly between given tags.

simple: jinsta --tags climate vegan sport --likeLimit 10

advanced:

// the bot will like 10 images with the hashtag vegan
// and then 10 images with the hashtag climate
config.likeLimit = 10;
config.tags = ['vegan', 'climate', 'sport'];

contribute

  • clone this repo
  • npm install
  • create a file named .env in the root folder
IG_USERNAME=instagram_username
IG_PASSWORD=instagram_password
  • npm run dev to start the bot

additional information / helpful another projects

  • jinsta_starter: helpful for scheduling jinsta, e.g. on a raspberry pi at home

why did we stop working on instapy ?

right now we experience alot of blocks and bans on the current version of instapy. in our opinion this is due to the following reasons:

  • instapy uses instagram through the browser
    • more than 90% of the instagram userbase is accessing it through their official app
  • instapy is working sequentially
    • for example it is performing all like actions, then all follow actions, then all unfollow actions
    • a normal user doenst use instagram like this
  • instapy is using direct links
    • when accessing a user profile to follow him, instapy visit this profile via the direct url
    • a normal user is accessing the user through their timeline
    • instagram is able to detect that

to change these behaviours in instapy, we would need to rewrite it from scratch.
since there is no maintained python library for the inofficial instagram api, we switched to javascript / typescript instead.

what about the new algorithm ?

the new algorithm should act more like a casual user on instagram.
the bot starts with a 'basefeed' like the current users timeline. now it starts looking through all pictures and is calculating an interest rating for each picture based on the keywords and photo description.
based on this rating the bot will interact with the picture and like it. it will also maybe start scrolling through the comments and calculating a rating for each comment.
based on this rating, it will interact with the timeline from the user who wrote that comment.
now we start at the beginning again calculating a rating for each photo of this users posts...

the bot is diving deeper and deeper into random user feeds and liking / following them.

in every 'feed' we also got some chances of exiting the feed and going back one feed.

this should just visualize the basic idea behind the new algorithm.

if you got any ideas or improvements, feel free to write some issues or contact me at discord!
since this is in pre alpha, there is alot to improve (:


we love lowercase