16/04/2024

Obtendo dados do Everhour usando Python

Everhour é um sistema para registro de atividades popular adotado por empresas de todos os portes. Na EximiaCo, utilizamos o Everhour para registrar nossos engajamentos com nossos clientes.

O Everhour oferece uma API fácil de usar, baseada em HTTP.

Chave de acesso

Para obter a chave de acesso para a API do Everhour, você deve seguir os seguintes passos:

  1. Acesse o aplicativo web do Everhour e faça login na sua conta.
  2. Vá até a seção ‘My Profile’ clicando no seu ícone de perfil.
  3. Dentro da página de configurações, role até o final até encontrar a seção chamada ‘Application Access’.
  4. Nesta seção, você encontrará o seu token de API, que é a chave de acesso necessária para autenticar suas solicitações à API do Everhour.

Lembre-se de manter sua chave de API segura e não compartilhá-la publicamente, pois ela dá acesso aos dados da sua conta no Everhour.

Seu usuário precisa ter acesso administrativo para poder obter esse acesso.

Instalando as dependências

Para fazer uso da API, usaremos o pacote requests. Para poder tratar os dados, usaremos o pandas.

Python
! pip install pandas requests

No código, é importante importar esses dois pacotes.

Python
import pandas as pd
import requests

Obtendo os dados dos usuários

Vamos então iniciar nossa cruzada por obtenção de dados do Everhour. Para começar, vamos escrever código genérico para interagir com endpoints chaves.

Python
def fetch_everhour(api_token, entity, params = {}):
    url = f"https://api.everhour.com/team/{entity}"
    
    headers = {
      'Content-Type': 'application/json',
      'X-Api-Key': api_token
    }

    response = requests.get(url, params=params, headers=headers)
    if response.status_code == 200:
        return response.json()
    else:
        print (response)
        return None

Você pode aprender um bocado sobre os endpoints do Everhour na documentação oficial.

Python
def convert_to_dataframe(source):
    if source:
        df = pd.DataFrame(source)
        return df
    else:
        return pd.DataFrame() 

Por exemplo, o código abaixo resgata todas os usuários definidas no Everhour da organização.

Python
api_token = "SEU-API-TOKEN"
users = convert_to_dataframe(fetch_everhour(api_token, "users"))
users.head()

Felizmente, Pandas ajuda na hora de entender quais são os dados que foram retornados.

Com os dados obtidos, interessante resgatar apenas informações mais interessantes.

Python
users_f = users[['id', 'name', 'email']]
users_f

Obtendo os dados de apontamentos

Agora que conhecemos os usuários, podemos obter também dados relacionados aos apontamentos que já foram realizados.

Python
params = {
    "from": "2024-04-01",
    "to": "2024-04-16",
    "limit": 10000,
    "page": 1
}
times = convert_to_dataframe(fetch_everhour(api_token, "time", params))

Aqui é interessante observar a possibilidade de passar informações de intervalo.

Novamente, o Everhour fornece provavelmente mais informações do que necessitamos.

Python
times_f = times[['user', 'date', 'time']]
times_f

O campo “user” possui um id.

Consolidando apontamos em um período

De um lado, temos dia e volume de horas lançados. De outro, temos os dados dos usuários (pessoas que apontam horas). Vamos consolidar os dados em uma consulta só.

Python
data = pd.merge(times_f, users_f, left_on="user", right_on="id", how="left")
summary = data[['name', 'time']]
summary.groupby("name").sum().plot(kind="bar")

Bacana, não?

Uma classe para acelerar as consultas

No lugar de passar tanto trabalho com tantos dados, podemos criar uma classe que acelera o processo como um todo.

Python
import requests
import pandas as pd

