Inscreva-se em minha Newsletter
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:
- Capturar o IP do visitante.
- Descobrir sua localização com a API ip-api.com.
- Obter dados meteorológicos com a API OpenWeatherMap.
- Enviar essas informações para o ActiveCampaign (CRM).
- 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
| categoria | clima | qtd_pedidos |
|---|---|---|
| Sorvete | Ensolarado | 154 |
| Sorvete | Chuvoso | 177 |
| Sorvete | Frio | 163 |
| Sorvete | Nublado | 96 |
| Sorvete | Quente | 36 |
| Sopa | Ensolarado | 164 |
| Sopa | Chuvoso | 167 |
| Sopa | Frio | 148 |
| Sopa | Nublado | 106 |
| Sopa | Quente | 125 |
| Pizza | Ensolarado | 32 |
| Pizza | Chuvoso | 31 |
| Pizza | Frio | 31 |
| Pizza | Nublado | 112 |
| Pizza | Quente | 151 |
| Hambúrguer | Ensolarado | 129 |
| Hambúrguer | Chuvoso | 130 |
| Hambúrguer | Frio | 31 |
| Hambúrguer | Nublado | 21 |
| Hambúrguer | Quente | 70 |
| Salada | Ensolarado | 139 |
| Salada | Chuvoso | 64 |
| Salada | Frio | 89 |
| Salada | Nublado | 181 |
| Salada | Quente | 86 |
💡 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
- No Looker Studio, clique em Criar → Fonte de dados.
- Escolha BigQuery.
- Selecione o projeto, dataset e a tabela que contém os pedidos.
- Clique em Conectar e depois em Adicionar ao relatório.
Criar o gráfico
No relatório, clique em Adicionar um gráfico.
Escolha **Gráfico de barras empilhadas **(Stacked Bar Chart) — assim, cada barra é uma categoria de comida e cada cor representa um tipo de clima.
Configure:
- Dimensão:
categoria - Dimensão de cor:
clima - Métrica: SUM(
qtd_pedidos)
- Dimensão:
Em Estilo, habilite Empilhado 100% se quiser comparar proporções.
Você verá algo assim:
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:
🎯 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:
- Conecte o BigQuery como fonte de dados.
- Crie um gráfico de barras empilhadas com:
- Dimensão: Categoria de comida
- Cor: Tipo de clima
- Métrica: SOMA(Pedidos)
- Habilite “Empilhado 100%” para comparar proporções.
Exemplo de resultado:
🔹 8. Quais são os erros comuns e como evitá-los?
Problemas frequentes:
- IP incorreto: Verifique headers como
X-Forwarded-Forem 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.