fbs
unknown
python
3 years ago
3.5 kB
12
Indexable
import logging
import os
import pickle
import sys
import asyncio
from datetime import datetime
from instagram_private_api import Client, ClientCookieExpiredError, ClientLoginRequiredError
from dateutil.relativedelta import relativedelta
from fbns_mqtt.fbns_mqtt import FBNSMQTTClient, FBNSAuth
import json
ABSOLUTE_PATH = lambda x: os.path.abspath(os.path.join(os.path.abspath(os.path.dirname(__file__)), x))
sys.path.append(ABSOLUTE_PATH('.'))
import pprint
STOP = asyncio.Event()
USERNAME = 'hiimnew02'
PASSWORD = 'C95d630!22'
proxym = "https://ghostaudience0wZNI:NsRxUwPGgC@46.8.31.218:58100"
SETTINGS_FILE = 'fbns_mqtt_settings_{USERNAME}.pickle'.format(**locals())
def save_settings(data):
with open(SETTINGS_FILE, 'wb') as pickle_file:
pickle.dump(data, pickle_file)
class ExtendedClient(Client):
def register_push(self, token):
endpoint = 'push/register/'
params = dict(
device_type='android_mqtt',
is_main_push_channel=True,
phone_id=self.phone_id,
device_token=token, # fbns_token
guid=self.uuid,
users=self.authenticated_user_id,
)
params.update(self.authenticated_params)
res = self._call_api(endpoint, params=params, unsigned=True)
return res
async def instagram_listener_worker():
if os.path.exists(ABSOLUTE_PATH(SETTINGS_FILE)):
with open(ABSOLUTE_PATH(SETTINGS_FILE), mode='rb') as f:
settings = pickle.load(f)
pprint.pprint(settings)
else:
settings = {}
client = FBNSMQTTClient()
fbns_auth = settings.get('fbns_auth')
if fbns_auth:
client.set_fbns_auth(FBNSAuth(fbns_auth))
def on_login_callback(client):
settings['api_settings'] = client.settings
save_settings(settings)
def on_fbns_auth(auth):
settings['fbns_auth'] = auth
settings['fbns_auth_received'] = datetime.now()
save_settings(settings)
def on_fbns_token(token):
if settings.get('fbns_token', None) == token:
if 'fbns_token_received' in settings and settings['fbns_token_received'] > datetime.now() - relativedelta(hours=24):
# Do not register token twice in 24 hours
return
device_id = settings.get('device_id')
try:
if settings.get('api_settings'):
client = Client(USERNAME, PASSWORD, settings=settings.get('api_settings'))
else:
client = Client(USERNAME, PASSWORD, on_login=on_login_callback)
except (ClientCookieExpiredError, ClientLoginRequiredError) as e:
client = Client(USERNAME, PASSWORD,device_id=device_id, on_login=on_login_callback)
client.register_push(token)
settings['fbns_token'] = token
settings['fbns_token_received'] = datetime.now()
save_settings(settings)
def on_fbns_message(push):
if push.payload:
jse =json.loads(push.payload)
message = f"{jse['u']}:{jse['it']}"
#client_socket.send(message.encode())
client.on_fbns_auth = on_fbns_auth
client.on_fbns_token = on_fbns_token
client.on_fbns_message = on_fbns_message
await client.connect('mqtt-mini.facebook.com', 443, ssl=True, keepalive=900)
await STOP.wait()
await client.disconnect()
if __name__ == "__main__":
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(instagram_listener_worker())
except asyncio.CancelledError:
passEditor is loading...