0
votes

Vérification de l'appel de l'API si certaines données sont récupérées

J'effectue 100 appels d'API sur 100 villes différentes et lorsqu'il est appelé, il est généralement disponible sous la forme: xxx

Cependant, dans ["Données"] ['IAQI]] manque d'un de CO, NO2, O3, etc ... tout en boucle à travers 100 villes et effectuant des appels d'API, je veux vérifier si chacun d'entre eux est présent et ajoute "NA" s'il n'est pas présent.

Je fais essayer et sauf comme ceci: xxx

Cela fonctionne parfaitement bien mais ne semble pas efficace, je me demande s'il y a un moyen plus propre de le faire. Merci!


0 commentaires

3 Réponses :


1
votes

Au lieu de garder vos polluants comme des listes séparées, gardez un dictionnaire comme ceci: xxx

Si vous vous assurez que vos touches correspondent à ce que vous attendez de l'API que vous pouvez maintenant faire cela: < / p> xxx

mais votre chemin est parfaitement bien pour être honnête.


2 commentaires

Oh Haha Yup mais je veux le rendre plus propre. Merci pour l'aide! Cela semble beaucoup plus propre.


La première ligne peut également être remplacée par poluants = defaultDict (liste)



1
votes

Vous pouvez utiliser obtenir la méthode à la place Par exemple: xxx


0 commentaires

0
votes

Choisir de meilleures structures de données peut rendre la place meilleure xxx pré>

Je vais même aller plus loin et le refacteur comme ceci: p>

from collections import defaultdict, namedtuple

cities = defaultdict(dict)
data_points = ['aqi', "co", "no2", "o3", "pm25"]
defaults = ['na', 'na', 'na', 'na', 'na']
AQI = namedtuple('AQI', field_names=data_points, defaults=defaults)

def get_data(city):
    url = f'https://api.waqi.info/feed/{city}/?token={api_key}'
    response = requests.get(url).json()
    if response["status"] == "ok":
        return response

def parse_json(data):
    raw_data = {key:value['v'] for key, value in data["iaqi"].items() if key in data_points[1:]}
    raw_data['aqi'] = data["aqi"]
    return AQI(**raw_data)

for city in canadian_cities:
    data = get_data(city)
    if data and isinstance(data["data"]["aqi"], int):
        cities[city] = parse_json(data=data["data"])
print(cities)


0 commentaires