From 03a33e764180b15a81247f7ad0b00a10dd56044e Mon Sep 17 00:00:00 2001 From: HipsterCat Date: Mon, 15 Oct 2018 18:38:27 +0200 Subject: [PATCH] Initial --- sc_real_reach.py | 79 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 sc_real_reach.py diff --git a/sc_real_reach.py b/sc_real_reach.py new file mode 100644 index 0000000..e8dc519 --- /dev/null +++ b/sc_real_reach.py @@ -0,0 +1,79 @@ +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() \ No newline at end of file