This code gets all peers from running Mastodon, Pleroma or Lemmy host server and then all peers from host server's peers. Goal is to collect maximum number of alive fediverse's servers by querying their API and then post servers and registered users.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
spla 15201a9698 Added aiohttp support for asynchronous requests. So much faster and way better software detection 1 year ago
README.md Added software name table 1 year ago
db-setup.py Added 'checked' column to table 'world' 1 year ago
fediverse.py Added aiohttp support for asynchronous requests. So much faster and way better software detection 1 year ago
getworld.py Fixed config.txt dir 1 year ago
requirements.txt Added aiohttp & aiodns libraries 1 year ago
setup.py Added db-setup.py and setup.py 1 year ago

README.md

Fediverse Stats

This code gets all peers from running Mastodon or Pleroma host server and then all peers from host server's peers. Goal is to collect maximum number of alive fediverse's servers and then query their API to obtain their registered users (if their API provide such information). At the end it post the results to host server bot account.

Dependencies

  • Python 3
  • Postgresql server
  • Mastodon or Pleroma running server.

Usage:

Within Python Virtual Environment:

  1. Run python db-setup.py to setup and create new Postgresql database and needed tables in it.

  2. Run python setup.py to get your bot's access token of your Mastodon or Pleroma server existing account. It will be saved to 'secrets/secrets.txt' for further use.

  3. Run python getworld.py to get all peers from your host and the whole world of fediverse's servers (or almost the whole world).

  4. Run python fediverse.py to query world alive servers API. It gets data from server's API according this table:

Software API peers API users (nodeinfo/2.0.json) API users (nodeinfo/2.0) API users (api/v1/instance) API users (main/nodeinfo/2.0) API users (api/nodeinfo/2.0.json) API users (api/nodeinfo) Software
Diaspora ['usage']['users']['total'] Diaspora
Friendica api/v1/instance/peers ['usage']['users']['total'] Friendica
Ganggo ['usage']['users']['total'] Ganggo
GNU Social ['usage']['users']['total'] GNU Social
GNU Social 2.x ['usage']['users']['total'] GNU Social 2.x
Groundpolis ['usage']['users']['total'] Groundpolis
Hubzilla ['usage']['users']['total'] Hubzilla
Mastodon api/v1/instance/peers ['usage']['users']['total'] (since v3.0.0) ['stats']['user_count'] Mastodon
Misskey NO (['usage']['users'] returns {}) so using ['usage']['users']['activeHalfyear'] instead Misskey
Osada ['usage']['users']['total'] Osada
Peertube ['usage']['users']['total'] Peertube
Pixelfed ['usage']['users']['total'] Pixelfed
Pleroma api/v1/instance/peers ['usage']['users']['total'] Pleroma
Plume ['usage']['users']['total'] Plume
Prismo ['usage']['users']['total'] Prismo
Ravenvale ['usage']['users']['total'] Ravenvale
Squus ['usage']['users']['total'] Squus
Writefreely ['usage']['users']['total'] Writefreely
Zap ['usage']['users']['total'] Zap
software API software name
diaspora nodeinfo/2.0.json ['software']['name']
dolphin nodeinfo/2.0 ['software']['name']
ganggo nodeinfo/2.0 ['software']['name']
friendica nodeinfo/2.0 ['software']['name']
gnusocial main/nodeinfo/2.0 ['software']['name']
gnusocialv2 api/nodeinfo/2.0.json ['software']['name']
groundpolis nodeinfo/2.0 ['software']['name']
hubzilla nodeinfo/2.0 ['software']['name']
mastodon nodeinfo/2.0.json ['software']['name']
misskey nodeinfo/2.0 ['software']['name']
osada nodeinfo/2.0.json ['software']['name']
peertube nodeinfo/2.0.json ['software']['name']
pixelfed api/nodeinfo/2.0.json ['software']['name']
pleroma nodeinfo/2.0.json ['software']['name']
plume nodeinfo/2.0 ['software']['name']
prismo nodeinfo/2.0.json ['software']['name']
ravenvale nodeinfo/2.0.json ['software']['name']
squs nodeinfo/2.0 ['software']['name']
writefreely api/nodeinfo ['software']['name']
zap nodeinfo/2.0.json ['software']['name']
  1. Use your favourite scheduling method to set python fediverse.py after python getworld.py to run regularly.

Note: install all needed packages with 'pip install package' or use 'pip install -r requirements.txt' to install them.