API : Export des nomenclatures de 2 équipements
Objectif⚓
Extraire la nomenclature d'un équipement
Exploiter Python pour rechercher et afficher les familles de pièces détachées en retirant les doublons.
Imports⚓
1
import pandas as pd
2
from pandas import ExcelWriter
3
from mxUtils import execute_api_request
4
import os
Remarque : Dictionnaire⚓
Ci-dessous, on récupère de swagger le format des données renvoyées par la requête API REST.
Cette structure sera exploitée plus loin pour convertir les données JSON de manière compréhensible pour PANDAS et travailler avec des bases de données SQL ou Excel.
Elle n'est pas nécessaire pour le code, mais permet de comprendre la structure des données
Variable Dictionnaire⚓
1
dict_data_json = '''
2
[3
{4
"bodies": [5
{6
"name": "string"7
}8
],9
"family": {10
"code": "string",11
"name": "string"12
},13
"globalWaup": {14
"cost": 0,15
"currencyIsoCode": "string"16
},17
"manufacturer": {18
"code": "string",19
"name": "string"20
},21
"manufacturerReference": "string",22
"part": {23
"code": "string",24
"name": "string"25
},26
"unit": {27
"code": "string",28
"name": "string"29
},30
"vat": {31
"code": "string",32
"rate": 033
}34
}35
]36
'''Appel de la requête -> Données JSON⚓
1
url = 'https://prod.mydimomaintmx.cloud/IUT_EHC/connector/Part/Filter'
2
# Utilisation de la procédure3
assetCode1 ="EQ-FO-010"
4
data1 = {
5
'archived': False,
6
'assetCode': assetCode1
7
}
8
9
response = execute_api_request(url,data1)
10
print(response.status_code)
11
print("----------")
12
data_json = response.json()
13
print(data_json)
14
print("----------")
JSON vers PANDAS dataframe via dictionnaire⚓
1
df = pd.DataFrame.from_dict(data_json)
2
print(df)
3
print("----------")
Affichage des familles de pièces concernées par la nomenclature⚓
1
family_data = [(item['family']['code'], item['family']['name']) for item in data_json]
2
print(family_data)
3
# Afficher les codes et noms des familles4
for code, name in family_data:
5
print(f"Code: {code}, Name: {name}")
Export vers Excel⚓
1
df1= df # sauvegarder le dataframe
2
assetCode2 ="ENV-ARD-01-FLIP"
3
data2 = {
4
'archived': False,
5
'assetCode': assetCode2
6
}
7
8
response = execute_api_request(url, data2)
9
df2 = json_to_pandas(response) # notez la différence df = pd.json_normalize(data_json, sep='_')
10
print(df2)
11
# Fichier Excel avec 2 feuilles pour chaque équipement12
filename = "EQFILTRE.xlsx"
13
with pd.ExcelWriter(filename, mode='w', engine='openpyxl') as writer:
14
# Écrire dans la feuille Excel15
df1.to_excel(writer, sheet_name = assetCode1, index=False)
16
with pd.ExcelWriter(filename, mode='a', engine='openpyxl') as writer:
17
# Écrire dans la feuille Excel18
df2.to_excel(writer, sheet_name = assetCode2, index=False)
19
Remarque :
Modifier la variable df2 avec la même méthode que celle utilisée pour df1 et vérifier dans le fichier Excel que la structure est correcte.
Affichage des familles/articles sans doublons pour df2⚓
1
# ajouter sous les imports en début de module2
def listes_sans_doublons(dataframe):
3
articles = dataframe['part'].apply(lambda x: x['name']).unique().tolist()
4
familles = dataframe['family'].apply(lambda x: x['name']).unique().tolist()
5
return articles, familles
6
7
# ajouter en fin de code8
# Appel de la fonction Listes_sans_doublons9
articles, familles = listes_sans_doublons(df2)
10
# Affichage des résultats11
print("Liste des articles:", articles)
12
print("Liste des familles:", familles)