No final de setembro, a maior hackathon do mundo ocorreu em Kazan. Este evento, de acordo com o número de participantes, foi incluído no Guinness Book of Records.
Durante essas 48 horas, fomos incumbidos de:
Desenvolver um protótipo de um aplicativo móvel que permita ao passageiro solicitar a entrega de alimentos em restaurantes localizados nas cidades ao longo da rota do trem.
Letra
Obviamente, durante todo o evento, estávamos envolvidos na solução de subtarefas heterogêneas sobre o nosso tópico. Não passamos as 48 horas aprendendo a API HERE e escrevendo as três consultas acima.
Neste artigo, quero compartilhar exatamente a experiência de usar a API HERE obtida nessas 48 horas sem dormir, mais precisamente, como desenvolvedor júnior de Python e sistemas distribuídos na rede para interagir com outros sistemas na rede. O artigo não pretende ser a tradução de toda a documentação da API HERE, apenas descreve a aplicação prática na solução de nossos problemas.
1. Introdução
Para otimizar a entrega das ordens e sua execução no prazo, o correio deve chegar à plataforma no momento exato em que o trem chega à estação. Nesse sentido, cada transportadora deve saber o tempo mínimo necessário para a entrega do pedido. Para resolver esse problema, foi necessário calcular o tempo mínimo de viagem entre dois pontos (do restaurante à estação ferroviária). O caminho foi calculado na vila; em conexão com isso, decidiu-se considerar várias opções, a saber, o uso de transporte público, um carro pessoal e os pés para caminhar.
A análise das APIs públicas mostrou que as seguintes solicitações REST são mais adequadas para resolver o problema:
O uso da API começa registrando-se na seção do desenvolvedor do site oficial para gerar e receber as chaves APP ID e APP CODE. A chave de API gratuita permite realizar até 250 mil solicitações por mês. Acredite, isso cobre todas as necessidades de um hackathon.
As estatísticas do uso da API HERE por nosso aplicativo por 48 horas mostraram os seguintes números:

Prática
Cada solicitação contém os seguintes campos:
deplocation = A
Encontrar o tempo de viagem usando o transporte público
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'),
Gostaria de observar que, nesta solicitação, o tempo é dado usando a ISO 8601. A função de converter a duração do tempo recebido em segundos iso8601toSec foi implementada.
Encontrar tempo de viagem usando veículos pessoais
url = f"https://route.api.here.com/routing/7.2/calculateroute.json" query = { 'waypoint0': deplocation, 'waypoint1': arrlocation, 'mode': 'fastest;car;traffic:enabled',
Não há problemas com essa solicitação ao longo do tempo, ela retorna em segundos.
Encontrar o tempo de viagem usando suas próprias pernas (andando)
url = f"https://route.api.here.com/routing/7.2/calculateroute.json" query = { 'waypoint0': deplocation, 'waypoint1': arrlocation, 'mode': 'fastest;pedestrian',
Nesta solicitação, como no exemplo anterior, não há problemas com o tempo, ele retorna em segundos.
Conclusões
Com base nessas solicitações, obtivemos três vezes o tempo necessário para passar do ponto A para o ponto B. Depois de calcular o tempo e o tipo de movimento mínimos a partir deles, determinamos quanto tempo levou para sair antes que pudéssemos chegar ao ponto B no tempo indicado.