sungkhum

anothertest

Oct 13th, 2021
701
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import json
  2. import urllib3
  3. import boto3
  4. import time
  5. from botocore.config import Config
  6.  
  7. def lambda_handler(event, context):
  8.     DB_NAME = "DeSo"
  9.     TBL_NAME = "CreatorCoin"
  10.     CURRENT_TIME = str(int(time.time() * 1000))
  11.    
  12.     REPEAT = 300
  13.    
  14.     for x in range(REPEAT):
  15.  
  16.         if 'more' in event and event["more"] != "False":
  17.             encoded_body = json.dumps({
  18.             "OrderBy": "influencer_coin_price",
  19.             "PublicKeyBase58Check" : event["next"],
  20.             "NumToFetch": 100,
  21.             })
  22.         else:
  23.             encoded_body = json.dumps({
  24.             "OrderBy": "influencer_coin_price",
  25.             "NumToFetch": 100,
  26.             })
  27.            
  28.         try:
  29.             http = urllib3.PoolManager()
  30.             response = http.request('POST', 'https://api.bitclout.com/api/v0/get-profiles',
  31.                      headers={'Content-Type': 'application/json'},
  32.                      body=encoded_body)
  33.             data = response.data
  34.             if response.data:
  35.                 values = json.loads(data)
  36.             else:
  37.                 return { "more": False,
  38.                      "next": False,
  39.                      }
  40.             records = []
  41.             if 'ProfilesFound' in values:
  42.                 for i in values["ProfilesFound"]:
  43.                     dimension = [ {'Name': 'PublicKeyBase58Check', 'Value': i["PublicKeyBase58Check"]}, {'Name': 'Username', 'Value': i["Username"]} ]
  44.                     record = { 'Time': CURRENT_TIME, 'Dimensions': dimension,'MeasureName': 'CoinPrice', 'MeasureValue': str(i["CoinPriceDeSoNanos"]), 'MeasureValueType': 'BIGINT'}
  45.                     records.append(record)
  46.             else:
  47.                 return { "more": False,
  48.                         "next": False,
  49.                         "message": values,
  50.                         }
  51.             try:
  52.                 client = boto3.client('timestream-write', config=Config(read_timeout=20, max_pool_connections=5000, retries={'max_attempts': 10}))
  53.                 response = client.write_records(DatabaseName=DB_NAME,TableName=TBL_NAME,Records=records)
  54.             except Exception as err:
  55.                 print("Timestream Error:", err)
  56.                
  57.         except urllib3.exceptions.HTTPError as e:
  58.             print('Request failed:', e.reason)
  59.            
  60.         if 'NextPublicKey' in values and values["NextPublicKey"]:
  61.             event["more"] = True
  62.             event["next"] = values["NextPublicKey"]
  63.         else:
  64.             event["more"] = False
  65.             event["next"] = False
  66.            
  67.     if 'NextPublicKey' in values and values["NextPublicKey"]:
  68.         return { "more": True,
  69.                  "next": values["NextPublicKey"],
  70.                  }
  71.     else:
  72.         return { "more": False,
  73.                  "next": False,
  74.                  "message": values,
  75.                  }
  76.  
RAW Paste Data