Skip to content

Instantly share code, notes, and snippets.

@sungkhum
Last active September 3, 2023 00:52
Show Gist options
  • Save sungkhum/2249b1747ced402723fbc9a7745d1f1d to your computer and use it in GitHub Desktop.
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
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