Skip to content

oriolgds/TwitterPostBot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

README

Este proyecto es una Edge Function en Supabase (Deno) que:

  • Obtiene las noticias más relevantes (internacionales y nacionales) del día mediante la API de Perplexity.
  • Filtra noticias ya publicadas para evitar duplicados.
  • Genera un hilo de Twitter con las noticias nuevas.
  • Publica el hilo tweet por tweet usando OAuth 1.0a.
  • Registra y controla los límites de uso de API de Perplexity y Twitter en Supabase.

Requisitos previos

  1. Cuenta Supabase activa.
  2. Proyecto Supabase creado.
  3. Credenciales de Twitter (API Key, API Secret, Access Token, Access Token Secret).
  4. Clave de API de Perplexity.

1. Crear las tablas en Supabase

En tu proyecto Supabase, ve al SQL Editor y ejecuta:

create table api_usage (
  id bigint generated by default as identity primary key,
  service text not null,
  requests_count integer not null default 0,
  month_year text not null,
  last_reset timestamp with time zone not null default now()
);

create table news_cache (
  id bigint generated by default as identity primary key,
  title text not null,
  description text not null,
  url text,
  published_date timestamp with time zone,
  type text not null,
  content_hash text not null unique
);

create table twitter_threads (
  id bigint generated by default as identity primary key,
  thread_topic text not null,
  posts_count integer not null,
  posts_published integer not null default 0,
  first_tweet_id text,
  status text not null default 'pending',
  inserted_at timestamp with time zone not null default now()
);

create table twitter_posts (
  id bigint generated by default as identity primary key,
  thread_id bigint references twitter_threads(id),
  content text not null,
  tweet_id text not null,
  position integer not null,
  inserted_at timestamp with time zone not null default now()
);

2. Políticas RLS (Opcional)

  1. En Database → Policies, habilita RLS para cada tabla.
  2. Crea estas políticas, reemplazando <service_role> por el role interno de Supabase:
create policy "service_role_full_access" 
  on api_usage 
  for all using (auth.role() = '<service_role>');

create policy "service_role_full_access" 
  on news_cache 
  for all using (auth.role() = '<service_role>');

create policy "service_role_full_access" 
  on twitter_threads 
  for all using (auth.role() = '<service_role>');

create policy "service_role_full_access" 
  on twitter_posts 
  for all using (auth.role() = '<service_role>');

3. Secrets y configuración de entorno

En el Dashboard → Edge Functions → Settings, agrega estas variables de entorno:

  • SUPABASE_URL
  • SUPABASE_SERVICE_ROLE_KEY
  • PERPLEXITY_API_KEY
  • TWITTER_API_KEY
  • TWITTER_API_SECRET
  • TWITTER_ACCESS_TOKEN
  • TWITTER_ACCESS_TOKEN_SECRET

4. Deploy desde el panel web de Supabase

  1. Entra al Dashboard de tu proyecto en app.supabase.com.
  2. En el menú de la izquierda, selecciona Edge Functions.
  3. Haz clic en New Function.
  4. Asigna el nombre news-tweet-thread y crea la función.
  5. En el editor que aparece, sube o copia y pega el contenido de index.ts.
  6. Haz clic en Save & Deploy. Espera a que termine el despliegue.
  7. Una vez desplegada, en la pestaña Settings de la función, configura las Environment Variables (igual que en el paso 3).
  8. Copia la Function URL que aparece en la pestaña Overview.

5. Cronjob en Supabase

Usa Scheduled Functions de Supabase:

  1. Ve a Dashboard → Edge Functions → Schedules.
  2. Haz clic en New Schedule y crea dos entradas:
    • daily-morning: Cron 0 6 * * *, Function news-tweet-thread.
    • daily-evening: Cron 0 19 * * *, Function news-tweet-thread.

6. Flujo de ejecución

Cada ejecución:

  1. Inicializa cliente Supabase con service role.
  2. Verifica límite mensual en api_usage.
  3. Solicita noticias a Perplexity.
  4. Filtra duplicados usando news_cache.
  5. Genera y publica tweets en Twitter vía OAuth 1.0a.
  6. Registra hilos en twitter_threads y tweets en twitter_posts.
  7. Actualiza contador en api_usage.

7. Solución de problemas

  • Credenciales faltantes: revisa Variables de Entorno en Settings.
  • Límites alcanzados: consulta api_usage, espera al siguiente mes o ajusta consumo.
  • Acceso bloqueado por RLS: confirma que la función use el role definido.

About

A bot to post twitter news

Resources

Stars

Watchers

Forks