def __init__(self, debug=False, IGDataPath=None):

        self.debug = None
        self.IGDataPath = None
        self.username = None
        self.uuid = None
        self.waterfall_id = None
        self.token = None
        self.userAgent = None
        self.settings = None
        self.proxy = None  # Full Proxy
        self.proxyHost = None  # Proxy Host and Port
        self.proxyAuth = None  # Proxy User and Pass

        self.username = ''
        self.debug = debug
        self.uuid = SignatureUtils.generateUUID(True)
        self.waterfall_id = SignatureUtils.generateUUID(True)

        if IGDataPath is not None:
            self.IGDataPath = IGDataPath
        else:
            self.IGDataPath = os.path.join(
                os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data'),
                ''
            )

        self.userAgent = 'Instagram ' + Constants.VERSION + ' Android (18/4.3; 320dpi; 720x1280; Xiaomi; HM 1SW; armani; qcom; en_US)'
    def __init__(self, debug=False, IGDataPath=None):

        self.debug = None
        self.IGDataPath = None
        self.username = None
        self.uuid = None
        self.waterfall_id = None
        self.token = None
        self.userAgent = None
        self.settings = None
        self.proxy = None  # Full Proxy
        self.proxyHost = None  # Proxy Host and Port
        self.proxyAuth = None  # Proxy User and Pass

        self.username = ''
        self.debug = debug
        self.uuid = SignatureUtils.generateUUID(True)
        self.waterfall_id = SignatureUtils.generateUUID(True)

        if IGDataPath is not None:
            self.IGDataPath = IGDataPath
        else:
            self.IGDataPath = os.path.join(
                os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data'),
                ''
            )

        self.userAgent = 'Instagram ' + Constants.VERSION + ' Android (18/4.3; 320dpi; 720x1280; Xiaomi; HM 1SW; armani; qcom; en_US)'
    def usernameSuggestions(self, email, name):
        data = json.dumps(
            OrderedDict([
                ('name', SignatureUtils.generateUUID(True)),
                ('waterfall_id', SignatureUtils.generateUUID(True)),
                ('email', email),
                ('_csrftoken', 'missing'),
            ])
        )

        return UsernameSuggestionsResponse(
            self.request('accounts/username_suggestions/', SignatureUtils.generateSignature(data))[1])
    def checkEmail(self, email):

        data = json.dumps(
            OrderedDict([
                ('qe_id', SignatureUtils.generateUUID(True)),
                ('waterfall_id', SignatureUtils.generateUUID(True)),
                ('email', email),
                ('_csrftoken', 'missing'),
            ])
        )

        return CheckEmailResponse(self.request('users/check_email/', SignatureUtils.generateSignature(data))[1])
    def usernameSuggestions(self, email, name):
        data = json.dumps(
            OrderedDict([
                ('name', SignatureUtils.generateUUID(True)),
                ('waterfall_id', SignatureUtils.generateUUID(True)),
                ('email', email),
                ('_csrftoken', 'missing'),
            ])
        )

        return UsernameSuggestionsResponse(
            self.request('accounts/username_suggestions/', SignatureUtils.generateSignature(data))[1])
    def checkEmail(self, email):

        data = json.dumps(
            OrderedDict([
                ('qe_id', SignatureUtils.generateUUID(True)),
                ('waterfall_id', SignatureUtils.generateUUID(True)),
                ('email', email),
                ('_csrftoken', 'missing'),
            ])
        )

        return CheckEmailResponse(self.request('users/check_email/', SignatureUtils.generateSignature(data))[1])
Beispiel #7
0
    def createAccount(self, username, password, email, name=''):
        """
        Register account.
        :type username: str
        :param username:
        :type password: str
        :param password:
        :type email: str
        :param email:

        :rtype: object
        :return: Registration data
        """

        token = self.getCsfrtoken()
        data = json.dumps(
            OrderedDict([
                ('allow_contacts_sync', 'true'),
                ('phone_id', self.uuid),
                ('_csrftoken', token),
                ('username', username),
                ('first_name', name),
                ('guid', self.uuid),
                ('device_id',
                 SignatureUtils.generateDeviceId(
                     hashlib.md5(username + password).hexdigest())),
                ('email', email),
                ('force_sign_up_code', ''),
                ('waterfall_id', self.waterfall_id),
                ('qs_stamp', ''),
                ('password', password),
            ]))

        result = self.request('accounts/create/',
                              SignatureUtils.generateSignature(data))
        header = result[0]
        response = AccountCreationResponse(result[1])

        if response.isAccountCreated():
            self.username_id = response.getUsernameId()
            self.settings.set('username_id', self.username_id)
            match = re.search(r'^Set-Cookie: csrftoken=([^;]+)', header,
                              re.MULTILINE)
            token = match.group(1) if match else ''
            self.settings.set('token', token)

        return response
    def createAccount(self, username, password, email, name=''):
        """
        Register account.
        :type username: str
        :param username:
        :type password: str
        :param password:
        :type email: str
        :param email:

        :rtype: object
        :return: Registration data
        """

        token = self.getCsfrtoken()
        data = json.dumps(
            OrderedDict([
                ('allow_contacts_sync', 'true'),
                ('phone_id', self.uuid),
                ('_csrftoken', token),
                ('username', username),
                ('first_name', name),
                ('guid', self.uuid),
                ('device_id', SignatureUtils.generateDeviceId(hashlib.md5(username + password).hexdigest())),
                ('email', email),
                ('force_sign_up_code', ''),
                ('waterfall_id', self.waterfall_id),
                ('qs_stamp', ''),
                ('password', password),
            ])
        )

        result = self.request('accounts/create/', SignatureUtils.generateSignature(data))
        header = result[0]
        response = AccountCreationResponse(result[1])

        if response.isAccountCreated():
            self.username_id = response.getUsernameId()
            self.settings.set('username_id', self.username_id)
            match = re.search(r'^Set-Cookie: csrftoken=([^;]+)', header, re.MULTILINE)
            token = match.group(1) if match else ''
            self.settings.set('token', token)

        return response
    def checkUsername(self, username):
        """
        Checks if the username is already taken (exists).
        :type username: str
        :param username:
        :rtype: object
        :return: Username availability data
        """
        data = json.dumps(
            OrderedDict([
                ('_uuid', self.uuid),
                ('username', username),
                ('_csrftoken', 'missing'),
            ])
        )

        self.username = username
        self.settings = Settings(os.path.join(self.IGDataPath, self.username, 'settings-' + username + '.dat'))
        return CheckUsernameResponse(self.request('users/check_username/', SignatureUtils.generateSignature(data))[1])
    def checkUsername(self, username):
        """
        Checks if the username is already taken (exists).
        :type username: str
        :param username:
        :rtype: object
        :return: Username availability data
        """
        data = json.dumps(
            OrderedDict([
                ('_uuid', self.uuid),
                ('username', username),
                ('_csrftoken', 'missing'),
            ])
        )

        self.username = username
        self.settings = Settings(os.path.join(self.IGDataPath, self.username, 'settings-' + username + '.dat'))
        return CheckUsernameResponse(self.request('users/check_username/', SignatureUtils.generateSignature(data))[1])
    def direct_message(self, recipients, text):
        if not isinstance(recipients, list):
            recipients = [recipients]

        string = []
        for recipient in recipients:
            string.append('"' + recipient + '"')

        recipient_users = ','.join(string)

        endpoint = Constants.API_URL + 'direct_v2/threads/broadcast/text/'
        boundary = self.parent.uuid
        bodies = [
            OrderedDict([('type', 'form-data'), ('name', 'recipient_users'),
                         ('data', "[[" + recipient_users + "]]")]),
            OrderedDict([('type', 'form-data'), ('name', 'client_context'),
                         ('data', SignatureUtils.generateUUID(True))]),
            OrderedDict([('type', 'form-data'), ('name', 'thread_ids'),
                         ('data', '["0"]')]),
            OrderedDict([('type', 'form-data'), ('name', 'text'),
                         ('data', '' if text is None else text)]),
        ]

        data = self.buildBody(bodies, boundary)
        headers = [
            'Proxy-Connection: keep-alive',
            'Connection: keep-alive',
            'Accept: */*',
            'Content-type: multipart/form-data; boundary=' + boundary,
            'Accept-Language: en-en',
        ]

        buffer = BytesIO()
        ch = pycurl.Curl()
        ch.setopt(pycurl.URL, endpoint)
        ch.setopt(pycurl.USERAGENT, self.userAgent)
        ch.setopt(pycurl.WRITEFUNCTION, buffer.write)
        ch.setopt(pycurl.FOLLOWLOCATION, True)
        ch.setopt(pycurl.HEADER, True)
        ch.setopt(pycurl.VERBOSE, self.parent.debug)
        ch.setopt(pycurl.SSL_VERIFYPEER, self.verifyPeer)
        ch.setopt(pycurl.SSL_VERIFYHOST, self.verifyHost)
        ch.setopt(pycurl.HTTPHEADER, headers)
        ch.setopt(
            pycurl.COOKIEFILE,
            self.parent.IGDataPath + self.parent.username + "-cookies.dat")
        ch.setopt(
            pycurl.COOKIEJAR,
            self.parent.IGDataPath + self.parent.username + "-cookies.dat")
        ch.setopt(pycurl.POST, True)
        ch.setopt(pycurl.POSTFIELDS, data)

        if self.parent.proxy:
            ch.setopt(pycurl.PROXY, self.parent.proxyHost)
            if self.parent.proxyAuth:
                ch.setopt(pycurl.PROXYUSERPWD, self.parent.proxyAuth)

        ch.perform()
        resp = buffer.getvalue()
        header_len = ch.getinfo(pycurl.HEADER_SIZE)
        header = resp[0:header_len]
        upload = json.loads(resp[header_len:].decode('utf-8'))
        ch.close()