Last active
September 3, 2023 00:52
-
-
Save sungkhum/2249b1747ced402723fbc9a7745d1f1d to your computer and use it in GitHub Desktop.
A Python script using GraphQL to get the social graph of DeSo users for data processing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import json | |
import requests | |
from requests.adapters import HTTPAdapter | |
from urllib3.util.retry import Retry | |
import time | |
# Get transactions and info on account: | |
# https://graphql-prod.deso.com/?explorerURLState=N4IgJg9gxgrgtgUwHYBcQC4QEcYIE4CeABAIJRQQyoBCBAqgM75ICGiAFACQxN6uLoiAZRR4AlkgDmAQgCURYAB0kRIi3KUa9XvwTsezNgkHcdR%2BUpWqiABxgAjADZioAaQQEANMutEDfI28rVTAEBihxGxQxCCQg31CGCGoWRxYkKAQFH18ie1T0zIA5dIgGHNUAXwqicgBhCAkGAEkkOrE8WDTo2JKkMpqKCQAFcUyAETCIPoHg2rwEFhQIPBSGMQZhxtRyuYjF5bwGiRS0jLDsudVllFSGqhQa6r2FpZXjpFPCsJIGOtfDpdckQbndNI85s8EvgxAA3BBgdwEBhA3Kgxz3VBPQbbADqS3wcBYeAA1jNdtCkgAZaAkhHkmpgMRsWJgBgAJQQmThCNRvnRmIhvih1iZLKQbKEyBQfOsAvB2LmADMII5HBAAO74FGWYHyh6K3wqtWaiSSWXXCC3DEKyE1RwISTqAgAWTCDBYkjCnO58LAFpBVrBBrtcwdTqgrvdnrCUtQAf1WNDvmcdJ1NUt1sFhusiAYHq9HK5CB5-t1aKDNpDwpqeYLselCcr2eT1iQSpQ1DEbKbWdtNbm7ZQDF%2BVJYDBQAHkNUh8L3g0mB74hwxp7OyxnA33q9YRap-L8klBmT0kCOGAAVYlemXl-nN-u7mo2MooQ-QE8xM-zquLp9zA98w-JYv3PC88HSD0oEBO85QfHcqmfV90yuLcFyFf9%2BQgs91FPFDgX6RIA2ubCoNPC8CBsLJYIIoxN0Q1DVAkOxh3oogEAAD1EFhxiWFg2KVBAEAZRi8nVKASQACXHAALNjKBQFiKWBWwHGcNwPDY7icOgr9pIYOTUL3IgRWeSoQE8EBYWJZknDCDAQHLRQQH8XRnMEZzWBQGT0i1NVyhAZRzMs8JIjQTAQEqIA | |
# Get paginated transactions for account: | |
# https://graphql-prod.deso.com/?explorerURLState=N4IgJg9gxgrgtgUwHYBcQC4QEcYIE4CeABACp4CGSAzuVCgJYTUAUAJAGb0A2K%2B6pFarQZMAYt154ANEQ708VFPwCSqGa3LtJ-AMIwFEabIBGCdoYS79VQwEoiwADpIiRFIJp1GLTjz6zfSRlOBSUA%2BUUZTW1ZaPwZU3M8SxMzC3snF1ciBDAAcwQqB2ds7KQIMARirNLXd0pPESQSAgAHKsza2qRyRBKuogBffq6IGBRW8aoR2vokSZRpmuzh5dXS1vIC1XNqruQwPQM8GdcAC3IqADkEAA8UAAUthFOiRXI8FCObE%2BXzy4eyQAbowYFQngUZushs5BiApCAgR96ORjFxChgQJ0iI4QIF8Lj%2BNjXLjJmj6FAANIIAiEva1XEIHDkLgkCB03EAIR0AEYAJoAGTyrTwEHYAFUAEoAJgAyjoAIoCzkQVpXJAACQAVgB2M5QURwK70EjSgDMAC1zAA2PlIAAaAFFKbKoBbKQ96GAHgrjAB3e24qH9QZSfq4kKKOk8gAMMbDWVxcROGCISBgXC4CZJIESFjp6czsPhICoUDw9FaaEwIEGQA | |
# Get creator coin held by account (to collect scams from scam accounts who hold their coin) | |
# https://graphql-prod.deso.com/?explorerURLState=N4IgJg9gxgrgtgUwHYBcQC4QEcYIE4CeABAIJRQQyoBCBAqgM75ICGiAFACQxN6uLoiAZRR4AlkgDmAQgCURYAB0kRIi3KUa9XvwTsezNgkHcdR%2BUpWqiABxgAjADZioAaQQEANMutEDfI28rVTAEBihxGxQxCCQg31CGCGoWRxYkKAQFH18ie1T0zIA5dIgGHNUAXwqiCIQWFAg8AGEICRS0jLDs4OskCESe3Os6hqah4et-XRrfat6qmvnFpEqQTxAANxZxFicwjBBLVUUQaaNTwVOhKDYAfQBJUNQxADMxBDA7gBEAeSKACp3ah0ACap2Uaw24UiaEwIEqQA | |
# Thanks to @Scam_Identified_DONT_BUY and @ScamHunters_inc for the list of known scammers and to https://altumbase.com/tools/acai/24 for the users in good standing | |
# This gets basic info about a user using the traditional DeSo API because I couldn't find this info in GraphQL | |
def get_user_status(public_key): | |
url = 'https://node.deso.org/api/v0/get-users-stateless' | |
headers = {'Content-Type': 'application/json'} | |
data = { | |
"PublicKeysBase58Check": [public_key], | |
"SkipHodlings": "True" | |
} | |
response = requests.post(url, headers=headers, json=data) | |
if response.status_code == 200: | |
user_data = response.json()['UserList'][0] | |
result = { | |
'IsBlacklisted': user_data['IsBlacklisted'], | |
'IsGraylisted': user_data['IsGraylisted'], | |
'IsVerified': user_data['ProfileEntryResponse']['IsVerified'], | |
'JumioVerified': user_data['JumioVerified'], | |
'HasEmail': user_data['HasEmail'], | |
'EmailVerified': user_data['EmailVerified'] | |
} | |
return result | |
else: | |
result = { | |
'IsBlacklisted': False, | |
'IsGraylisted': False, | |
'IsVerified': False, | |
'JumioVerified': False, | |
'HasEmail': False, | |
'EmailVerified': False | |
} | |
return result | |
# Gets basic info and stats about username using DeSo GraphQL | |
def fetch_account_data(username): | |
url = 'https://graphql-prod.deso.com/graphql' | |
query = ''' | |
query AccountByUsername($username: String!) { | |
accountByUsername(username: $username) { | |
publicKey, | |
username, | |
description, | |
desoBalance { | |
balanceNanos | |
} | |
ccCoinsInCirculationNanos | |
coinPriceDesoNanos | |
creatorBasisPoints | |
creatorCoinBalances { | |
totalCount | |
} | |
creatorCoinBalancesAsCreator { | |
totalCount | |
} | |
derivedKeys { | |
totalCount | |
} | |
coinWatermarkNanos | |
desoLockedNanos | |
diamondsReceived { | |
totalCount | |
} | |
diamondsSent { | |
totalCount | |
} | |
followers { | |
totalCount | |
} | |
following { | |
totalCount | |
} | |
legacyMessagesReceived { | |
totalCount | |
} | |
legacyMessagesSent { | |
totalCount | |
} | |
likes { | |
totalCount | |
} | |
messagesReceived { | |
totalCount | |
} | |
messagesSent { | |
totalCount | |
} | |
nftBids { | |
totalCount | |
} | |
nftsAsLastOwner { | |
totalCount | |
} | |
nftsOwned { | |
totalCount | |
} | |
userAssociationsAsTarget { | |
totalCount | |
} | |
postAssociations { | |
totalCount | |
} | |
userAssociationsAsTransactor { | |
totalCount | |
} | |
posts { | |
totalCount | |
} | |
} | |
} | |
''' | |
variables = { | |
'username': username | |
} | |
session = requests.Session() | |
retry = Retry( | |
total=5, | |
backoff_factor=0.1, | |
status_forcelist=[ 500, 502, 503, 504 ], | |
) | |
adapter = HTTPAdapter(max_retries=retry) | |
session.mount('http://', adapter) | |
session.mount('https://', adapter) | |
try: | |
response = session.post(url, json={'query': query, 'variables': variables}) | |
response_json = response.json() | |
public_key = response_json['data']['accountByUsername']['publicKey'] | |
user_status = get_user_status(public_key) | |
if user_status: | |
response_json['data']['accountByUsername']['userStatus'] = user_status | |
except requests.exceptions.RequestException as e: | |
return {"error": "RequestException: " + str(e)} | |
except requests.exceptions.JSONDecodeError as json_error: | |
return {"error": "JSONDecodeError: " + str(json_error)} | |
except Exception as e: | |
return {"error": "An error occurred: " + str(e)} | |
return response_json | |
# Gets user transactions using paginated results from the DeSo GraphQL | |
def fetch_transactions(public_key, after=None): | |
url = 'https://graphql-prod.deso.com/graphql' | |
transactionsQuery = ''' | |
query Transactions($publicKey: String!, $first: Int, $after: Cursor) { | |
transactions(filter: {publicKey: {equalTo: $publicKey}}, first: $first, after: $after) { | |
edges { | |
node { | |
transactionType { | |
name | |
} | |
outputs | |
inputs | |
} | |
} | |
pageInfo { | |
endCursor | |
hasNextPage | |
} | |
} | |
} | |
''' | |
variables = { | |
'publicKey': public_key, | |
'first': 100, | |
'after': after | |
} | |
session = requests.Session() | |
retry = Retry( | |
total=5, | |
backoff_factor=0.1, | |
status_forcelist=[ 500, 502, 503, 504 ], | |
) | |
adapter = HTTPAdapter(max_retries=retry) | |
session.mount('http://', adapter) | |
session.mount('https://', adapter) | |
transactions = [] | |
hasNextPage = True | |
while hasNextPage: | |
try: | |
response = session.post(url, json={'query': transactionsQuery, 'variables': variables}) | |
if response.status_code != 200: | |
return {"error": "Bad response: " + response.text} | |
response_json = response.json() | |
if 'errors' in response_json: | |
error_message = response_json['errors'][0]['message'] | |
if 'could not resize shared memory segment' in error_message: | |
print("No space left on device, treating as no more data.") | |
return None | |
else: | |
print("Error fetching transactions: ", error_message) | |
return None | |
elif not response_json or 'data' not in response_json: | |
print("No more data.") | |
return None | |
transactions += response_json['data']['transactions']['edges'] | |
pageInfo = response_json['data']['transactions']['pageInfo'] | |
hasNextPage = pageInfo['hasNextPage'] | |
variables['after'] = pageInfo['endCursor'] | |
except requests.exceptions.RequestException as e: | |
return {"error": "RequestException: " + str(e)} | |
except requests.exceptions.JSONDecodeError as json_error: | |
return {"error": "JSONDecodeError: " + str(json_error)} | |
except Exception as e: | |
return {"error": "An error occurred: " + str(e)} | |
return transactions | |
# Main function that invokes other functions and writes data in jsonl file | |
def write_jsonl_file(usernames, file_path, max_retries=1, pause_seconds=5): | |
with open(file_path, 'w') as f: | |
for username in usernames: | |
retries = 0 | |
success = False | |
while retries < max_retries and not success: | |
data = fetch_account_data(username) | |
if 'error' in data: | |
print(f"Error fetching data for {username}: {data['error']}. Retrying... ({retries + 1}/{max_retries})") | |
retries += 1 | |
time.sleep(pause_seconds) | |
else: | |
public_key = data['data']['accountByUsername']['publicKey'] | |
transactions = fetch_transactions(public_key) | |
if 'error' in transactions: | |
print(f"Error fetching transactions for {username}: {transactions['error']}. Retrying... ({retries + 1}/{max_retries})") | |
retries += 1 | |
time.sleep(pause_seconds) | |
else: | |
data['data']['accountByUsername']['transactions'] = transactions | |
f.write(json.dumps(data) + '\n') | |
success = True | |
if not success: | |
print(f"Failed to fetch data for {username} after {max_retries} retries. Skipping...") | |
# Removes duplicates from user lists | |
def remove_duplicates(input_list): | |
return list(set(input_list)) | |
# Get data on known scam accounts / Commented out | |
#scamusers = ['MagicHand', 'Alex_Becker', 'MeaganChan', 'AnnabelleMayernick', 'HelenMike', 'FischerKing', 'HlghKey', 'JarrodGlandt', 'DoodleNFT', 'anonymousi', 'Tuur_Demeester', 'scott_melker', 'Desodit', 'ASCENDPHOTOS', 'sharkdeso', 'Cakeminuesa', 'Solatars', 'mspuiyi', 'DAODaddy', 'MaiKanesPaly', 'WALBOT', 'law_master', 'Hiten_Shah', 'Georgina_Mazzeo', 'Blueit', 'XCOPY', 'elizabethstark', 'DesoAss', 'TheDeSoDon', 'Nfndjjd', '123123123123123', '_PYG', 'amily_qomderq', 'reid_hoffman', 'SeizeArt', 'AnnaCurves', 'violet_summers', 'DesoMenUnite', 'skream', 'Lark_Davis', 'DESOVS', 'mammon', 'DigitalArts3', 'dragon_world_nfts', 'HinataYuriko', 'zoescaman', 'ShyBaldPanda', 'kitties', 'ArtHub', 'BringemvGaught', 'NotAylaCroft', 'BNBfinance', 'DeSoDon', 'sunnyday', 'maxigum', 'Churon', 'sean_champ', 'ChiaraBraidotti', 'ChetBLong', 'spizoiky', 'willord', 'uctrl', 'Zakirisim', 'bitcloutmix', 'stradlater', 'BitCalligraphy', 'anais_kos', 'BitcloutMonster', 'Roger_Ver', 'hhhhhhhhhhh1111', 'O21', 'NoxxArt', 'timmylao', 'NM24', 'Piastre', 'HappyPositiveLife', 'maneskinofficial', 'FunKynPOPY', 'TravisNFT', 'goodonessssss', 'MasterofCards', 'fizzler', 'jessicathivenin', 'MiaGazini', 'Get_over_here', 'Sims_Community', 'Tony2car', 'MaryMiller', 'A1STIN', 'northernerchris', 'JesseYaun', 'Goslin', 'TejDhami', 'mileo', 'wdgrwegwe', 'puslike', 'PinUp', 'cloutfor2', 'HanaRobot', 'ji_hipster', 'eeuwiwiierhejejie', 'jensincero', 'Rabbitcoin', 'balajis0212121', 'sweetcows', 'AlecMonopolyOfficial', 'LifeLessons', 'DesoPirates', 'stephaniedavis', 'JessicaCarter_Javascript', 'SocialArb', 'hoonkahmaster', 'Winstonduke', 'BoredApeYachtClubNFT', 'Olivia_Rodrigo', 'Kvcchjj', 'kjpjjj', 'Hdidbc', 'LiliPeg', 'JasonBerks', 'philippplein', 'Pulket', 'iveta_kindlmanova', 'CreatorFundDouble', 'bingoo', 'guy_fieri', 'briannas', 'Stonedted', 'suka', 'DeSoGiveaway', 'mariyats', 'CloutBLM', 'anime1', 'vika_diana_twins', 'DareDevil', 'AlvinNurulImam', 'lovelywee', 'Juliaxx', 'CryptoPervs', 'Pososi', 'DeCountryMen', 'svjfne', 'HIGHKEYCLOUT', 'TatyanaA', 'burger__marce', '756788', 'RajLahoty', 'milhousevanhouten', 'WORLD_OF_TANKS', 'SmotraRu', 'bball_paul', '13KaDay', 'AKM', 'Hhjj', 'DrRhondaPatrick', 'LutherStickland', 'marta_lvlfit', 'Xxxxxxssskkkaaa', 'jay_dee', 'rajlahotifans', 'Djdjdkd', 'Kubeco', 'nikita_mazepin', 'DesoMenUnite', 'AngelineVarona', 'trynot', 'KrisPO', 'sabrina_carpenter', 'RocketFuelV3', 'bewelleveryone', 'Kraken_Exchange_', 'PaulHall', 'u1gmGLvtQsXnvHQkdwNA1', 'Chad_Hurley', '_miniGUN_', 'nkraslnovajr', 'Loveis', 'jherianne2010', 'DONTBUY_D0NT_BUY', 'Dreviep', 'gerbe', 'richbond', 'MarcelloCastellani', 'CelebrityBitcloutWallets', 'warinn', 'isadoracometti', 'Fodez', 'korneliijaa', 'geek1', 'MelisCaner_NFT', 'Reggie34', 'Co1nbase', 'reubencohen', 'BlackFlame', 'drakeandj', 'johnravena', 'LinhLinhs', 'Damochka', 'hackerone', 'Trustwallete', 'pelinatam', 'FutureAsset', 'AirGarage', 'TOP100_CRYPTO', 'RichNFT', 'bbbhebebre', 'BitcloutRothschild', 'BusinessFamous', 'alexopia', 'PartyPlanet', 'KidEight', 'heidi_bailey_official', 'Racin2aCQhecc', 'Fistonic', 'Thesalvare', 'Anjali_shahi', 'BitcloutSecret', 'TrevorLawrence', 'Caidens', 'Did_YouKnow', 'HenryJames', 'CloutMouse', 'melaxgoddess', '10age', 'we1der', 'oneilll', 'reidhoffman', 'Sosuk2', 'ChangeBitClout', 'McDuckClout', 'YuliyaMi', 'freediamonds', 'Dinat_official', 'the_musk', 'KingdomClout', 'amouranth_official', 'FakeCheck', 'kohtah', 'Warszawa_city', 'jony_me', 'beckemtalion', 'morganalexisdavis', 'Krasssenstein', 'AsepticFluid', 'lucasonly', 'TheKidLaroi', 'AVA_VladislaV', 'connerbrrrrrrr', 'elizabetnorman', 'desotoro', 'nickanton', 'tigglff', 'XiaoyuanRen', 'Annaxsitar', 'Gilipsy', 'Jandimarie', 'United_Culture101', 'MunecaVictoriaFans', 'Cashalot', 'Nfnfnfn', 'Fiididiei', 'WinklevossCapital', 'PaladinPandas', 'mareob', 'RDGupta', 'bethany_mota', 'Yuudai_karate', 'TheBitcloutDog', 'LK_Exchange', 'nkrrasnovajr', 'anikafit', 'eric_andre', 'heleneyorke', 'valentivel', 'natalee007', 'Mikhailie4', 'yazin', 'MelaniaValdes', 'Wylsacom', 'Ceka1', 'JuanGonzalez', 'Bitclout_Trade', 'DrBolle', 'Bitclout84884838', 'NewYorkYankeesOfficial', 'Clouthing', 'LilyLarimar', 'Mig1cko', 'nikkisixx_official', 'Pornohub', 'ScammerRisk', 'FlowerClout_', 'purplewolf', 'Takamuro', 'Bafq', 'Harysorles', 'AbhayMoneyWisdom', 'caymn', 'CanelaSkinFans', 'Humanz', 'Spongebob101', 'NiceSwan', 'NebyuDaniel', 'RUST_Community', 'E1337_pro', 'Hpdi5oNrYj8ytBDRkwNjsWcN', 'papernecklace', 'loran_veron', 'PetterPentila', 'newjoiner', 'TheMiamiStories', 'rapturedbored', 'bloomscape', 'Nicolee', 'MOVIE4U', 'PUSSYKILLER', 'REDPILL', 'ScammerHunts', 'Couple_Profile', 'cloutywents', 'Baily_dasis', 'PsyLand', 'LazyMoneyball', 'GabrielMath', 'Vova', 'barryfelder', 'lila34', 'blackholy', 'xofrty', 'Chrissamaegrace', 'mislilia', 'blueface', 'skul0n', 'AlienssDESO', 'Adcloutz', 'SkylarVox', 'GojoSat', '022', 'EricWallis', 'Dismas', 'cloutis', 'Hanajana', 'Mark301', 'robinhoodies', 'Weirdface', 'Shalombro', 'NFTThug', 'THEguy', 'voyagex', 'paintedguy', 'melissaclark', 'Alecmonopoly', 'believeme', 'kosdrwq', 'Yuna', 'Viewty', 'soph', 'DesoForbes', 'andro', 'emroseedavies', 'Bitclotiee', 'rohnyflatter', 'caxap', 'lplplplp', 'Gvjjg', 'humzah', 'BillThill', 'JamcloutInvestors', 'A_Mothers_heart', 'Official_Kat', 'juuliakasko', 'Krassensttein', 'Anonymousss_', 'BookClout00', 'JackDorseyOfficibal', 'NoelBadgesPugh', 'TheModernRetro', 'BitCloutMining', 'Vijoy', 'kanshi', 'itsShibaInu', 'R3dJ0hn', 'loadingfile', 'SpaceApesNFT', 'Pxhita', 'Meganhera', 'weathergood', 'JardenilKimberly_', 'tarix', 'Xvideosss', 'PamelaNFT', 'NegativeImpact', 'Annie_Edelen', 'MichaelArrington', 'diamond4u', 'ZunedKhan', 'PolinaMalinovsk', 'Girl_Psycho', 'PIXELING', 'Leonboyd', 'mattodonell', '100', 'KekL', 'bluemoon_', 'FreyaLilien', 'BitCloutMan', 'FabCryptoSisters', 'alicia_parr_', 'Deso_gem', 'SuperChef_', 'Anonymous____', 'TheDeSoDon', 'DigitalCalligraphia', 'L_oast', 'NewCreators', 'PolinaMalinovskaya', '_ave_mary_', 'Genderbent_Celestial', 'foxcoin', 'ghostmane', 'Desogirl', 'victoriabrono', 'steven_furtick', 'Dina_Salvador', 'dannaoretti', 'Lbnstn', 'VidithAgarwal', 'ekivoki', 'HannahBlair', 'MaryArt', 'RecloutBenefits', 'JessicaOwner', 'Tinyyyyyyy', 'Noted_16', 'EyeCatcher', 'Dropin', 'TheBigTuna', 'PixelMonsters', 'MyMemeDealer', '_zivert', 'whoisangelina', 'Daniles', 'TrafficCaptain', 'frxresearch', 'NicolasSassoon', 'MadisonSophia', 'exchange_coins_bit', 'BurwellCarter', 'snowflake_', 'bitcloutwhitepaper', 'Dropout', 'hannibal_buress', 'BigDogKoda', 'xxxcover', 'rauf_faik', 'Dalarkent', 'sophie_xdt', 'corrieyee', 'Petrh', 'Restart_bug', 'TimTadder', '5KaDay', 'Finky', 'Artista', 'Cloutdia', 'blackpicture', 'Jameson_Lopp', 'BeActive', 'gilanydaun', 'Rutina', 'aesthetic_aydin', 'yG3N3S1S', 'Anonymous1234', 'AmandaElin', 'Nekoooo', 'DDjemclup', 'bropycool', 'CelebrityDeSoWallets', 'LorenzzoLamazz', 'garett__nolan', 'MattiPietari', 'csgolover', 'MariaBeker', 'shaunglenn', 'WimHofice', 'Haraah', 'faruktufan', 'MattKaneArtist', 'useere', 'okroshka_tv', 'UpClout', 'SweetSugar', 'Luka_Doncic', 'Nnpnnn', 'AdiWallet', 'NotoriousFooidie', 'nempi', 'kaydon', 'happymeal', 'Username101', 'AnissaKateFans', 'bjkb', 'coinbase', 'LazyNftzoo', 'BitcloutDesk', 'bootyqween', 'emiliodotjp', 'cockroachlabs', 'NoHighsNoLowsOnlyDoge', 'ProjectInvest', 'ernovoa', 'SHKYA', 'Hellenic', 'Karen_Todd', 'Mon1ca', 'Amirkarimpour', 'yyummy', 'CastleinClout', 'itslaurendotcom', 'Shshgagwhahshe', 'Casey_Cain', 'Anniemator', 'nmoref', 'braVoS', 'kitharington', 'FlipAndReclout', 'heidigrey', 'xhiukaso', 'bobbyLo', 'winklevosscap', 'Thumby', 'weatherbelike', 'Evols', 'Cryptomike', 'elliek', 'Bullink', 'Kaihavertz29', 'Lerpof', 'vbvvwwvwv', 'BitcloutUdell', 'Berliner', 'NatureSpring', 'Clerkenwell', 'Culture_repainr', 'DailyTrivia', 'limpbizkit', 'liambit', 'DOTA_Community', 'Mattey', 'BecauseOfYou', 'Earthlings_Clout', 'Gerta_1', 'waterpotter', 'Salvo', 'KillerPunks', 'InsiderSports', 'Lionoshi', 'Znakomstva_OOOH', 'cuphead', 'selinatam', 'michealseidel', 'kiki_passo', 'mspuiyi', 'NONAME96', 'happy_universe', 'CryptalClout_King', '98753', 'BrianRose', 'uweiss', 'anybayabasydin', 'DesoAss', 'tumbler_hugo', 'Samsammy', 'tommyhellatrigger', 'BigBrother', 'JanuaryBloom', 'dogey', 'elisvitolina', 'sadsuicide', 'AXpollo_X', 'JohnSteinbeck', 'FIFA_Community', 'BotWasteland', 'Cloutimals', 'ParkerJRoberts1', 'thorsten', 'TheDogePoundNFT', 'qqqqqq', 'travisluna', 'mikewild'] | |
#unique_scammer_list = remove_duplicates(scamusers) | |
#file_path = 'output-scams.jsonl' | |
#write_jsonl_file(unique_scammer_list, file_path) | |
# Get data on accounts in good standing | |
goodusers = ['deso', 'ItsAditya', 'DeSocialWorld', 'nader', 'WRiga', 'SharkGang', 'Gaike', 'tobiasschmid', 'Pixelangelo', 'Ugottaloveit', 'PSYCOart', 'CivilEngineer', 'ThisDayInMusicHistory', 'BKPOWER8', 'Randhir', '100', 'nathanwells', 'Jhayppy', 'Ashdigital', 'mashelenn', 'PenWyn', 'NFTLegacy', 'StubbornDad', 'WilliamLaurent', 'Homey', 'MintMachine', 'PSYC500', 'ReihanRei', 'Panini', 'CassiusCuvee', 'VishalGulia', 'DrMoz', 'LeilaThigpen', 'studio_richards', 'burgerboy', 'MayumiJapan', 'mahedihasan', 'BrookM', 'Miniyo', 'FedeDM', 'ArchaeologyFacts', 'Gatucu', 'Squatch', 'DemonAI', 'ElrickErikose', 'ryleesnet', 'Wolfy_Photos', 'CloutJacks', 'PixelRobot', 'mossified', 'DonBarnhart', 'OliverMccann', 'FAMILIAS', 'JohnJardin', 'MICEHEADS', 'PhotographersCorner', 'yellowdoodle', 'Yavilar_Koko', 'CompulsiveDoodler', 'cloutpunk', 'DoodleKoala', 'noprobllamas', 'CloutRocks', 'Wormals', 'TipsyElf', '3DeSocial', 'ArtExplosion', 'Jigglers', 'DeSoSync', '' 'Emmajameson', 'Absurdus', 'OuwePiet', 'Africuz', '1dolinski', 'houseofseb', 'Kaanha', 'ArtToZ', 'MANRIKPHOTO', 'SidXO', 'senpai', 'CloutWomenUnite', 'jordanroody', 'MioMind', 'IDESofMarch', 'ftanix', 'ETwit_blockchain', 'Reet19', 'SkhiBridges', 'sbad', 'iodacasamia', 'RandomClicks', 'Longo', 'cryptogains', 'Oltion', 'HiroyukiTerada', 'CoinGeeks', 'Selfcoaching', 'JordanLintz', 'Dmccut', 'MrDeso', 'SwiftD', 'AnabelI', 'JerryBanfield', 'Mher', 'rohitnishad', 'baniamin', 'ShadyAcres', 'RecloutMaster', 'APEX69', 'OvidiuGagenel', 'Dredid', 'DeSo_News', 'HappyRabbit', 'gaby', 'darian_parrish', 'AbundantLawrie', 'leojay', 'LoveSwitzerland', 'Dirham', 'HattyHats', 'GeologySeeker', 'Varavyshka', 'Rajodisha', 'sorumakers', 'mcmarsh', 'SmartGirlCredit', 'vampirecampfire', 'jLam', 'prashant_maurya', 'ReeJahJoy', 'piratechain', 'MrTrip1et', 'NimalYas', 'NoteMe', 'JagadeshAppusamy', 'Crypto_Block', 'BoopsBoutique', 'ArnoudvanderPlas', 'RoshariN', 'DiamondBank', 'visualartist', 'fizzler', 'Recovery_Coaching', 'PhilippeTahiti', 'Fikapics', 'ColourBlobs', 'shanky22', 'GaikeNFTcreations', 'NodeBitsDAO', 'Xandertoshi', 'BrianDrever', 'PenTwistNFT', 'frameworkfortune', 'Goldberry', 'Johan_Holmberg', 'SeanSlater', 'natalia_bel', 'Angelique511', 'DanoPhoto', 'TheAngryChef', 'daox', 'SeWiJuGA', 'vampirecampfireCommntFeed', 'thedoctor', 'OliB', 'Procrustes', 'MachineSpleak', 'Logun', 'StarGeezer', 'LJK_Ophthalmology', 'Moggel', 'PatrickCraven', 'PremierNS', 'Businessman007', 'DeSoMirror', 'M_Yuhara', 'DennisKarssie', 'TheETHNomad', 'Anoubis', '3projh', 'anku', 'TalkIntuition', 'brootle', 'ShadeFlowers', 'That70sRobot', '10000', 'PhotographyContest', 'AkshayUpadhyay', 'Babrzuch', 'Pickleballb', 'ClaraMouse', 'kad_drum', 'Silver_Vein', 'Bitclout_artist', 'Bhagyasri', 'Jcrypto711', 'TheCryptoNews', 'RedAndrew', 'MyBillionDollarBaby', 'kristianfx', 'fisnikee', 'TheRainbowland', 'Crowd33', 'jeansergegagnon', 'jodybossert', 'Clark_Renfort', 'NomadLands', 'memesinternet', '3ESIGN', 'ECOE', 'BitActive', 'ZeroToOne', 'Stevenkelly', 'BaronRouge', 'bizzyn', 'RealMcoin', 'BlueMint', 'melabanowski', 'Cryptoduketznft', 'ScienceCorner', 'ariskoufovasilis', 'daminous_purity', 'CryptoStats', 'Memeverse', 'anuragkhona', 'ekonomistpanda', 'MccEntLLC', 'MarkBentley', 'johnnyringo', 'NagardasHingu', 'mearsbeats', 'makai', 'Mahfud', 'MusicHeals', 'LeCoq_Francais', 'RealYogi', 'frame94', 'PaulyHart', 'superstardeso', 'Hamzashabbir', 'przemyslawdygdon', '0xAustin', 'NonFungibleFFL', 'Varnangal', 'AndrewVanDuivenbode', 'marcomaroni', 'derekhogarth', 'Octavie', 'geekmetaverse', 'LORDABEL', 'stephend9', 'HauntedNight', 'Silto_Nascao', 'ImLate', 'MapofIdeas', 'Rhynelf', 'BeerBuds', 'GaikeCommentsFeed', 'defialliancedao', 'DeWhales', 'GoldberryLyrics'] | |
unique_gooduser_list = remove_duplicates(goodusers) | |
file_path = 'output-gooduser.jsonl' | |
write_jsonl_file(unique_gooduser_list, file_path) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment