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": 0
33
}
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édure
3
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 familles
4
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 équipement
12
filename = "EQFILTRE.xlsx"
13
with pd.ExcelWriter(filename, mode='w', engine='openpyxl') as writer:
14
# Écrire dans la feuille Excel
15
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 Excel
18
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 module
2
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 code
8
# Appel de la fonction Listes_sans_doublons
9
articles, familles = listes_sans_doublons(df2)
10
# Affichage des résultats
11
print("Liste des articles:", articles)
12
print("Liste des familles:", familles)