Python 简单instagram bot的环境变量

Python 简单instagram bot的环境变量,python,python-3.x,pycharm,instagram,Python,Python 3.x,Pycharm,Instagram,我下载了这个机器人(为了教育目的,如果它使它更好), 现在的问题是,当我试图运行程序时,它会说 please provide USERNAME and PASSWORD environement variables. Abording... 当然,这一行只是代码的一部分,但我不确定如何或在何处输入我的帐户详细信息(在pycharm内部或外部) 我试着把它放在写着“用户名”或“密码”的地方——在大写字母或其他字母之间切换,但什么也没发生 post_data = { 'user

我下载了这个机器人(为了教育目的,如果它使它更好), 现在的问题是,当我试图运行程序时,它会说

please provide USERNAME and PASSWORD environement variables. Abording...
当然,这一行只是代码的一部分,但我不确定如何或在何处输入我的帐户详细信息(在pycharm内部或外部)

我试着把它放在写着“用户名”或“密码”的地方——在大写字母或其他字母之间切换,但什么也没发生

  post_data = {
        'username': os.environ.get('USERNAME'),
        'password': os.environ.get('PASSWORD')
    }
主要代码:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sys
import time
import random
import requests
import json
import re

instagram_url = 'https://www.instagram.com'
login_route = '%s/accounts/login/ajax/' % (instagram_url)
logout_route = '%s/accounts/logout/' % (instagram_url)
profile_route = '%s/%s/'
query_route = '%s/graphql/query/' % (instagram_url)
unfollow_route = '%s/web/friendships/%s/unfollow/'

session = requests.Session()

def login():
    session.headers.update({
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'en-US,en;q=0.8',
        'Connection': 'keep-alive',
        'Content-Length': '0',
        'Host': 'www.instagram.com',
        'Origin': 'https://www.instagram.com',
        'Referer': 'https://www.instagram.com/',
        'User-Agent': ('Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 \
            (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36'),
        'X-Instagram-AJAX': '1',
        'X-Requested-With': 'XMLHttpRequest'
    })
    session.cookies.update({
        'ig_pr': '1',
        'ig_vw': '1920',
    })

    reponse = session.get(instagram_url)
    session.headers.update({
        'X-CSRFToken': reponse.cookies['csrftoken']
    })

    time.sleep(random.randint(2, 6))

    post_data = {
        'username': os.environ.get('USERNAME'),
        'password': os.environ.get('PASSWORD')
    }

    response = session.post(login_route, data=post_data, allow_redirects=True)
    response_data = json.loads(response.text)

    if response_data['authenticated']:
        session.headers.update({
            'X-CSRFToken': response.cookies['csrftoken']
        })

    return response_data['authenticated']


# Not so useful, it's just to simulate human actions better
def get_user_profile(username):
    response = session.get(profile_route % (instagram_url, username))
    extract = re.search(r'window._sharedData = (.+);</script>', str(response.text))
    response = json.loads(extract.group(1))
    return response['entry_data']['ProfilePage'][0]['graphql']['user']


def get_followers_list():
    followers_list = []

    query_hash = '56066f031e6239f35a904ac20c9f37d9'
    variables = {
        "id":session.cookies['ds_user_id'],
        "include_reel":False,
        "fetch_mutual":False,
        "first":50
    }

    response = session.get(query_route, params={'query_hash': query_hash, 'variables': json.dumps(variables)})
    while response.status_code != 200:
        time.sleep(600) # querying too much, sleeping a bit before querying again
        response = session.get(query_route, params={'query_hash': query_hash, 'variables': json.dumps(variables)})

    print('.', end='', flush=True)

    response = json.loads(response.text)

    for edge in response['data']['user']['edge_followed_by']['edges']:
        followers_list.append(edge['node'])

    while response['data']['user']['edge_followed_by']['page_info']['has_next_page']:
        variables['after'] = response['data']['user']['edge_followed_by']['page_info']['end_cursor']

        time.sleep(2)

        response = session.get(query_route, params={'query_hash': query_hash, 'variables': json.dumps(variables)})
        while response.status_code != 200:
            time.sleep(600) # querying too much, sleeping a bit before querying again
            response = session.get(query_route, params={'query_hash': query_hash, 'variables': json.dumps(variables)})

        print('.', end='', flush=True)

        response = json.loads(response.text)

        for edge in response['data']['user']['edge_followed_by']['edges']:
            followers_list.append(edge['node'])

    return followers_list


def get_following_list():
    follows_list = []

    query_hash = 'c56ee0ae1f89cdbd1c89e2bc6b8f3d18'
    variables = {
        "id":session.cookies['ds_user_id'],
        "include_reel":False,
        "fetch_mutual":False,
        "first":50
    }

    response = session.get(query_route, params={'query_hash': query_hash, 'variables': json.dumps(variables)})
    while response.status_code != 200:
        time.sleep(600) # querying too much, sleeping a bit before querying again
        response = session.get(query_route, params={'query_hash': query_hash, 'variables': json.dumps(variables)})

    print('.', end='', flush=True)

    response = json.loads(response.text)

    for edge in response['data']['user']['edge_follow']['edges']:
        follows_list.append(edge['node'])

    while response['data']['user']['edge_follow']['page_info']['has_next_page']:
        variables['after'] = response['data']['user']['edge_follow']['page_info']['end_cursor']

        time.sleep(2)

        response = session.get(query_route, params={'query_hash': query_hash, 'variables': json.dumps(variables)})
        while response.status_code != 200:
            time.sleep(600) # querying too much, sleeping a bit before querying again
            response = session.get(query_route, params={'query_hash': query_hash, 'variables': json.dumps(variables)})

        print('.', end='', flush=True)

        response = json.loads(response.text)

        for edge in response['data']['user']['edge_follow']['edges']:
            follows_list.append(edge['node'])

    return follows_list


def unfollow(user):
    response = session.get(profile_route % (instagram_url, user['username']))
    time.sleep(random.randint(2, 4))

    # update header again, idk why it changed
    session.headers.update({
        'X-CSRFToken': response.cookies['csrftoken']
    })

    response = session.post(unfollow_route % (instagram_url, user['id']))
    response = json.loads(response.text)

    if response['status'] != 'ok':
        print('Error while trying to unfollow {}. Retrying in a bit...'.format(user['username']))
        print('ERROR: {}'.format(unfollow.text))
        return False
    return True


def logout():
    post_data = {
        'csrfmiddlewaretoken': session.cookies['csrftoken']
    }

    logout = session.post(logout_route, data=post_data)

    if logout.status_code != 200:
        return False
    return True


def main():
    if not os.environ.get('USERNAME') or not os.environ.get('PASSWORD'):
        sys.exit('please provide USERNAME and PASSWORD environement variables. Abording...')

    is_logged = login()
    if is_logged == False:
        sys.exit('login failed, verify user/password combination')

    time.sleep(random.randint(2, 4))

    connected_user = get_user_profile(os.environ.get('USERNAME'))
    print('You\'re now logged as {} ({} followers, {} following)'.format(connected_user['username'], connected_user['edge_followed_by']['count'], connected_user['edge_follow']['count']))

    time.sleep(random.randint(2, 4))

    print('building followers list...', end='', flush=True)
    followers_list = get_followers_list()
    print(' done')

    print('building following list...', end='', flush=True)
    following_list = get_following_list()
    print(' done')

    unfollow_users_list = [user for user in following_list if user not in followers_list]
    print('you are following {} user(s) who aren\'t following you.'.format(len(unfollow_users_list)))

    if len(unfollow_users_list) > 0:
        print('Begin to unfollow users...')

        for user in unfollow_users_list:
            if not os.environ.get('UNFOLLOW_VERIFIED') and user['is_verified'] == True:
                continue

            time.sleep(random.randint(2, 4))

            print('unfollowing {}'.format(user['username']))

            while unfollow(user) == False:
                time.sleep(random.randint(1, 3) * 1000) # High number on purpose


    is_logged_out = logout()
    if is_logged_out:
        sys.exit(0)


if __name__ == "__main__":
    main()
#/usr/bin/env python
#-*-编码:utf-8-*-
导入操作系统
导入系统
导入时间
随机输入
导入请求
导入json
进口稀土
instagramhttps://www.instagram.com'
登录路径=“%s/accounts/login/ajax/”%(instagram\u url)
注销路径='%s/帐户/注销/'%(instagram\u url)
配置文件\路由='%s/%s/'
查询路径=“%s/graphql/query/”%(instagram\u url)
取消跟随路径=“%s/web/friendships/%s/unfollow/”
会话=请求。会话()
def login():
session.headers.update({
“接受编码”:“gzip,deflate”,
‘接受语言’:‘en-US,en;q=0.8’,
“连接”:“保持活动状态”,
“内容长度”:“0”,
“主机”:“www.instagram.com”,
“来源”:https://www.instagram.com',
“Referer”:https://www.instagram.com/',
“用户代理”:(Mozilla/5.0(Windows NT 10.0;WOW64)AppleWebKit/537.36\
(KHTML,如壁虎)铬/48.0.2564.103狩猎/537.36’,
“X-Instagram-AJAX”:“1”,
“X-request-With':“XMLHttpRequest”
})
session.cookies.update({
“ig_pr”:“1”,
"ig_vw":"1920",,
})
response=session.get(instagram\u url)
session.headers.update({
“X-CSRFToken”:reponse.cookies['CSRFToken']
})
时间.睡眠(random.randint(2,6))
post_数据={
“用户名”:os.environ.get('username'),
“密码”:os.environ.get('password')
}
response=session.post(登录路径,数据=post\u数据,允许重定向=True)
response\u data=json.load(response.text)
如果响应_数据['authenticated']:
session.headers.update({
“X-CSRFToken”:响应.cookies['CSRFToken']
})
返回响应_数据['authenticated']
#没什么用,只是为了更好地模拟人类的行为
def get_user_配置文件(用户名):
response=session.get(profile\u route%(instagram\u url,用户名))
extract=re.search(r'window.\u sharedData=(.+);”,str(response.text))
response=json.load(extract.group(1))
返回响应['entry_data']['ProfilePage'][0]['graphql']['user']
def get_followers_list():
追随者列表=[]
查询_散列='56066f031e6239f35a904ac20c9f37d9'
变量={
“id”:session.cookies['ds\u user\u id'],
“包含卷盘”:错误,
“fetch_mutual”:False,
“第一”:50
}
response=session.get(查询路径,参数={'query\u hash':查询散列'variables':json.dumps(variables)})
while response.status_code!=200:
时间。睡眠(600)#查询太多,在再次查询之前先睡一会儿
response=session.get(查询路径,参数={'query\u hash':查询散列'variables':json.dumps(variables)})
打印('.',结束='',刷新=真)
response=json.load(response.text)
对于响应中的边缘['data']['user']['edge\u后跟']['edges']:
followers\u list.append(边['node'])
当响应['data']['user']['edge\u后跟']['page\u info']['has\u next\u page']时:
变量['after']=响应['data']['user']['edge\u后跟']['page\u info']['end\u cursor']
时间。睡眠(2)
response=session.get(查询路径,参数={'query\u hash':查询散列'variables':json.dumps(variables)})
while response.status_code!=200:
时间。睡眠(600)#查询太多,在再次查询之前先睡一会儿
response=session.get(查询路径,参数={'query\u hash':查询散列'variables':json.dumps(variables)})
打印('.',结束='',刷新=真)
response=json.load(response.text)
对于响应中的边缘['data']['user']['edge\u后跟']['edges']:
followers\u list.append(边['node'])
返回追随者列表
def get_以下_列表():
以下是_列表=[]
查询_散列='c56ee0ae1f89cdbd1c89e2bc6b8f3d18'
变量={
“id”:session.cookies['ds\u user\u id'],
“包含卷盘”:错误,
“fetch_mutual”:False,
“第一”:50
}
response=session.get(查询路径,参数={'query\u hash':查询散列'variables':json.dumps(variables)})
while response.status_code!=200:
时间。睡眠(600)#查询太多,在再次查询之前先睡一会儿
response=session.get(查询路径,参数={'query\u hash':查询散列'variables':json.dumps(variables)})
打印('.',结束='',刷新=真)
response=json.load(response.text)
对于响应中的边缘['data']['user']['edge\u follow']['edges']:
跟随列表。追加(边['node'])
当响应['data']['user']['edge\u follow']['page\u info']['has\u next\u page']时:
变量['after']=响应['data']['user']['edge\u follow']['page\u info']['end\u cursor']
时间。睡眠(2)
response=session.get(查询路径,参数={'query\u hash':查询散列'variables':json.dumps(variables)})
while response.status_code!=200:
时间。睡眠(600)#查询太多,在再次查询之前先睡一会儿
response=session.get(查询路径,参数={'query\u hash':查询散列'variables':json.dumps(variables)})
打印('.',结束='',刷新=真)
response=json.load(response.text)
对于响应中的边缘['data']['user']['edge\u follow']['edges']:
跟随列表。追加(边['node'])
返回以下列表
def取消跟踪(用户):
response=session.get(profile\u route%(instagram\u url,用户['username']))
时间。睡眠(random.randint(2,4))
#再次更新标题,idk更改原因
session.headers.update({
“X-CSRFToken”:响应.cookies['CSRFToken']
})
响应=会话。