Comment apprendre ICI API en peu de temps

image alt
-OĂč es-tu?
-Je suis ici

Fin septembre, le plus grand hackathon du monde a eu lieu à Kazan. Cet événement, selon le nombre de participants, a été inclus dans le Livre Guinness des records.


Pendant ces 48 heures, nous avons été chargés de:

Développer un prototype d'application mobile qui permet à un passager de commander des livraisons de nourriture dans des restaurants situés dans les villes le long de l'itinéraire du train.

Paroles


Bien sĂ»r, tout au long de l'Ă©vĂ©nement, nous avons Ă©tĂ© engagĂ©s dans la rĂ©solution de sous-tĂąches hĂ©tĂ©rogĂšnes sur notre sujet. Nous n'avons pas passĂ© les 48 heures Ă  apprendre l'API HERE et Ă  Ă©crire les trois requĂȘtes ci-dessus.


Dans cet article, je veux partager exactement l'expĂ©rience de l'utilisation de l'API HERE obtenue pendant ces 48 heures sans sommeil, plus prĂ©cisĂ©ment, en tant que dĂ©veloppeur junior de Python et de systĂšmes distribuĂ©s sur le rĂ©seau pour interagir avec d'autres systĂšmes sur le rĂ©seau. L'article ne prĂ©tend pas ĂȘtre la traduction de toute la documentation de l'API HERE, il dĂ©crit uniquement une application pratique pour rĂ©soudre nos problĂšmes.


Présentation


Afin d'optimiser la livraison des commandes et leur exĂ©cution dans les dĂ©lais, le coursier doit arriver sur le quai Ă  l'heure exacte d'arrivĂ©e du train en gare. À cet Ă©gard, chaque coursier doit connaĂźtre le dĂ©lai minimum requis pour la livraison de la commande. Pour rĂ©soudre ce problĂšme, il a fallu calculer le temps de trajet minimum entre deux points (du restaurant Ă  la gare). Le chemin a Ă©tĂ© calculĂ© dans le village, dans le cadre de cela, il a Ă©tĂ© dĂ©cidĂ© d'envisager diverses options, Ă  savoir l'utilisation des transports en commun, une voiture personnelle et vos pieds pour marcher.


L'analyse des API publiques a montré que les demandes REST suivantes sont les plus appropriées pour résoudre le problÚme:



L'utilisation de l'API commence par l'enregistrement dans la section développeur du site officiel pour générer et recevoir les clés ID APP et CODE APP. La clé API gratuite vous permet d'effectuer jusqu'à 250 000 demandes par mois. Croyez-moi, cela couvre tous les besoins d'un hackathon.


Les statistiques d'utilisation de l'API HERE par notre application pendant 48 heures ont montré les chiffres suivants:



Pratique


Chaque demande contient les champs suivants:


deplocation = A #   arrlocation = B #   # ,      app_id = os.getenv('HERE_APP_ID') app_code = os.getenv('HERE_APP_CODE') 

Trouver le temps de trajet en utilisant les transports en commun


 url = f"https://transit.api.here.com/v3/route.json" query = { 'dep': deplocation, 'arr': arrlocation, 'time': datetime.now().strftime('%Y-%m-%dT%H:%M:%S'), # ,     'app_id': app_id, 'app_code': app_code, 'routing': 'tt' #    } response = requests.get(url, params=query) data = response.json() status = data["Res"] if "Message" in status: print(status["Message"]) exit(-1) if "Connections" in status: route_dut_time = iso8601toSec( status["Connections"]["Connection"][0]["duration"] ) 

Je voudrais noter que dans cette demande, l'heure est donnĂ©e en utilisant ISO 8601. La fonction de conversion de la durĂ©e reçue en secondes iso8601toSec ​​a Ă©tĂ© implĂ©mentĂ©e.



Trouver le temps de trajet à l'aide de véhicules personnels


 url = f"https://route.api.here.com/routing/7.2/calculateroute.json" query = { 'waypoint0': deplocation, 'waypoint1': arrlocation, 'mode': 'fastest;car;traffic:enabled', #       'app_id': app_id, 'app_code': app_code, 'departure': 'now' #   } response = requests.get(url, params=query) data = response.json() route_dur_time = data['response']['route'][0]['summary']['trafficTime'] 

Il n'y a pas de problĂšme avec cette demande dans le temps, elle revient en quelques secondes.



Trouver le temps de trajet avec ses propres jambes (marcher)


 url = f"https://route.api.here.com/routing/7.2/calculateroute.json" query = { 'waypoint0': deplocation, 'waypoint1': arrlocation, 'mode': 'fastest;pedestrian', #   'app_id': app_id, 'app_code': app_code } response = requests.get(url, params=query) data = response.json() route_dur_time = data['response']['route'][0]['summary']['travelTime'] 

Dans cette requĂȘte, comme dans l'exemple prĂ©cĂ©dent, il n'y a pas de problĂšme de temps, elle revient en quelques secondes.


Conclusions


Sur la base de ces demandes, nous avons obtenu trois fois le temps nécessaire pour passer du point A au point B.Ayant calculé le temps minimum et le type de mouvement à partir d'eux, nous avons déterminé le temps qu'il fallait pour sortir avant de pouvoir atteindre le point B à l'heure indiquée.

Source: https://habr.com/ru/post/fr470347/


All Articles