this post was submitted on 15 Jun 2023
37 points (97.4% liked)

FREEMEDIAHECKYEAH

53 readers
1 users here now

๐Ÿฟ ๐Ÿ“บ ๐ŸŽต ๐ŸŽฎ ๐Ÿ“— ๐Ÿ“ฑ


๐Ÿดโ€โ˜ ๏ธ Wiki / ๐Ÿ’ฌ Chat


Rules

1. Please be kind and helpful to one another.

2. No racism, sexism, ableism, homophobia, transphobia, spam.

3. Linking to piracy sites is fine, but please keep links directly to pirated content in DMs.

founded 2 years ago
MODERATORS
 

Can we see somewhere what instances block us?

you are viewing a single comment's thread
view the rest of the comments
[โ€“] InternetPirate@lemmy.fmhy.ml 15 points 2 years ago* (last edited 2 years ago) (1 children)

To accomplish this task, you can use the lemmy-stats-crawler tool available on GitHub.

โฏ git clone https://github.com/LemmyNet/lemmy-stats-crawler
โฏ cd lemmy-stats-crawler
โฏ cargo run -- --json > stats.json
โฏ python3 instance_blocking_checker.py
Enter the instance to find blocking instances: lemmy.fmhy.ml
Instances blocking lemmy.fmhy.ml : ['feddit.de', 'civilloquy.com', 'thesimplecorner.org']

To extract the list of instances blocking a given instance from a stats.json file similar to the one you provided, you can use the json module in Python. Here's a script that takes user input and returns the list of instances blocking the given instance:

instance_blocking_checker.py

import json

with open("stats.json", "r") as file:
    data = json.load(file)

def find_blocking_instances(target_instance, data):
    blocking_instances = []

    for instance in data["instance_details"]:
        federated_instances = instance["site_info"]["federated_instances"]
        if federated_instances is not None and target_instance in (federated_instances.get("blocked") or []):
            blocking_instances.append(instance["domain"])

    return blocking_instances

user_input = input("Enter the instance to find blocking instances: ")
result = find_blocking_instances(user_input, data)
print("Instances blocking", user_input, ":", result)

When you run this script and input lemmy.fmhy.ml, it will output:

Instances blocking lemmy.fmhy.ml : ['lemmy.ml']

This script first loads the JSON data into a Python dictionary using json.loads() [1]. Then, it iterates through the instance_details list and checks if the given instance is in the blocked list of each instance. If it is, the domain of the blocking instance is added to the blocking_instances list. Finally, the script prints the list of instances blocking the given instance.

Citations:

[1] https://pynative.com/python/json/

[โ€“] inventa@lemmy.fmhy.ml 2 points 2 years ago (1 children)

Thanks for this. It's a bit too complicated, hopefully at some point the info will be just available

[โ€“] plisken@lemmy.fmhy.ml 12 points 2 years ago* (last edited 2 years ago) (2 children)

feddit.de (users active last day = 641)

civilloquy.com (users active last day = 1)

thesimplecorner.org (users active last day = 1)

[โ€“] inventa@lemmy.fmhy.ml 2 points 2 years ago
[โ€“] InternetPirate@lemmy.fmhy.ml 1 points 2 years ago* (last edited 2 years ago)
โฏ git clone https://github.com/LemmyNet/lemmy-stats-crawler
โฏ cd lemmy-stats-crawler
โฏ cargo run -- --json > stats.json
โฏ python instance_analysis.py
Enter the instance to find blocking instances: lemmy.fmhy.ml

Instances blocking lemmy.fmhy.ml :
feddit.de (642 users/day, 1317 users/week, 1397 users/month, 1441 users/half_year)
civilloquy.com (1 users/day, 1 users/week, 2 users/month, 2 users/half_year)
thesimplecorner.org (1 users/day, 1 users/week, 1 users/month, 1 users/half_year)

Total users from blocking instances:
644 users/day
1319 users/week
1400 users/month
1444 users/half_year

Instances blocked by lemmy.fmhy.ml :
lemmygrad.ml (198 users/day, 388 users/week, 481 users/month, 726 users/half_year)

Total users from blocked instances:
198 users/day
388 users/week
481 users/month
726 users/half_year

instance_analysis.py

import json

with open("stats.json", "r") as file:
    data = json.load(file)

def find_blocking_instances(target_instance, data):
    blocking_instances = []
    blocked_instances = []

    for instance in data["instance_details"]:
        federated_instances = instance["site_info"]["federated_instances"]
        if federated_instances is not None:
            if target_instance in (federated_instances.get("blocked") or []):
                blocking_instances.append(instance["domain"])
            if instance["domain"] == target_instance:
                blocked_instances.extend(federated_instances.get("blocked") or [])

    return blocking_instances, blocked_instances

def get_instance_user_counts(instance):
    counts = instance["site_info"]["site_view"]["counts"]
    return {
        "users_active_day": counts["users_active_day"],
        "users_active_week": counts["users_active_week"],
        "users_active_month": counts["users_active_month"],
        "users_active_half_year": counts["users_active_half_year"],
    }

def print_instance_activity(instance):
    domain = instance["domain"]
    counts = instance["site_info"]["site_view"]["counts"]

    print(f"{domain} ({counts['users_active_day']} users/day, {counts['users_active_week']} users/week, {counts['users_active_month']} users/month, {counts['users_active_half_year']} users/half_year)")

total_blocking_users = {
    "users_active_day": 0,
    "users_active_week": 0,
    "users_active_month": 0,
    "users_active_half_year": 0,
}

total_blocked_users = {
    "users_active_day": 0,
    "users_active_week": 0,
    "users_active_month": 0,
    "users_active_half_year": 0,
}

user_input = input("Enter the instance to find blocking instances: ")
blocking_instances, blocked_instances = find_blocking_instances(user_input, data)

print("\nInstances blocking", user_input, ":")
for domain in blocking_instances:
    for instance in data["instance_details"]:
        if instance["domain"] == domain:
            print_instance_activity(instance)
            user_counts = get_instance_user_counts(instance)
            for key in total_blocking_users:
                total_blocking_users[key] += user_counts[key]

print("\nTotal users from blocking instances:")
print(f"{total_blocking_users['users_active_day']} users/day")
print(f"{total_blocking_users['users_active_week']} users/week")
print(f"{total_blocking_users['users_active_month']} users/month")
print(f"{total_blocking_users['users_active_half_year']} users/half_year")

print("\nInstances blocked by", user_input, ":")
for domain in blocked_instances:
    for instance in data["instance_details"]:
        if instance["domain"] == domain:
            print_instance_activity(instance)
            user_counts = get_instance_user_counts(instance)
            for key in total_blocked_users:
                total_blocked_users[key] += user_counts[key]

print("\nTotal users from blocked instances:")
print(f"{total_blocked_users['users_active_day']} users/day")
print(f"{total_blocked_users['users_active_week']} users/week")
print(f"{total_blocked_users['users_active_month']} users/month")
print(f"{total_blocked_users['users_active_half_year']} users/half_year")