Skip to content

Instantly share code, notes, and snippets.

@Rico040
Last active March 23, 2025 08:35
Show Gist options
  • Save Rico040/23f5f509b086179526cd4e92b820704d to your computer and use it in GitHub Desktop.
Save Rico040/23f5f509b086179526cd4e92b820704d to your computer and use it in GitHub Desktop.
some funny anime statistics stuff - use https://danbooru.donmai.us/counts/posts instead
#!/usr/bin/python
# Usage: danbooru-tag-counter.py [tags...]
import requests
import sys
import base64
# Define your username and API key
username = ""
api_key = ""
def generate_auth_header(username, api_key):
if not username or not api_key:
return None
auth_str = f"{username}:{api_key}"
auth_bytes = auth_str.encode('utf-8')
auth_base64 = base64.b64encode(auth_bytes).decode('utf-8')
return f"Basic {auth_base64}"
def check_post_count_of_tag(tag):
response = requests.get(f"https://danbooru.donmai.us/tags.json?search[name]={tag}")
data = response.json()
if isinstance(data, list) and len(data) > 0:
post_count = data[0].get("post_count")
return post_count
else:
return None
def main():
args = sys.argv[1:]
if not args:
print("Please provide tags as command-line arguments.")
return
auth_header = generate_auth_header(username, api_key)
for i in args:
count = check_post_count_of_tag(i)
if count is not None:
print(f"There are {count} posts of {i}")
else:
print(f"{i} tag doesn't exist")
tag = ' '.join(args)
limit_per_page = 200 # max limit for posts
total_post_count = 0
page = 1
while True:
# stop loop cuz it's one tag
if len(args) <= 1:
break
url = f"https://danbooru.donmai.us/posts.json?tags={tag}&page={page}&limit={limit_per_page}"
headers = {'Authorization': auth_header}
response = requests.get(url, headers=headers)
if response.status_code != 200:
print(f"Error: {response.json().get('message', 'Unknown error')}")
break
data = response.json()
if not data: # If the response is empty, break out of the loop
break
post_count = len(data)
total_post_count += post_count
print(f"Page/Posts: {page}/{total_post_count}", end='\r')
page += 1
if len(args) > 1:
print(f"\nTotal number of posts with tags [{tag}] is:", total_post_count)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment