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