class EverhourClient:
    def __init__(self, api_token):
        self.api_token = api_token
        self.base_url = "https://api.everhour.com/team/"

    def fetch_everhour(self, entity, params={}):
        url = f"{self.base_url}{entity}"
        headers = {
            'Content-Type': 'application/json',
            'X-Api-Key': self.api_token
        }
        response = requests.get(url, params=params, headers=headers)
        if response.status_code == 200:
            return response.json()
        else:
            print(response)
            return None

    def convert_to_dataframe(self, source):
        if source:
            return pd.DataFrame(source)
        else:
            return pd.DataFrame()

    def get_all_users(self):
        users_json = self.fetch_everhour("users")
        users_df = self.convert_to_dataframe(users_json)
        return users_df[['id', 'name', 'email']]

    def get_appointments(self, start, end):
        params = {
            "from": start,
            "to": end,
            "limit": 10000,
            "page": 1
        }
        times_json = self.fetch_everhour("time", params)
        times_df = self.convert_to_dataframe(times_json)
        return times_df[['id', 'user', 'date', 'time']]

    def get_summary(self, start, end):
        times_df = self.get_appointments(start, end)
        users_df = self.get_all_users()
        data = pd.merge(times_df, users_df, left_on="user", right_on="id", how="left")
        summary = data[['name', 'time']]
        return summary.groupby("name").sum()

Esse código torna a utilização da API algo muito mais fácil.

Python
api_token = "SEU-API-TOKEN"
client = EverhourClient(api_token)

# Get all users
users = client.get_all_users()
print(users.head())

# Get appointments between dates
appointments = client.get_appointments("2024-04-01", "2024-04-16")
print(appointments.head())

# Get time summary between dates
summary = client.get_summary("2024-04-01", "2024-04-16")
print(summary)

Deixe seu comentário

Subscribe
Notify of
0 Comentários
Oldest
Newest Most Voted
Feedbacks interativos
Ver todos os comentários

Curso Reputação e Marketing Pessoal

Masterclasses

01

Introdução do curso

02

Por que sua “reputação” é importante?

03

Como você se apresenta?

04

Como você apresenta suas ideias?

05

Como usar Storytelling?

06

Você tem uma dor? Eu tenho o alívio!

07

Escrita efetiva para não escritores

08

Como aumentar (e manter) sua audiência?

09

Gatilhos! Gatilhos!

10

Triple Threat: Domine Produto, Embalagem e Distribuição

11

Estratégias Vencedoras: Desbloqueie o Poder da Teoria dos Jogos

12

Análise SWOT de sua marca pessoal

13

Soterrado por informações? Aprenda a fazer gestão do conhecimento pessoal, do jeito certo

14

Vendo além do óbvio com a Pentad de Burkle

15

Construindo Reputação através de Métricas: A Arte de Alinhar Expectativas com Lag e Lead Measures

16

A Tríade da Liderança: Navegando entre Líder, Liderado e Contexto no Mundo do Marketing Pessoal

17

Análise PESTEL para Marketing Pessoal

18

Canvas de Proposta de Valor para Marca Pessoal

19

Método OKR para Objetivos Pessoais

20

Análise de Competências de Gallup

21

Feedback 360 Graus para Autoavaliação

22

Modelo de Cinco Forças de Porter

23

Estratégia Blue Ocean para Diferenciação Pessoal

24

Análise de Tendências para Previsão de Mercado

25

Design Thinking para Inovação Pessoal

26

Metodologia Agile para Desenvolvimento Pessoal

27

Análise de Redes Sociais para Ampliar Conexões

Lições complementares

28

Apresentando-se do Jeito Certo

29

O mercado remunera raridade? Como evidenciar a sua?

30

O que pode estar te impedindo de ter sucesso

Recomendações de Leituras

31

Aprendendo a qualificar sua reputação do jeito certo

32

Quem é você?

33

Qual a sua “IDEIA”?

34

StoryTelling

35

Você tem uma dor? Eu tenho o alívio!

36

Escrita efetiva para não escritores

37

Gatilhos!

38

Triple Threat: Domine Produto, Embalagem e Distribuição

39

Estratégias Vencedoras: Desbloqueie o Poder da Teoria do Jogos

40

Análise SWOT de sua marca pessoal

Inscrição realizada com sucesso!

No dia da masterclass você receberá um e-mail com um link para acompanhar a aula ao vivo. Até lá!

A sua subscrição foi enviada com sucesso!

Aguarde, em breve entraremos em contato com você para lhe fornecer mais informações sobre como participar da mentoria.

Crie sua conta

Preencha os dados para iniciar o seu cadastro no plano anual do Clube de Estudos:

Crie sua conta

Preencha os dados para iniciar o seu cadastro no plano mensal do Clube de Estudos:

0
Quero saber a sua opinião, deixe seu comentáriox