Skip to content

Instantly share code, notes, and snippets.

@impiaaa
Last active January 11, 2019 18:57
Show Gist options
  • Save impiaaa/88027556c242dd5fc392aa4262fc88ea to your computer and use it in GitHub Desktop.
Save impiaaa/88027556c242dd5fc392aa4262fc88ea to your computer and use it in GitHub Desktop.
Mastodon tools
#!/usr/bin/env python3
from mastodon import Mastodon
from bs4 import BeautifulSoup
import urllib
myinstance = "somewhere.social"
m = Mastodon(client_id="…", client_secret="…", access_token="…", api_base_url="https://"+myinstance)
myid = m.account_verify_credentials()['id']
admins = {}
accounts = m.account_following(myid)
while accounts is not None:
for a in accounts:
name = a['acct']
aid = a['id']
if '@' in name:
instance = name.split('@')[-1]
else:
instance = myinstance
if instance in admins: continue
print("Looking up admin for", instance)
try:
soup = BeautifulSoup(urllib.request.urlopen("https://"+instance+"/about/more"))
except urllib.error.URLError:
soup = None
if soup is None:
admins[instance] = None
continue
owner = soup.find(class_="owner")
if owner is None:
admins[instance] = None
continue
adminusername = owner.find(class_="username")
if adminusername is None:
admins[instance] = None
continue
adminusername = adminusername.string.strip('@')+'@'+instance
print("Admin is", adminusername)
if name == adminusername:
admin = a
else:
for admin in m.account_search(adminusername):
if admin['acct'] == adminusername: break
admins[instance] = admin
accounts = m.fetch_next(accounts)
#!/usr/bin/env python3
from mastodon import Mastodon
import datetime
myinstance = "somewhere.social"
m = Mastodon(client_id="…", client_secret="…", access_token="…", api_base_url="https://"+myinstance)
timeago = datetime.timedelta(days=30)
now = datetime.datetime.now(datetime.timezone.utc)
monthago = now-timeago
myid = m.account_verify_credentials()['id']
following = m.fetch_remaining(m.account_following(myid))
for a in following:
statuses = m.account_statuses(a['id'], limit=1)
if len(statuses) == 0:
print(a['acct'], "never posted")
if statuses[0]['created_at'] < monthago:
print(a['acct'], "last posted", (now-statuses[0]['created_at']).days, "ago")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment