简体   繁体   中英

Sending and receiving instagram dm messages with Python Requests module

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')


ok, but what is the "AUTHORIZATION" argument should be, i tried everything and cant figure out

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM