Como Integrar Dados de Geolocalização e Clima

Por Réulison Silva
Réulison Silva
Published on
Integrando Dados de Geolocalização e Clima

Empresas de delivery, farmácias, moda e turismo podem obter insights valiosos unindo informações de localização e clima para prever picos de demanda e personalizar ofertas. Neste artigo, você vai aprender como:

  1. Capturar o IP do visitante.
  2. Descobrir sua localização com a API ip-api.com.
  3. Obter dados meteorológicos com a API OpenWeatherMap.
  4. Enviar essas informações para o ActiveCampaign (CRM).
  5. Salvar no Google BigQuery para criar dashboards no Looker Studio.

1️⃣ Capturando o IP do visitante

No backend Python (Flask ou Django, por exemplo), o IP pode ser obtido diretamente do request:

from flask import Flask, request

app = Flask(__name__)

@app.route("/")
def get_ip():
    ip = request.headers.get('X-Forwarded-For', request.remote_addr)
    return {"ip": ip}

if __name__ == "__main__":
    app.run(debug=True)

💡 Dica: Se seu app estiver atrás de um proxy ou CDN (Cloudflare, Nginx), verifique se X-Forwarded-For está habilitado.

2️⃣ Descobrindo a localização com ip-api.com

A API ip-api não requer autenticação e retorna dados como cidade, estado, país, latitude e longitude.

import requests

def get_location(ip):
    url = f"http://ip-api.com/json/{ip}"
    response = requests.get(url)
    return response.json()

# Exemplo:
ip = "177.192.19.203"
location_data = get_location(ip)
print(location_data)

Resposta:

{
  "city": "Rio de Janeiro",
  "regionName": "Rio de Janeiro",
  "lat": -22.9072,
  "lon": -43.1883,
  "country": "Brazil"
}

3️⃣ Obtendo dados climáticos com OpenWeatherMap

Crie uma conta gratuita em openweathermap.org e obtenha sua API Key. Usaremos latitude e longitude obtidas no passo anterior.

def get_weather(lat, lon, api_key):
    url = f"https://api.openweathermap.org/data/2.5/weather"
    params = {
        "lat": lat,
        "lon": lon,
        "appid": api_key,
        "lang": "pt_br",
        "units": "metric"  # Celsius
    }
    response = requests.get(url, params=params)
    return response.json()

weather_data = get_weather(location_data["lat"], location_data["lon"], "SUA_API_KEY")
print(weather_data)

Exemplo de retorno simplificado:

{
  "weather": [{"description": "nuvens dispersas"}],
  "main": {"temp": 20.5, "humidity": 83},
  "wind": {"speed": 4.6}
}

4️⃣ Enviando dados para o ActiveCampaign

Você pode querer ter esses dados em seu CRM a fim de criar mensagens personalizadas ou integrar com a Meta e criar públicos customizados. Isso pode ser relevante para usar como testes, por exemplo, criar um público baseado em clientes que costuman comprar em dias ensolarados.

Documentação: Sync Contact Data

def send_to_activecampaign(api_url, api_token, email, custom_fields):
    headers = {
        "Api-Token": api_token,
        "Content-Type": "application/json"
    }
    payload = {
        "contact": {
            "email": email,
            "fieldValues": [
                {"field": "1", "value": custom_fields.get("cidade")},
                {"field": "2", "value": custom_fields.get("temperatura")}
            ]
        }
    }
    response = requests.post(f"{api_url}/api/3/contact/sync", headers=headers, json=payload)
    return response.json()

custom_fields = {
    "cidade": location_data["city"],
    "temperatura": weather_data["main"]["temp"]
}

send_to_activecampaign("https://SEUDOMINIO.api-us1.com", "SUA_API_TOKEN", "cliente@email.com", custom_fields)

🔹 Antes, crie os campos personalizados no ActiveCampaign e anote seus IDs.

5️⃣ Salvando no Google BigQuery

Com o BigQuery, você pode criar dashboards no Looker Studio para análise histórica.

from google.cloud import bigquery

def save_to_bigquery(project_id, dataset_id, table_id, row_data):
    client = bigquery.Client(project=project_id)
    table_ref = client.dataset(dataset_id).table(table_id)
    table = client.get_table(table_ref)
    errors = client.insert_rows(table, [row_data])
    if errors:
        print(f"Erro: {errors}")
    else:
        print("Dados inseridos com sucesso!")

row = (
    location_data["query"],            # IP
    location_data["city"],
    location_data["regionName"],
    location_data["country"],
    location_data["lat"],
    location_data["lon"],
    weather_data["main"]["temp"],
    weather_data["main"]["humidity"],
    weather_data["weather"][0]["description"]
)

save_to_bigquery("seu-projeto", "seu_dataset", "sua_tabela", row)

💡 Certifique-se de ter configurado o Service Account JSON e exportado a variável:

export GOOGLE_APPLICATION_CREDENTIALS="chave.json"

6️⃣ Possíveis Aplicações

  • Delivery de comida: prever aumento de pedidos de sopas em dias frios ou açaí em dias quentes.
  • Farmácias: campanhas para produtos sazonais (antigripais, protetor solar).
  • Moda: recomendações de roupas baseadas na previsão local.
  • Turismo: ofertas de passeios de acordo com clima favorável.

Estrutura dos dados no BigQuery

Vamos criar um exemplo hipotético de uma empresa de delivery e um dataset contendo informações de pedidos e clima. Sua tabela no BigQuery precisa ter pelo menos estas colunas

categoriaclimaqtd_pedidos
SorveteEnsolarado154
SorveteChuvoso177
SorveteFrio163
SorveteNublado96
SorveteQuente36
SopaEnsolarado164
SopaChuvoso167
SopaFrio148
SopaNublado106
SopaQuente125
PizzaEnsolarado32
PizzaChuvoso31
PizzaFrio31
PizzaNublado112
PizzaQuente151
HambúrguerEnsolarado129
HambúrguerChuvoso130
HambúrguerFrio31
HambúrguerNublado21
HambúrguerQuente70
SaladaEnsolarado139
SaladaChuvoso64
SaladaFrio89
SaladaNublado181
SaladaQuente86

💡 Observações:

  • categoria → vem do seu sistema de pedidos.
  • clima → vem da API OpenWeather.
  • qtd_pedidos → geralmente 1 por linha, mas pode ser agregado.

Conectar BigQuery ao Looker Studio

  1. No Looker Studio, clique em CriarFonte de dados.
  2. Escolha BigQuery.
  3. Selecione o projeto, dataset e a tabela que contém os pedidos.
  4. Clique em Conectar e depois em Adicionar ao relatório.

Criar o gráfico

  1. No relatório, clique em Adicionar um gráfico.

  2. Escolha **Gráfico de barras empilhadas **(Stacked Bar Chart) — assim, cada barra é uma categoria de comida e cada cor representa um tipo de clima.

  3. Configure:

    • Dimensão: categoria
    • Dimensão de cor: clima
    • Métrica: SUM(qtd_pedidos)
  4. Em Estilo, habilite Empilhado 100% se quiser comparar proporções.

Você verá algo assim:

Gráfico de barras comparando o número de pedidos por categoria de comida em diferentes tipos de clima, com destaque para variações na demanda.
Gráfico de barras comparando o número de pedidos por categoria de comida em diferentes tipos de clima, com destaque para variações na demanda.

Confira o report no Looker Studio.

Você também pode usar o Python para gerar o gráfico diretamente usando a biblioteca matplotlib. Por exemplo:

import pandas as pd
import matplotlib.pyplot as plt

# Categorias de comida e tipos de clima
categorias = ["Sorvete", "Sopa", "Pizza", "Hambúrguer", "Salada"]
climas = ["Ensolarado", "Chuvoso", "Frio", "Nublado", "Quente"]

# Definir lógica de pedidos por categoria e clima
# Valores simulados com base em tendências reais
tabela_pedidos = {
    "Sorvete":    {"Ensolarado": 180, "Chuvoso": 40,  "Frio": 20,  "Nublado": 60,  "Quente": 160},
    "Sopa":       {"Ensolarado": 30,  "Chuvoso": 150, "Frio": 180, "Nublado": 100, "Quente": 20},
    "Pizza":      {"Ensolarado": 120, "Chuvoso": 140, "Frio": 160, "Nublado": 130, "Quente": 90},
    "Hambúrguer": {"Ensolarado": 140, "Chuvoso": 120, "Frio": 100, "Nublado": 110, "Quente": 150},
    "Salada":     {"Ensolarado": 150, "Chuvoso": 60,  "Frio": 40,  "Nublado": 80,  "Quente": 170}
}

# Gerar DataFrame
dados = []
for categoria in categorias:
    for clima in climas:
        pedidos = tabela_pedidos[categoria][clima]
        dados.append({"Categoria": categoria, "Clima": clima, "Pedidos": pedidos})

df = pd.DataFrame(dados)

# Criar gráfico
plt.figure(figsize=(10, 6))
for categoria in categorias:
    subset = df[df["Categoria"] == categoria]
    plt.plot(subset["Clima"], subset["Pedidos"], marker='o', label=categoria)

plt.title("Número de pedidos por Categoria de Comida x Tipo de Clima")
plt.xlabel("Tipo de Clima")
plt.ylabel("Número de Pedidos")
plt.legend(title="Categoria de Comida")
plt.grid(True, linestyle='--', alpha=0.5)
plt.tight_layout()
plt.show()

# Salvar CSV para Looker Studio
csv_path = "pedidos_categoria_clima_realistas.csv"
df.to_csv(csv_path, index=False)
csv_path

Também é gerado o arquivo pedidos_categoria_clima_realistas.csv para você usar no Looker Studio, caso quiser testar.

Segue exemplo de resultado:

Gráfico mostrando a relação entre o número de pedidos por categoria de comida (Sorvete, Sopa, Pizza, Hambúrguer, Salada) e o tipo de clima (Ensolarado, Chuvoso, Frio, Nublado, Quente).
Gráfico mostrando a relação entre o número de pedidos por categoria de comida (Sorvete, Sopa, Pizza, Hambúrguer, Salada) e o tipo de clima (Ensolarado, Chuvoso, Frio, Nublado, Quente).

🎯 Conclusão

Com poucas linhas de código em Python, você conecta dados de IP, localização e clima para enriquecer seu CRM e gerar dashboards no Looker. Isso não apenas fornece insights para o marketing, mas também abre portas para estratégias de personalização em tempo real.


📌 FAQ: Integrando Dados de Geolocalização e Clima

🔹 1. Por que integrar dados de geolocalização e clima?

Resposta: Essa integração permite prever demandas sazonais (ex.: mais sopas em dias frios) e personalizar campanhas de marketing. Empresas de delivery, turismo e varejo usam esses dados para:

  • ✅ Otimizar estoques (antecipar picos de vendas).
  • ✅ Criar ofertas personalizadas (ex.: promoção de sorvetes em dias quentes).
  • ✅ Melhorar a experiência do cliente (recomendações baseadas no clima local).

🔹 2. Como obter a localização do usuário de forma precisa?

Resposta: Você pode usar a API gratuita ip-api.com:

import requests
def get_location(ip):
    response = requests.get(f"http://ip-api.com/json/{ip}")
    return response.json()  # Retorna cidade, país, lat/long

Dica: Se seu app estiver atrás de um proxy (ex.: Cloudflare), use request.headers.get('X-Forwarded-For') para capturar o IP real.

🔹 3. Qual API de clima usar e como acessá-la?

Resposta: A OpenWeatherMap oferece dados meteorológicos em tempo real. Exemplo em Python:

def get_weather(lat, lon, api_key):
    params = {"lat": lat, "lon": lon, "units": "metric", "lang": "pt_br"}
    response = requests.get("https://api.openweathermap.org/data/2.5/weather", params=params)
    return response.json()  # Retorna temperatura, umidade, descrição do clima

Observação: Crie uma conta gratuita no site para obter sua chave de API.

🔹 4. Como enviar esses dados para um CRM como o ActiveCampaign?

Resposta: Use a API do ActiveCampaign para atualizar campos personalizados:

payload = {
    "contact": {
        "email": "cliente@email.com",
        "fieldValues": [
            {"field": "1", "value": "Rio de Janeiro"},  # Cidade
            {"field": "2", "value": "25°C"}             # Temperatura
        ]
    }
}

Pré-requisito: Crie os campos personalizados no CRM antes de enviar os dados.

🔹 5. Por que salvar esses dados no BigQuery?

Resposta: O Google BigQuery permite:

  • Armazenar dados históricos para análise de tendências.
  • Criar dashboards no Looker Studio (ex.: gráficos de pedidos por clima).
  • Integrar com outras ferramentas (ex.: Google Analytics, Meta Ads).

Exemplo de código para inserção:

from google.cloud import bigquery
row = ("177.192.19.203", "Rio de Janeiro", -22.9072, -43.1883, 25.5, "nublado")
client.insert_rows(table, [row])  # Insere na tabela do BigQuery

🔹 6. Quais são as aplicações práticas para negócios?

Resposta:

  • Delivery: Aumentar promoções de sopas em dias frios.
  • Farmácias: Alertar sobre protetor solar em dias ensolarados.
  • Moda: Sugerir roupas adequadas ao clima local.
  • Turismo: Oferecer passeios em dias com previsão favorável.

🔹 7. Como visualizar os dados no Looker Studio?

Passo a passo:

  1. Conecte o BigQuery como fonte de dados.
  2. Crie um gráfico de barras empilhadas com:
    • Dimensão: Categoria de comida
    • Cor: Tipo de clima
    • Métrica: SOMA(Pedidos)
  3. Habilite "Empilhado 100%" para comparar proporções.

Exemplo de resultado:

Gráfico de barras comparando o número de pedidos por categoria de comida em diferentes tipos de clima, com destaque para variações na demanda.
Gráfico de barras comparando o número de pedidos por categoria de comida em diferentes tipos de clima, com destaque para variações na demanda.

🔹 8. Quais são os erros comuns e como evitá-los?

Problemas frequentes:

  • IP incorreto: Verifique headers como X-Forwarded-For em apps com proxy.
  • Limite de APIs gratuitas: APIs como ip-api.com têm limite de requisições/dia.
  • Dados incompletos no CRM: Certifique-se de mapear os campos personalizados corretamente.

Solução: Sempre inclua tratamentos de erro no código:

try:
    location = get_location(ip)
except requests.exceptions.RequestException as e:
    print(f"Erro ao obter localização: {e}")

🔹 9. Posso usar outras linguagens além de Python?

Resposta: Sim! As APIs mencionadas (ip-api.com, OpenWeatherMap, ActiveCampaign) são compatíveis com qualquer linguagem que suporte requisições HTTP (ex.: JavaScript, PHP, Ruby). Exemplo em Node.js:

const response = await fetch(`http://ip-api.com/json/${ip}`);
const data = await response.json();

🔹 10. Como garantir a privacidade dos dados?

Recomendações:

  • Anonimização: Armazene apenas a cidade/região, não o endereço exato.
  • LGPD: Adicione um termo de consentimento para coletar dados de localização.
  • Criptografia: Use conexões HTTPS e encrypte dados sensíveis no banco de dados.

Fique ligado

Seja um Expert em Growth

Receba insights práticos sobre marketing, dados, performance e tecnologia direto no seu email.