With the Python Requests module, is there a chance to send and receive messages to Instagram via terminal without using any browser? Do we need to use the Instagram API to shoot and send messages?
Some time ago I made this function to send a message using the session_id and csfrtoken cookie, you can find it in the cookies saved in the browser, it is not documented but if you have some experience with python you will be able to understand it, if not ask me :)
import base64
import hashlib
import json
import random
import sys
import threading
import uuid
import requests
import time
def generate_device_id(seed):
return "android-" + seed[:16]
def generate_UUID(uuid_type):
generated_uuid = str(uuid.uuid4())
if uuid_type:
return generated_uuid
else:
return generated_uuid.replace("-", "")
def my_random_string(string_length=10):
"""Returns a random string of length string_length."""
random = str(uuid.uuid4()) # Convert UUID format to a Python string.
random = random.upper() # Make all characters uppercase.
random = random.replace("-", "") # Remove the UUID '-'.
return random[0:string_length] # Return the random string.
def login_with_cookie(cookie: str):
sessionid = cookie.split(':')[0]
userid = cookie.split(':')[0].split('%')[0]
to_encrypt = {"ds_user_id": userid, "sessionid": sessionid, "should_use_header_over_cookies": True}
to_encrypt = str(to_encrypt).replace("'", '"').replace('True', 'true').replace(' ', '')
message_bytes = to_encrypt.encode('ascii')
base64_bytes = base64.b64encode(message_bytes)
auth = base64_bytes.decode('ascii')
send_dm('recipe_user_id', 'Hello, this is a test message', auth)
def send_dm(id_to_dm, message, AUTHORIZATION):
json_auth = json.loads(base64.b64decode(AUTHORIZATION).decode('utf-8'))
my_user_id = json_auth['ds_user_id']
a_uuid = generate_UUID(True)
a_device_id = generate_device_id(generate_UUID(False))
REQUEST_HEADERS = {
"X-Pigeon-Rawclienttime": str(round(time.time() * 1000)),
"X-IG-Bandwidth-Speed-KBPS": str(random.randint(7000, 10000)),
"X-IG-Bandwidth-TotalBytes-B": str(random.randint(500000, 900000)),
"X-IG-Bandwidth-TotalTime-MS": str(random.randint(50, 150)),
"x-ig-app-startup-country": "AR",
"x-bloks-version-id": "251c3023d7ef985a0e5d91b885c0c03bbb32b4b721d8de33bf9f667ba39b41ff",
"x-ig-www-claim": "hmac.AR3ilHwjy8Cu_OTGprygpxuify0pDUKnrJvY1wRvzNSFRwwD",
"x-bloks-is-layout-rtl": "false",
"x-bloks-is-panorama-enabled": "true",
"x-ig-device-id": a_uuid,
"x-ig-family-device-id": "0ff91d16-df30-4b83-91bb-ef6fe5a751fa",
"x-ig-android-id": a_device_id,
"x-ig-timezone-offset": "-7200",
"x-ig-nav-chain": "1kw:feed_timeline:1,UserDetailFragment:profile:5,ProfileMediaTabFragment:profile:6,3xM:direct_thread:7",
"x-ig-salt-ids": "1061163349",
"x-ig-connection-type": "WIFI",
"x-ig-capabilities": "3brTvx0=",
"x-ig-app-id": "567067343352427",
"priority": "u=3",
"user-agent": "Instagram 207.0.0.39.120 Android (22/5.1.1; 240dpi; 720x1280; samsung; SM-G977N; beyond1q; shamu; es_ES; 321039156)",
"accept-language": "es-ES, en-US",
"authorization": "Bearer IGT:2:" + AUTHORIZATION,
"x-mid": "YYMo4AALAAFf64y70slcLACzpklN",
"ig-u-ig-direct-region-hint": "ATN,48835113737,1667518455:01f7b0ee46fcbbaff69dfacfa670268aabc23145ec3868c74813073fb68730959e36791f",
"ig-u-shbid": "9315,48835113737,1667316351:01f7d3483a632756a67739318c409667f8bf628ab96357ac142d5f8d8b1aec633e00925d",
"ig-u-shbt": "1635780351,48835113737,1667316351:01f71ee7fe18abe0f30183c1e9ee8bf2e11701e107f982cf35ad9f2095bf08e0b3d69414",
"ig-u-ds-user-id": str(my_user_id),
"ig-u-rur": "VLL,48835113737,1667518478:01f7e869dc139eee715e5c5bfff4db350fe9c7f4c59979f70010e4333adbede244d9d068",
"ig-intended-user-id": str(my_user_id),
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
"accept-encoding": "zstd, gzip, deflate",
"x-fb-http-engine": "Liger",
"x-fb-client-ip": "True",
"x-fb-server-cluster": "True"
}
print('Dm to [{}] current session-id {}'.format(id_to_dm, my_user_id))
send_media = {
"client_context": generate_UUID(True),
"action": "send_item",
"recipient_users": "[[" + id_to_dm + "]]",
"send_attribution": "photo_view_other",
"media_id": "2687403059380025174_3949224551",
"_uuid": a_uuid
}
send_txt = {
"client_context": generate_UUID(True),
"action": "send_item",
"recipient_users": "[[" + id_to_dm + "]]",
"text": message,
"_uuid": a_uuid
}
resp = requests.post('https://i.instagram.com/api/v1/direct_v2/threads/broadcast/media_share/?media_type=photo',
headers=REQUEST_HEADERS, data=send_media)
if resp.status_code == 200:
resp_message = requests.post('https://i.instagram.com/api/v1/direct_v2/threads/broadcast/text/',
headers=REQUEST_HEADERS, data=send_txt)
if resp_message.status_code == 200:
print('Status: message sent succefully')
else:
print('Status: error', resp.text)
else:
print('Status: error', resp.text)
login_with_cookie('session_id=paste_sessionid_here;csfrtoken=paste_csfrtokenhere')