| 
									
										
										
										
											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 |