80 líneas
10 KiB
Markdown
80 líneas
10 KiB
Markdown
# Fediverse Stats
|
|
This code gets all peers from running Mastodon, Pleroma and Lemmy host servers 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 `pip install -r requirements.txt` to install needed libraries.
|
|
|
|
2. Run `python db-setup.py` to setup and create new Postgresql database and needed tables in it.
|
|
|
|
3. 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.
|
|
|
|
4. Run `python getpeers.py` to get all peers from your host and the whole world of fediverse's servers (or almost the whole world).
|
|
|
|
5. Run `python fetchservers.py` to add servers to alive servers database.
|
|
|
|
6. 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 |
|
|
| Lemmy | api/v2/site ['federated_instances']['linked'] | ['usage']['users']['total']| | | | | | Lemmy |
|
|
| 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'] |
|
|
| lemmy | nodeinfo/2.0.json | ['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'] |
|
|
| wordpress | wp-json/nodeinfo/2.0 | ['software']['name'] |
|
|
| writefreely | api/nodeinfo | ['software']['name'] |
|
|
| zap | nodeinfo/2.0.json | ['software']['name'] |
|
|
|
|
5. Use your favourite scheduling method to set `python fediverse.py` to run twice daily, `python fetchservers.py` one time daily and `python getworld.py` to run monthly.
|
|
|
|
18.2.21 - New feature! Added [Lemmy project](https://join.lemmy.ml)
|
|
12.5.21 - New feature! Added Wordpress support. The code can now detect Wordpress instances with ActivityPub enabled plugin.
|
|
12.5.21 - New feature! New shinny creation of servers and users graphs.
|