import requests import argparse import logging MAX_REQUESTS=15000 CLIENT_ID="5db3773ba0ba11c7398dad1f61011bdb" def setup_logger(name): _ch = logging.StreamHandler() _ch.setLevel("DEBUG") _formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') _ch.setFormatter(_formatter) logger = logging.getLogger(name) logger.addHandler(_ch) logger.setLevel("DEBUG") logger.debug("Logger initialized") return logger def log(msg): logger.info(msg) logger = setup_logger(__name__) def main(): parser = argparse.ArgumentParser() parser.add_argument('accounts', nargs='+', help='Accounts ID to check') args = parser.parse_args() accounts = args.accounts followers = {} log("Fetching followers") # fetch followers i=0 for account in accounts: log("Fetching followers for account "+account) # followers[i] = [1,2,3,4] followers[i] = get_acct_followers(account) log("Got "+str(len(followers[i]))+" followers") i+=1 # calculate duplicates log("Calculating duplicates between acct 1 and 2") common_followers = set(followers[0]).intersection(followers[1]) log(str(len(common_followers))+" in common") for j in range(2,len(accounts)-1): log("Calculating duplicated between common_followers and "+j) def get_acct_followers(acct): followers = [] acct = str(acct) # info req r = requests.get("https://api.soundcloud.com/users/"+acct+"?client_id="+CLIENT_ID).json() followers_count = r["followers_count"] # 1st req r = requests.get("https://api.soundcloud.com/users/"+acct+"/followers?page_size=200&client_id="+CLIENT_ID).json() for follower in r["collection"]: followers.append(follower["id"]) log("{0}/{1} done ({2}%)...".format(len(followers), followers_count, len(followers)/followers_count*100)) # next reqs while r["next_href"]: r = requests.get(r["next_href"]).json() for follower in r["collection"]: followers.append(follower["id"]) log("{0}/{1} done ({2}%)...".format(len(followers), followers_count, len(followers)/followers_count*100)) log("Done!") return followers if __name__ == '__main__': main()