Skip to main content

🔥 Fastest & Simplest Python Package For Instagram Automation

Project description

Ensta - Simple Instagram API

PyPI PyPI - Python Version Downloads

Logo

Ensta is a simple, reliable and up-to-date python package for Instagram API.

Both authenticated and anonymous requests are supported.

Installation

Python 3.10 or later is required.

pip install ensta

Example

Fetching profile info by username:

from ensta import Host

host = Host(username, password)

profile = host.profile("leomessi")

print(profile.biography)
print(profile.is_private)
print(profile.profile_picture_url_hd)

Features

Tap on the headings to view code:

Using Proxies

When you should use a proxy:

  • You're being rate limited when using the Guest Class.
  • Ensta is not working because your Home IP is flagged.
  • You're deploying Ensta to the cloud. (Instagram blocks requests from IPs of cloud providers, so a proxy must be used)
from ensta import Host

host = Host(
    username,
    password,
    proxy={
        "http": "socks5://username:password@host:port",
        "https": "socks5://username:password@host:port"
    }
)

Ensta uses the same proxy settings as the requests module.

Username-Password Login

We recommend using your email address to sign in. But if you have multiple accounts created on the same email address, you may consider using your username instead.

from ensta import Host

# Recommended
host = Host(email, password)

# This also works
host = Host(username, password)
SessionData Login

Ensta will automatically save your login session in a file named ensta-session.json and reuse it until it expires.

But, if you wish to load a session manually, you can use the SessionHost Class instead of Host Class by passing your session data (which is stored inside ensta-session.json) as a string.

from ensta import SessionHost

host = SessionHost(session_data)
2FA Login

Authenticator App

from ensta import Host

# The key you got from Instagram when setting up your Authenticator App
key = "R65I7XTTHNHTQ2NKMQL36NCWKNUPBSDG"

host = Host(
    username,  # or email
    password,
    totp_token=key
)

SMS Based: Ensta will prompt you for the OTP in the runtime.

Upload Photo (Single Post)
from ensta import Host

host = Host(username, password)

upload = host.get_upload_id("Picture.jpg")

host.upload_photo(upload, caption="Travelling 🌆")
Upload Multiple Photos (Single Post)
from ensta import Host

host = Host(username, password)

upload1 = host.get_upload_id("First.jpg")
upload2 = host.get_upload_id("Second.jpg")
upload3 = host.get_upload_id("Third.jpg")

host.upload_photos([upload1, upload2, upload3], caption="Travelling 🌆")
Upload Reel
from ensta import Host

host = Host(username, password)

host.upload_reel(
    video_path="Video.mp4",
    thumbnail_path="Thumbnail.jpg",
    caption="Enjoying the winter! ⛄"
)
Check Username Availability
from ensta import Guest

guest = Guest()

print(guest.username_availability("theusernameiwant"))
Fetch Profile Data
from ensta import Host

host = Host(username, password)
profile = host.profile("leomessi")

print(profile.full_name)
print(profile.biography)
print(profile.follower_count)
Username to UserID, and vice versa.
from ensta import Host

host = Host(username, password)

username = host.get_username(427553890)
uid = host.get_uid("leomessi")

print(username, uid)
Follow / Unfollow Users
from ensta import Host

host = Host(username, password)

print(host.follow("leomessi"))
print(host.unfollow("leomessi"))
Generate Followers / Followings List
from ensta import Host

host = Host(username, password)

followers = host.followers("leomessi", count=100)  # Want full list? Set count to '0'
followings = host.followings("leomessi", count=100)  # Want full list? Set count to '0'

for user in followers:
    print(user.username)

for user in followings:
    print(user.username)
Switch Account Type - Public/Private
from ensta import Host

host = Host(username, password)

print(host.switch_to_public_account())
print(host.switch_to_private_account())
Fetch Someone's Feed
from ensta import Host

host = Host(username, password)
posts = host.posts("leomessi", 100)  # Want full list? Set count to '0'

for post in posts:
    print(post.caption_text)
    print(post.like_count)    
Add Comment on Posts
from ensta import Host

host = Host(username, password)

post_id = host.get_post_id("https://www.instagram.com/p/Czr2yLmroCQ/")

