API de resultados de desafios
API de resultados de desafios
Portais de marca branca e outras integrações compatíveis podem criar uma experiência de resultados de desafios com os endpoints abaixo. Todos usam o código do desafio e exigem uma solicitação de API autenticada.
/api/v1/gamification/challenge/{code}/
Acesso à integração
As credenciais de API, os fluxos de autenticação compatíveis e os limites de requisição são combinados com o suporte do DistantRace. Considere um 404 de um endpoint de resultados ou análises como indisponível para o solicitante atual; a mesma resposta é usada quando as configurações de privacidade ocultam o recurso.
Sequência de endpoints #
| Endpoint | Uso |
|---|---|
GET result-settings/ |
Descubra as colunas de resultados, a ordenação, os totais, as seções, as distâncias e as visualizações opcionais disponíveis |
GET heatmap/ |
Carregue células agregadas de densidade dos treinos quando show_heatmap estiver habilitado |
GET results/{challenger_id}/detailed/ |
Carregue o resultado de um participante, as estatísticas agregadas, as comparações e a linha do tempo das atividades |
GET results/{challenger_id}/activities/{activity_id}/analytics/ |
Carregue parciais, gráficos e análises permitidas dos sensores de uma atividade aceita |
Comece com result-settings/. Use suas flags e descrições de colunas para decidir quais controles e telas devem ser renderizados, em vez de pressupor que todos os desafios tenham o mesmo formato de resultados.
Obtenha os valores de challenger_id na classificação paginada results/ do desafio. Os IDs das atividades vêm da lista aninhada activities.results na resposta detalhada.
Configurações dos resultados #
GET /api/v1/gamification/challenge/{code}/result-settings/
A resposta descreve a apresentação atual dos resultados do desafio:
primary_columneordered_byidentificam a métrica da classificação e a ordem padrão.columnseteam_columnssão descritores ordenados de renderização; suas chaves correspondem aos campos das linhas de classificação dos participantes e das equipes.totals,progress,sections,distanceseparticipant_datafornecem contexto opcional para todo o desafio.show_mapeshow_heatmapinformam ao cliente quais visualizações de mapa oferecer.show_analyticsindica se o solicitante pode ver os dados fisiológicos das atividades de outro participante; não restringe as análises acessíveis do próprio solicitante.results_limitedénullquando não há restrições. Um número significa que o solicitante só pode ver essa quantidade de linhas no topo e que os controles de filtragem, ordenação e paginação dos resultados devem ser ocultados.
Esses valores consideram o solicitante. Por exemplo, o mesmo desafio pode retornar configurações sem restrições para um participante e configurações limitadas para um usuário conectado que não participa.
Mapa de calor dos treinos #
GET /api/v1/gamification/challenge/{code}/heatmap/
O mapa de calor agrega as atividades GPS aceitas em células de uma grade de aproximadamente 150 metros. Cada célula é [longitude, latitude, weight], em que o peso corresponde ao número de atividades distintas que passaram por ela. Uma atividade contribui no máximo uma vez para cada célula, e treinos marcados como privados no aplicativo de origem são excluídos.
Os mapas de calor são gerados sob demanda. Quando não há um mapa armazenado, a primeira solicitação inicia a geração em segundo plano e retorna:
{"status": "pending"}
Consulte novamente após alguns segundos. Uma resposta pronta contém generated_at, cell_size, activity_count, max_weight, truncated e cells. Os dados armazenados podem continuar sendo servidos enquanto um mapa desatualizado é atualizado em segundo plano.
Use max_weight para normalizar uma camada de densidade ponderada. Se truncated for true, a resposta conterá as células com maior peso, em vez de todas as células geradas.
O endpoint retorna 404 quando o organizador não habilitou show_heatmap, durante uma janela de resultados ocultos ou quando os resultados públicos estão restritos e o solicitante não é participante.
Resultado detalhado do participante #
GET /api/v1/gamification/challenge/{code}/results/{challenger_id}/detailed/
A resposta combina:
- A linha de classificação do participante, a distância escolhida, a colocação e
result_rank_total. statistics, como distância, duração, ritmo ou velocidade, energia, passos, número de atividades, dias ativos, maior sequência e frequência cardíaca média, quando disponível.is_own_result, que identifica se a linha pertence ao participante autenticado.head_to_head, disponível apenas quando um participante visualiza seu próprio resultado. Inclui colocação e percentil, métrica da classificação, diferenças para concorrentes próximos e para o líder, média do grupo e linhas do pódio.activities, uma lista aninhada e paginada de atividades aceitas e visíveis creditadas ao resultado. Cada linha inclui metadados básicos do treino, ritmo médio, uma forma de rota quando disponível ehas_analytics.
Para um resultado de distância fixa, a lista de atividades termina na atividade que concluiu a distância selecionada. As atividades posteriores não aparecem porque não contribuíram para esse resultado.
Paginação aninhada das atividades #
A lista de atividades tem os campos habituais count, next, previous e results, mas usa parâmetros de consulta próprios para não entrar em conflito com a paginação de nível superior:
| Parâmetro | Significado |
|---|---|
activities_page |
Número da página, começando em 1 |
activities_per_page |
Itens por página; padrão 25 e sujeito ao máximo da API |
Formas de rota sem localização #
As rotas na linha do tempo das atividades não são coordenadas geográficas. O servidor desloca e redimensiona cada trajeto GPS para um espaço fixo de coordenadas SVG de 158 × 108 e retorna apenas:
path— dados do caminho SVGstarteend— pontos no espaço de coordenadas normalizadopoint_count— número de pontos na forma retornada
Latitude e longitude absolutas, limites e centro não são incluídos. A mesma rota deslocada para outro local gera a mesma forma; portanto, ela é adequada para uma miniatura, mas não pode ser traçada em um mapa geográfico.
Análises por atividade #
GET /api/v1/gamification/challenge/{code}/results/{challenger_id}/activities/{activity_id}/analytics/
A atividade deve estar aceita, visível e associada exatamente ao resultado desse participante. A resposta contém distância, duração, ritmo e velocidade básicos, além de todas as análises que podem ser derivadas dos fluxos armazenados:
| Bloco | Conteúdo |
|---|---|
route |
A mesma forma de rota sem localização usada na linha do tempo das atividades |
km_splits |
Parciais de quilômetros completos mais uma parcial final opcional, incluindo marcadores da mais rápida e da mais lenta |
elevation |
Perfil de elevação com amostragem reduzida, subida, descida, mínimo e máximo |
heart_rate e hr_zones |
Série de frequência cardíaca com amostragem reduzida, média, máxima, máxima de referência e tempo em cinco zonas |
cadence |
Série de cadência com amostragem reduzida e média |
effort_score |
Estimativa de esforço derivada da frequência cardíaca |
Cada bloco pode ser null independentemente dos demais, pois provedores e dispositivos fornecem fluxos diferentes. has_streams indica se há análises utilizáveis de fluxos. x_kind identifica se os valores x do gráfico representam a distância acumulada ou o tempo decorrido.
Os blocos de baixa sensibilidade — forma de rota, parciais, ritmo e elevação — estão disponíveis para qualquer solicitante que possa acessar o resultado. Os blocos fisiológicos — frequência cardíaca, zonas, cadência e esforço — estão sempre disponíveis para o resultado acessível do próprio solicitante. Para a atividade de outro participante, eles só são retornados quando o organizador habilitou show_analytics e o solicitante cumpre as regras de visibilidade dos resultados. Caso contrário, esses blocos são null e physio_restricted é true.
Regras de visibilidade e privacidade #
| Configuração ou estado | Efeito |
|---|---|
show_heatmap desativado |
O mapa de calor retorna 404; result-settings informa show_heatmap: false |
show_analytics desativado |
Os blocos fisiológicos das atividades de outros participantes são removidos; as análises acessíveis do próprio usuário não são afetadas |
| Janela de resultados ocultos ativa | Os detalhes dos resultados dos participantes ficam ocultos; o mapa de calor retorna 404; show_heatmap e show_analytics são false |
hide_results_public ativado |
Usuários conectados que não participam ficam limitados ao número configurado de melhores resultados, não podem carregar o mapa de calor nem ver análises fisiológicas de outros participantes |
| Treino não aceito ou não visível | Ele é omitido da linha do tempo e não pode ser aberto pelo endpoint de análises |
Os participantes do desafio mantêm acesso aos resultados completos fora de uma janela de resultados ocultos. O acesso da equipe da organização pode diferir do acesso dos participantes, mas os clientes ainda devem seguir os valores específicos do solicitante retornados por result-settings/.