2021-01-22 11:29:36 +00:00
|
|
|
__filename__ = "mastoapiv1.py"
|
|
|
|
__author__ = "Bob Mottram"
|
|
|
|
__license__ = "AGPL3+"
|
2021-01-26 10:07:42 +00:00
|
|
|
__version__ = "1.2.0"
|
2021-01-22 11:29:36 +00:00
|
|
|
__maintainer__ = "Bob Mottram"
|
|
|
|
__email__ = "bob@freedombone.net"
|
|
|
|
__status__ = "Production"
|
|
|
|
|
|
|
|
import os
|
|
|
|
from utils import loadJson
|
|
|
|
|
|
|
|
|
2021-01-22 13:32:37 +00:00
|
|
|
def getMastApiV1Id(path: str) -> int:
|
|
|
|
"""Extracts the mastodon Id number from the given path
|
|
|
|
"""
|
|
|
|
mastoId = None
|
|
|
|
idPath = '/api/v1/accounts/:'
|
|
|
|
if not path.startswith(idPath):
|
|
|
|
return None
|
|
|
|
mastoIdStr = path.replace(idPath, '')
|
|
|
|
if '/' in mastoIdStr:
|
|
|
|
mastoIdStr = mastoIdStr.split('/')[0]
|
|
|
|
if mastoIdStr.isdigit():
|
|
|
|
mastoId = int(mastoIdStr)
|
|
|
|
return mastoId
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
def getMastoApiV1IdFromNickname(nickname: str) -> int:
|
|
|
|
"""Given an account nickname return the corresponding mastodon id
|
|
|
|
"""
|
|
|
|
return int.from_bytes(nickname.encode('utf-8'), 'little')
|
|
|
|
|
|
|
|
|
|
|
|
def _intToBytes(num: int) -> str:
|
|
|
|
if num == 0:
|
|
|
|
return b""
|
|
|
|
else:
|
|
|
|
return _intToBytes(num // 256) + bytes([num % 256])
|
|
|
|
|
|
|
|
|
|
|
|
def getNicknameFromMastoApiV1Id(mastoId: int) -> str:
|
|
|
|
"""Given the mastodon Id return the nickname
|
|
|
|
"""
|
|
|
|
nickname = _intToBytes(mastoId).decode()
|
|
|
|
return nickname[::-1]
|
|
|
|
|
|
|
|
|
2021-01-22 11:29:36 +00:00
|
|
|
def getMastoApiV1Account(baseDir: str, nickname: str, domain: str) -> {}:
|
|
|
|
"""See https://github.com/McKael/mastodon-documentation/
|
|
|
|
blob/master/Using-the-API/API.md#account
|
|
|
|
Authorization has already been performed
|
|
|
|
"""
|
|
|
|
accountFilename = \
|
|
|
|
baseDir + '/accounts/' + nickname + '@' + domain + '.json'
|
|
|
|
if not os.path.isfile(accountFilename):
|
|
|
|
return {}
|
|
|
|
accountJson = loadJson(accountFilename)
|
|
|
|
if not accountJson:
|
|
|
|
return {}
|
|
|
|
mastoAccountJson = {
|
2021-01-22 13:32:37 +00:00
|
|
|
"id": getMastoApiV1IdFromNickname(nickname),
|
2021-01-22 11:29:36 +00:00
|
|
|
"username": nickname,
|
|
|
|
"acct": nickname,
|
2021-01-22 13:42:22 +00:00
|
|
|
"display_name": accountJson['name'],
|
2021-01-22 11:29:36 +00:00
|
|
|
"locked": accountJson['manuallyApprovesFollowers'],
|
2021-01-22 14:58:35 +00:00
|
|
|
"created_at": "2016-10-05T10:30:00Z",
|
2021-01-22 11:29:36 +00:00
|
|
|
"followers_count": 0,
|
|
|
|
"following_count": 0,
|
|
|
|
"statuses_count": 0,
|
|
|
|
"note": accountJson['summary'],
|
|
|
|
"url": accountJson['id'],
|
|
|
|
"avatar": accountJson['icon']['url'],
|
|
|
|
"avatar_static": accountJson['icon']['url'],
|
|
|
|
"header": accountJson['image']['url'],
|
|
|
|
"header_static": accountJson['image']['url']
|
|
|
|
}
|
|
|
|
return mastoAccountJson
|