host.comment("Looks great!", post_id)
Like/Unlike Posts
from ensta import Host

host = Host(username, password)

post_id = host.get_post_id("https://www.instagram.com/p/Czr2yLmroCQ/")

host.like(post_id)
host.unlike(post_id)
Fetch Post's Likers
from ensta import Host

host = Host(username, password)

post_id = host.get_post_id("https://www.instagram.com/p/Czr2yLmroCQ/")
likers = host.likers(post_id)

for user in likers.users:
    print(user.username)
    print(user.profile_picture_url)
Change Profile Picture
from ensta import Mobile

mobile = Mobile(username, password)

mobile.change_profile_picture("image.jpg")
Edit Biography, Display Name
from ensta import Host

host = Host(username, password)

host.change_display_name("Lionel Messi")
host.change_bio("Athlete")
Fetch Your Email, Gender, Birthday, etc.
from ensta import Host

host = Host(username, password)
me = host.private_info()

print(me.email)
print(me.gender)
print(me.birthday)
Block/Unblock User
from ensta import Mobile

mobile = Mobile(username, password)

mobile.block(123456789)  # Use UserID
mobile.unblock(123456789)  # Use UserID
Upload Story (Photo)
from ensta import Mobile

mobile = Mobile(username, password)

upload_id = mobile.get_upload_id("image.jpg")

mobile.upload_story(upload_id)
Upload Story (Photo) + Link Sticker
from ensta import Mobile
from ensta.structures import StoryLink

mobile = Mobile(username, password)

upload_id = mobile.get_upload_id("image.jpg")

mobile.upload_story(upload_id, entities=[
    StoryLink(title="Google", url="https://google.com")
])
Send Message (Text)
from ensta import Mobile

mobile = Mobile(username, password)  # Or use email
direct = mobile.direct()

direct.send_text("Hello", thread_id)
Send Message (Picture)
from ensta import Mobile

mobile = Mobile(username, password)  # Or use email
direct = mobile.direct()

media_id = direct.fb_upload_image("image.jpg")

direct.send_photo(media_id, thread_id)

Supported Classes


Host Class (Authenticated)

Requires login, and has many features.

from ensta import Host

host = Host(username, password)
profile = host.profile("leomessi")

print(profile.biography)

Guest Class (Non-Authenticated)

Doesn't require login, but has limited features.

from ensta import Guest

guest = Guest()
profile = guest.profile("leomessi")

print(profile.biography)

Discord Community

Ask questions, discuss upcoming features and meet other developers.

Support Me

Wish to support this project? Please consider buying me a coffee here:

Contributors

Contributors

Disclaimer

This is a third party library and not associated with Instagram. We're strictly against spam. You are liable for all the actions you take.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ensta-5.2.1.tar.gz (44.1 kB view details)

Uploaded Source

Built Distribution

ensta-5.2.1-py3-none-any.whl (56.6 kB view details)

Uploaded Python 3

File details

Details for the file ensta-5.2.1.tar.gz.

File metadata

  • Download URL: ensta-5.2.1.tar.gz
  • Upload date:
  • Size: 44.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.18

File hashes

Hashes for ensta-5.2.1.tar.gz
Algorithm Hash digest
SHA256 0600d92941e04692881816dae7b5df4c2a8d34734659651829842c6a92a2922f
MD5 e6d98f1f4d353c6c6f30392a960b7bcd
BLAKE2b-256 2e3a6557150e01d415dbc3f857e0a2608e4c243ae8b7011e8ac9aeba0801038f

See more details on using hashes here.

Provenance

File details

Details for the file ensta-5.2.1-py3-none-any.whl.

File metadata

  • Download URL: ensta-5.2.1-py3-none-any.whl
  • Upload date:
  • Size: 56.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.18

File hashes

Hashes for ensta-5.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a3b514f2e544751428d9ae31eeeb2a4822c9af04db794bd67a60006ee69108ea
MD5 7eae900cc142f07140763fd4b9775829
BLAKE2b-256 b3fa0988cd167ca5aba8f9eac900eeb4a77c9b33f6ee79e9a12a20866bc4482a

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page