Inicio / Documentación / Python
Envía notificaciones push desde Python
¿Un entrenamiento largo, un ETL nocturno o un script que a veces falla a las 3 de la madrugada? Envíate una notificación push al iPhone desde Python con un solo requests.post a la API de Pling. A continuación: una línea, un asistente reutilizable, notificación ante excepciones, una versión con la biblioteca estándar sin dependencias, y enganches para Django y Flask.
La versión mínima
Con requests, es una sola llamada:
import requests
requests.post("https://api.plingpush.com/api/push", json={
"token": "YOUR_TOKEN",
"title": "Training finished",
"message": "epoch 50, val_acc 0.94",
"priority": "high",
})
Un ayudante reutilizable
Lee el token desde el entorno y envuelve la llamada para que el resto de tu código se mantenga limpio:
import os, requests
def pling(title, message="", priority="normal", url=None):
payload = {"token": os.environ["PLING_TOKEN"], "title": title,
"message": message, "priority": priority}
if url:
payload["url"] = url
requests.post("https://api.plingpush.com/api/push", json=payload, timeout=10)
pling("ETL complete", "12,418 rows loaded")
Avísame cuando se bloquee
Envuelve la tarea, envía la excepción y relánzala para que tus registros sigan recibiendo el traceback completo:
try:
run_nightly_job()
except Exception as e:
pling("Nightly job crashed", f"{type(e).__name__}: {e}", priority="high")
raise
Sin dependencias (biblioteca estándar)
Si no puedes añadir requests, el módulo integrado urllib funciona en cualquier lugar donde funcione Python:
import json, os, urllib.request
def pling(title, message="", priority="normal"):
data = json.dumps({"token": os.environ["PLING_TOKEN"], "title": title,
"message": message, "priority": priority}).encode()
req = urllib.request.Request("https://api.plingpush.com/api/push", data=data,
headers={"Content-Type": "application/json"})
urllib.request.urlopen(req, timeout=10)
Alertas de errores de Django y Flask
Envía los errores del servidor a tu teléfono en el momento en que ocurren. En Flask:
@app.errorhandler(500)
def on_error(e):
pling("500 on the API", str(e), priority="high")
return "Internal Server Error", 500
En Django, llama al mismo helper desde un controlador de registro o una vista 500 personalizada para que las excepciones de producción lleguen a tu teléfono sin esperar al correo electrónico.
Preguntas frecuentes
¿Necesito la librería requests?
No. requests es la opción más legible, pero la versión con urllib.request de la biblioteca estándar que aparece abajo no tiene ninguna dependencia y resulta práctica dentro de imágenes de Docker o en entornos restringidos.
¿Cómo recibo un aviso cuando mi script se cae?
Envuelve el cuerpo en try / except y llama al ayudante desde el bloque except con el texto de la excepción, luego relánzala. Recibes el resumen del traceback en tu teléfono y sigues viendo el fallo completo en tus registros.
¿Puedo usar esto en Django o Flask?
Sí. Llama al ayudante desde un controlador 500 de Django o una señal, o desde un errorhandler de Flask, para enviar los errores del servidor a tu teléfono a medida que ocurren. Consulta el ejemplo a continuación.
¿Dónde guardo el token?
Léelo desde una variable de entorno como PLING_TOKEN en lugar de codificarlo directamente, y mantenlo fuera del control de versiones.
Más recetas: GitHub Actions · Tareas cron · referencia completa de la API