script python pour ajouter un membre par API

This commit is contained in:
Guillaume Lung Tung 2022-12-10 16:02:20 +04:00
commit 6c9ecda599
1 changed files with 100 additions and 0 deletions

100
scripts/add-member.py Normal file
View File

@ -0,0 +1,100 @@
# -*-coding:Latin-1 -*
#
import argparse
import requests
import jwt # pip install pyjwt
from datetime import datetime as date
import os
from dotenv import load_dotenv
load_dotenv()
# Définir l'URL de l'API Ghost
GHOST_API_URL = os.getenv('GHOST_API_URL')
# Admin API key goes here
GHOST_ADMIN_KEY = os.getenv('GHOST_ADMIN_KEY')
###################################
## Génération du token JWT
###################################
# Split the key into ID and SECRET
id, secret = GHOST_ADMIN_KEY.split(':')
# Prepare header and payload
iat = int(date.now().timestamp())
header = {'alg': 'HS256', 'typ': 'JWT', 'kid': id}
payload = {
'iat': iat,
'exp': iat + 5 * 60,
'aud': '/admin/'
}
# Create the token (including decoding secret)
token = jwt.encode(payload, bytes.fromhex(secret), algorithm='HS256', headers=header)
print('JWT token: ' + token)
###################################
## arguments python
###################################
# Définir et parser les arguments de ligne de commande
parser = argparse.ArgumentParser()
parser.add_argument("--email", required=True)
parser.add_argument("--name", required=True)
args = parser.parse_args()
###################################
## Appels de l'API Ghost
###################################
# Définir les critères de filtrage
filter = {
"filter": "email:"+args.email
}
headers = {'Authorization': 'Ghost {}'.format(token)}
# Récupérer la liste des membres de l'instance Ghost
response = requests.get(GHOST_API_URL + "/ghost/api/admin/members/", params=filter, headers=headers)
# Vérifier que la réponse de l'API est valide
if response.status_code == 200:
# Décoder la réponse JSON
j = response.json()
members = j['members']
# Si aucun membre n'a été trouvé avec l'adresse e-mail spécifiée
if len(members) == 0:
# Définir les informations du nouveau membre
member_data = {
"members": [
{
"email": args.email,
"name": args.name,
"labels": ["TiBillet", "import " + date.today().strftime("%d/%m/%Y")]
}
]
}
# Ajouter le nouveau membre à l'instance Ghost
response = requests.post(GHOST_API_URL + "/ghost/api/admin/members/", json=member_data, headers=headers)
# Vérifier que la réponse de l'API est valide
if response.status_code == 201:
# Décoder la réponse JSON
j = response.json()
members = j['members']
member = members[0]
print("Le nouveau membre a été créé avec succès :", member["email"])
else:
print("Erreur lors de la création du nouveau membre :", response.text)
else:
# Afficher la liste des membres
for member in members:
print(member['email'])
else:
print("Erreur lors de la récupération des membres :", response.text)