Untitled

 avatar
unknown
python
a year ago
3.5 kB
13
Indexable
import json
import hashlib
from hashlib import sha1
import requests
import hmac
import time
from base64 import b64encode
from hmac import new
from uuid import uuid4
from json_minify import json_minify

comId = 237285270
def timers():
     times =[
     {"start": int(time.time()), "end": int(time.time())+300}
     for times in range(30)]
     return times
class Client:
    def __init__(self, deviceId=None) -> None:
        self.api = f'https://proxy-nine-lac.vercel.app/proxy?url=https://service.narvii.com/api/v1'
        self.device_Id = self.dev() if not deviceId else deviceId
        self.headers = {
            "NDCDEVICEID": self.device_Id,
            #"NDC-MSG-SIG": dev.device_id_sig,
            "Accept-Language": "en-US",
            "Content-Type": "application/json; charset=utf-8",
            "User-Agent": "Apple iPhone12,1 iOS v15.5 Main/3.12.2",
            # "Host": "service.narvii.com",
            "Accept-Encoding": "gzip",
            "Connection": "Keep-Alive"
        }
        self.sid = None


    def generate_signature_message(self, data: str) -> str:
        signature_message = b64encode(
            bytes.fromhex("19") + new(bytes.fromhex("dfa5ed192dda6e88a12fe12130dc6206b1251e44"), data.encode("utf-8"), sha1).digest()).decode("utf-8")
        self.headers["NDC-MSG-SIG"] = signature_message
        return signature_message

    def dev(self):
        data = uuid4().bytes
        return ("19" + data.hex() + hmac.new(bytes.fromhex("E7309ECC0953C6FA60005B2765F99DBBC965C8E9"),bytes.fromhex("19") + data, hashlib.sha1).hexdigest()).upper()

    def login(self, email: str, password: str):
                data = json.dumps({
                    "email": email,
                    "v": 2,
                    "secret": f"0 {password}",
                    "deviceID": self.device_Id,
                    "clientType": 100,
                    "action": "normal",
                    "timestamp": int(time.time() * 1000)
                })
                self.headers["NDC-MSG-SIG"]=self.generate_signature_message(data)
                response = requests.post(f"{self.api}/g/s/auth/login", headers=self.headers, data=data).json()
                try:
                    self.sid = response["sid"]
                except:pass
                return response

    def join_community(self, comId: int):
        data = json.dumps({"timestamp": int(time.time() * 1000)})
        self.headers["NDC-MSG-SIG"]=self.generate_signature_message(data=data)
        response = requests.post(f"{self.api}/x{comId}/s/community/join?sid={self.sid}", headers=self.headers, data=data).json()
        return response
    
    def send_active_object(self, comId: int, timers: list = None, tz: int = -time.timezone // 1000):
        data = {
            "userActiveTimeChunkList": timers,
            "timestamp": int(time.time() * 1000),
            "optInAdsFlags": 2147483647,
            "timezone": tz
        }
        data = json_minify(json.dumps(data))
        self.headers["NDC-MSG-SIG"]=self.generate_signature_message(data=data)
        response = requests.post(f"{self.api}/x{comId}/s/community/stats/user-active-time?sid={self.sid}", headers=self.headers, data=data).json()
        return response


client = Client(deviceId="")

print(client.login("55", ""))
print(client.sid)
print(client.join_community(comId))
for _ in range(24):
    print(client.send_active_object(comId=comId,timers=timers()))
    time.sleep(10)
Editor is loading...
Leave a Comment