Skip to main content

🔥 Python Library for Instagram Web & Mobile API Integration

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.

Revive the Project! 🌟

Contribute to ensta and help revive the project for future updates and maintainance.

Installation

Read the pre-requisites here.

pip install ensta

Example

Fetching profile info by username:

from ensta import Mobile

mobile = Mobile(username, password)

profile = mobile.profile("leomessi")

print(profile.full_name)
print(profile.biography)
print(profile.profile_pic_url)

Features

These features use the Mobile API.

Using Proxies

When to use a proxy:

  • You're being rate limited.
  • 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 Mobile

mobile = Mobile(
    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

Username is recommended to sign in. However, email can also be used.

from ensta import Mobile

# Recommended
mobile = Mobile(username, password)

# This also works
mobile = Mobile(email, password)
Change Profile Picture
from ensta import Mobile

mobile = Mobile(username, password)

mobile.change_profile_picture("image.jpg")
Fetch Profile Information
from ensta import Mobile

mobile = Mobile(username, password)

profile = mobile.profile("leomessi")

print(profile.full_name)
print(profile.biography)
print(profile.follower_count)
Follow/Unfollow Account
from ensta import Mobile

mobile = Mobile(username, password)

mobile.follow("leomessi")
mobile.unfollow("leomessi")
Change Biography
from ensta import Mobile

mobile = Mobile(username, password)

mobile.change_biography("New bio here.")
Switch to Private/Public Account
from ensta import Mobile

mobile = Mobile(username, password)

mobile.switch_to_private_account()
mobile.switch_to_public_account()
Username to UserID / UserID to Username
from ensta import Mobile

mobile = Mobile(username, password)

mobile.username_to_userid("leomessi")
mobile.userid_to_username("12345678")
Like/Unlike Post
from ensta import Mobile

mobile = Mobile(username, password)

mobile.like(media_id)
mobile.unlike(media_id)
Fetch Followers/Followings
from ensta import Mobile

mobile = Mobile(username, password)

followers = mobile.followers("leomessi")
followings = mobile.followings("leomessi")

for user in followers.list:
    print(user.full_name)

for user in followings.list:
    print(user.full_name)

# Fetching next chunk
followers = mobile.followers(
    "leomessi",
    next_cursor=followers.next_cursor
)
Add Comment to Post
from ensta import Mobile

mobile = Mobile(username, password)

mobile.comment("Hello", media_id)
Upload Photo
from ensta import Mobile

mobile = Mobile(username, password)

mobile.upload_photo(
    upload_id=upload_id,
    caption="Hello"
)
Upload Sidecar (Multiple Photos)
from ensta import Mobile
from ensta.structures import SidecarChild

mobile = Mobile(username, password)

mobile.upload_sidecar(
    children=[
        SidecarChild(uploda_id),
        SidecarChild(uploda_id),
        SidecarChild(uploda_id)
    ],
    caption="Hello"
)
Fetch Private Information (Yours)
from ensta import Mobile

mobile = Mobile(username, password)

account = mobile.private_info()

print(account.email)
print(account.account_type)
print(account.phone_number)
Update Display Name
from ensta import Mobile

mobile = Mobile(username, password)

mobile.update_display_name("Lionel Messi")
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)
Add Biography Link
from ensta import Mobile

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

link_id = mobile.add_bio_link(
    url="https://github.com/diezo",
    title="Diezo's GitHub"
)
Add Multiple Biography Links
from ensta import Mobile
from ensta.structures import BioLink

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

link_ids = mobile.add_bio_links([
    BioLink(url="https://example.com", title="Link 1"),
    BioLink(url="https://example.com", title="Link 2"),
    BioLink(url="https://example.com", title="Link 3")
])
Remove Biography Link
from ensta import Mobile

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

mobile.remove_bio_link(link_id)
Remove Multiple Biography Links
from ensta import Mobile

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

mobile.remove_bio_links([
    link_id_1,
    link_id_2,
    link_id_3
])
Clear All Biography Links
from ensta import Mobile

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

mobile.clear_bio_links()

Deprecated Features (Web API)

Features still using the Web API:

Upload Reel
from ensta import Web

host = Web(username, password)

video_id = host.upload_video_for_reel("Video.mp4", thumbnail="Thumbnail.jpg")

host.pub_reel(
    video_id,
    caption="Enjoying the winter! ⛄"
)
Fetch Web Profile Data
from ensta import Web

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

print(profile.full_name)
print(profile.biography)
print(profile.follower_count)
Fetch Someone's Feed
from ensta import Web

host = Web(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)    
Fetch Post's Likers
from ensta import Web

host = Web(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)

They'll be migrated to the Mobile API soon.

Supported Classes

Important: The Web Class is deprecated and it's features are being migrated to the Mobile Class. It'll be removed from Ensta upon completion.


Mobile Class (Authenticated)

Requires login, and has the most features.

from ensta import Mobile

mobile = Mobile(username, password)
profile = mobile.profile("leomessi")

print(profile.full_name)
print(profile.biography)
print(profile.profile_pic_url)

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)

Web Class (Authenticated) (Deprecated)
from ensta import Web

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

print(profile.biography)

Discord Community

Ask questions, discuss upcoming features and meet other developers.

Buy Me A Coffee

Support me in the development of this project.

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


Release history Release notifications | RSS feed

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.11.tar.gz (46.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ensta-5.2.11-py3-none-any.whl (66.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ensta-5.2.11.tar.gz
  • Upload date:
  • Size: 46.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for ensta-5.2.11.tar.gz
Algorithm Hash digest
SHA256 3a87f0dd9f7f03de4034a9b041d46b8aa86a070df4d8d79b991f4d50de94bdd1
MD5 ebd7b86eb0a5929fca4f8a552d4fc883
BLAKE2b-256 44d679c8148aa1b669436e605a13506841570a46e226e940c17307a2da4117b1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ensta-5.2.11-py3-none-any.whl
  • Upload date:
  • Size: 66.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for ensta-5.2.11-py3-none-any.whl
Algorithm Hash digest
SHA256 eaf87f8b5f4fe77916bab0c557b5a151107af189d0b19a116575d0cf57745d1d
MD5 eb98b78ebf4983441756e5bfda11e5ac
BLAKE2b-256 be5e795ddf2624059c188c8bbd46754e57dbc2ea93cfb79eb91f117d1316bc1b

See more details on using hashes here.

Supported by

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