Package {twscrapeR}


Type: Package
Title: Twitter/X Scraping via Python's 'twscrape' Library
Version: 0.1.3
Date: 2026-05-23
Description: A comprehensive R interface to Python's 'twscrape' library for scraping Twitter/X data. This package uses 'reticulate' to provide a seamless R interface to the fully functional Python 'twscrape' library. Supports searching tweets, user timelines, followers, and more, with built-in rate limiting and multi-account support. Built on top of 'twscrape' by vladkens https://github.com/vladkens/twscrape and inspired by 'snscrape' by JustAnotherArchivist https://github.com/JustAnotherArchivist/snscrape.
License: MIT + file LICENSE
Encoding: UTF-8
Depends: R (≥ 3.6.0)
Imports: reticulate (≥ 1.20), cli (≥ 3.0.0), jsonlite
Suggests: dplyr, purrr, tibble, testthat (≥ 3.0.0)
Config/testthat/edition: 3
RoxygenNote: 7.3.3
URL: https://github.com/agusnieto77/twscrapeR
BugReports: https://github.com/agusnieto77/twscrapeR/issues
NeedsCompilation: no
Packaged: 2026-05-30 02:35:27 UTC; agustin
Author: Agustin Nieto [aut, cre], Claude AI [ctb] (Package development assistance)
Maintainer: Agustin Nieto <agustin.nieto77@gmail.com>
Repository: CRAN
Date/Publication: 2026-06-03 13:10:02 UTC

Entorno global para almacenar configuracion

Description

Entorno global para almacenar configuracion

Usage

.twscraper_env

Format

An object of class environment of length 3.


Agregar Cuenta de Twitter

Description

Agrega una cuenta de Twitter con cookies y la activa automaticamente. IMPORTANTE: Las cookies son obligatorias para activar la cuenta correctamente.

Usage

add_account(
  username,
  password,
  email,
  email_password,
  cookies,
  db_file = "accounts.db",
  verbose = TRUE
)

Arguments

username

Nombre de usuario

password

Contrasena

email

Email de la cuenta

email_password

Contrasena del email

cookies

Cookies de sesion (OBLIGATORIO - formato: "auth_token=...; ct0=...")

db_file

Archivo de base de datos (default: "accounts.db")

verbose

Si 'TRUE', emite mensajes informativos con 'message()'/'warning()'; puede silenciarse con 'suppressMessages()'/'suppressWarnings()'.

Value

Invisibly returns 'TRUE' if the account was added and is active; invisibly returns 'FALSE' if it was not added, already existed, or could not be activated.

Examples


if (check_setup() && interactive()) {
  # add_account(
  #   username = "your_username",
  #   password = "your_password",
  #   email = "you@example.com",
  #   email_password = "your_email_password",
  #   cookies = "auth_token=...; ct0=..."
  # )
}


Agregar Cuenta desde Variables de Entorno

Description

Lee credenciales desde '.Renviron' o variables de entorno y agrega la cuenta sin exponer secretos en el codigo.

Usage

add_account_from_env(prefix = "TWS_", db_file = "accounts.db", verbose = TRUE)

Arguments

prefix

Prefijo de las variables de entorno (default: "TWS_")

db_file

Archivo de base de datos (default: "accounts.db")

verbose

Si 'TRUE', emite mensajes informativos con 'message()'/'warning()'; puede silenciarse con 'suppressMessages()'/'suppressWarnings()'.

Value

'TRUE' si la cuenta se agrego y activo; 'FALSE' si se agrego pero no quedo activa o hubo error

Examples


# En .Renviron:
# TWS_USERNAME='mi_usuario'
# TWS_PASSWORD='mi_password'
# TWS_EMAIL='mi@email.com'
# TWS_EMAIL_PASSWORD='email_pass'
# TWS_AUTH_TOKEN='auth_token_del_navegador'
# TWS_CT0='ct0_del_navegador'

if (check_setup() && interactive()) {
  add_account_from_env()

  # Para una segunda cuenta, usa otro prefijo:
  # TWS2_USERNAME='otra_cuenta'
  # TWS2_PASSWORD='otra_password'
  # ...
  add_account_from_env(prefix = "TWS2_")
}


Convertir Usuario a Data Frame

Description

Convierte un usuario individual a data.frame de una fila

Usage

## S3 method for class 'twscraper_user'
as.data.frame(x, ...)

Arguments

x

Usuario de get_user()

...

Argumentos adicionales

Value

data.frame


Verificar si twscrapeR esta configurado

Description

Verifica si Python y twscrape estan configurados en la sesion actual.

Usage

check_setup(...)

Arguments

...

Ignorado; reservado para compatibilidad futura.

Value

'TRUE' si twscrapeR esta configurado en la sesion actual; 'FALSE' en caso contrario.

Examples

check_setup()

Eliminar Cuenta

Description

Elimina una cuenta de la base de datos

Usage

delete_account(username, db_file = "accounts.db", verbose = TRUE)

Arguments

username

Nombre de usuario a eliminar

db_file

Archivo de base de datos (default: "accounts.db")

verbose

Si 'TRUE', emite mensajes informativos con 'message()'/'warning()'; puede silenciarse con 'suppressMessages()'/'suppressWarnings()'.

Value

Invisibly returns 'TRUE' if the account was deleted; invisibly returns 'FALSE' otherwise.

Examples


if (check_setup() && interactive()) {
  # delete_account("your_username")
}


Asegurar que twscrapeR esta configurado

Description

Uso interno - verifica configuracion antes de operaciones

Usage

ensure_configured()

Filtrar Tweets por Fecha

Description

Filtra tweets por rango de fechas

Usage

filter_by_date(tweets, from = NULL, to = NULL)

Arguments

tweets

Lista de tweets

from

Fecha inicial (POSIXct o character)

to

Fecha final (POSIXct o character)

Value

Lista filtrada de tweets

Examples


tweets <- list(
  list(id = "1", date = as.POSIXct("2026-01-01")),
  list(id = "2", date = as.POSIXct("2026-02-01"))
)
class(tweets) <- c("twscraper_tweets", "list")
tweets_recent <- filter_by_date(tweets, from = "2025-10-01")


Filtrar Tweets por Idioma

Description

Filtra tweets por idioma

Usage

filter_by_lang(tweets, lang)

Arguments

tweets

Lista de tweets

lang

Codigo de idioma (ej: "es", "en", "pt")

Value

Lista filtrada de tweets

Examples


tweets <- list(
  list(id = "1", lang = "es"),
  list(id = "2", lang = "en")
)
class(tweets) <- c("twscraper_tweets", "list")
tweets_es <- filter_by_lang(tweets, "es")


Obtener Seguidores de un Usuario

Description

Obtiene la lista de seguidores de un usuario

Usage

get_followers(username, n = 100, progress = TRUE)

Arguments

username

Nombre de usuario (sin @)

n

Numero maximo de seguidores (default: 100)

progress

Mostrar progreso (default: TRUE)

Value

Lista de usuarios

Examples


if (check_setup()) {
  followers <- get_followers("elonmusk", n = 100)
}


Obtener Usuarios Seguidos

Description

Obtiene la lista de usuarios que sigue un usuario

Usage

get_following(username, n = 100, progress = TRUE)

Arguments

username

Nombre de usuario (sin @)

n

Numero maximo de usuarios (default: 100)

progress

Mostrar progreso (default: TRUE)

Value

Lista de usuarios

Examples


if (check_setup()) {
  following <- get_following("elonmusk", n = 100)
}


Obtener Usuarios que Retuitearon

Description

Obtiene la lista de usuarios que retuitearon un tweet especifico

Usage

get_retweeters(tweet_id, n = 100, progress = TRUE)

Arguments

tweet_id

ID del tweet

n

Numero maximo de usuarios (default: 100)

progress

Mostrar progreso (default: TRUE)

Value

Lista de usuarios

Examples


if (check_setup()) {
  retweeters <- get_retweeters(1234567890, n = 100)
}


Obtener Retweeters para Varios Tweets

Description

Obtiene usuarios que retuitearon varios tweets en una sola llamada de R.

Usage

get_retweeters_batch(tweets, n = 100, progress = TRUE, flatten = TRUE)

Arguments

tweets

Vector de IDs, lista de tweets 'twscraper_tweets', tweet individual o data.frame con columna 'id'/'tweet_id'.

n

Numero maximo de usuarios por tweet (default: 100)

progress

Mostrar progreso (default: TRUE)

flatten

Si es TRUE, devuelve una lista plana de usuarios con columna 'source_tweet_id' para usar con 'to_dataframe()'. Si es FALSE, devuelve una lista agrupada por tweet.

Value

Lista de usuarios con 'source_tweet_id' o lista agrupada por tweet

Examples


if (check_setup()) {
  tweets <- search_tweets("rstats", n = 10)
  retweeters <- get_retweeters_batch(tweets, n = 50)
  retweeters_df <- to_dataframe(retweeters)

  retweeters_by_tweet <- get_retweeters_batch(tweets, n = 50, flatten = FALSE)
}


Obtener Informacion de Usuario

Description

Obtiene informacion detallada de un usuario

Usage

get_user(username, progress = TRUE)

Arguments

username

Nombre de usuario (sin @)

progress

Mostrar progreso (default: TRUE)

Value

Lista con informacion del usuario

Examples


if (check_setup()) {
  user <- get_user("hadleywickham")
}


Listar Cuentas

Description

Lista todas las cuentas configuradas

Usage

list_accounts(db_file = "accounts.db", verbose = TRUE)

Arguments

db_file

Archivo de base de datos (default: "accounts.db")

verbose

Si 'TRUE', emite mensajes informativos con 'message()'/'warning()'; puede silenciarse con 'suppressMessages()'/'suppressWarnings()'.

Value

Invisibly returns a list of configured accounts. Each account contains 'username', 'email', 'active', and 'locks'; an empty list indicates no accounts or an error.

Examples


if (check_setup()) {
  accounts <- list_accounts()
  print(accounts)
}


Metodo Print para Tweet Individual

Description

Imprime informacion de un tweet individual

Usage

## S3 method for class 'twscraper_tweet'
print(x, ...)

Arguments

x

Informacion de un tweet

...

Argumentos adicionales

Value

Invisibly returns 'x', a 'twscraper_tweet' list with tweet metadata, author fields, engagement counts, language, and URL.


Metodo Print para Tweets

Description

Imprime resumen de tweets

Usage

## S3 method for class 'twscraper_tweets'
print(x, ...)

Arguments

x

Lista de tweets

...

Argumentos adicionales

Value

Invisibly returns 'x', a 'twscraper_tweets' list. Each element represents one tweet with fields such as 'id', 'date', 'text', 'username', engagement counts, language, and URL.


Metodo Print para Usuario

Description

Imprime informacion de usuario

Usage

## S3 method for class 'twscraper_user'
print(x, ...)

Arguments

x

Informacion de usuario

...

Argumentos adicionales

Value

Invisibly returns 'x', a 'twscraper_user' list with fields such as 'id', 'username', 'displayname', 'description', follower/following counts, verification status, location, URL, and profile image URL.


Metodo Print para Lista de Usuarios

Description

Imprime resumen de usuarios

Usage

## S3 method for class 'twscraper_users'
print(x, ...)

Arguments

x

Lista de usuarios

...

Argumentos adicionales

Value

Invisibly returns 'x', a 'twscraper_users' list. Each element represents one user with profile metadata and account statistics.


Guardar Tweets como CSV

Description

Guarda tweets en formato CSV

Usage

save_csv(tweets, file)

Arguments

tweets

Lista de tweets

file

Nombre del archivo

Value

Invisibly returns the output file path. The CSV contains one row per tweet/user-like item after conversion with 'to_dataframe()'.

Examples


tweets <- list(list(id = "1", text = "Hello R", username = "rstats"))
save_csv(tweets, tempfile(fileext = ".csv"))


Guardar Tweets como JSON

Description

Guarda tweets en formato JSON

Usage

save_json(tweets, file)

Arguments

tweets

Lista de tweets

file

Nombre del archivo

Value

Invisibly returns the output file path. The JSON file contains the list structure supplied in 'tweets', written with 'jsonlite::write_json()'.

Examples


tweets <- list(list(id = "1", text = "Hello R", username = "rstats"))
save_json(tweets, tempfile(fileext = ".json"))


Buscar por Hashtag

Description

Busca tweets que contengan un hashtag especifico

Usage

search_hashtag(hashtag, n = 100, progress = TRUE)

Arguments

hashtag

Hashtag (con o sin #)

n

Numero maximo de tweets (default: 100)

progress

Mostrar progreso (default: TRUE)

Value

Lista de tweets

Examples


if (check_setup()) {
  tweets <- search_hashtag("rstats", n = 50)
  tweets <- search_hashtag("#datascience", n = 100)
}


Buscar Menciones de un Usuario

Description

Busca tweets que mencionen a un usuario especifico

Usage

search_mentions(username, n = 100, progress = TRUE)

Arguments

username

Nombre de usuario (sin @)

n

Numero maximo de tweets (default: 100)

progress

Mostrar progreso (default: TRUE)

Value

Lista de tweets

Examples


if (check_setup()) {
  mentions <- search_mentions("hadleywickham", n = 50)
}


Buscar Tweets

Description

Busca tweets usando una consulta

Usage

search_tweets(query, n = 100, progress = TRUE, product = c("Latest", "Top"))

Arguments

query

Consulta de busqueda (ej: "rstats", "#datascience", "from:usuario")

n

Numero maximo de tweets a retornar (default: 100)

progress

Mostrar barra de progreso (default: TRUE)

product

Tipo de busqueda: "Latest" para tweets recientes o "Top" para tweets destacados (default: "Latest")

Value

Lista de tweets

Examples


if (check_setup()) {
  tweets <- search_tweets("rstats", n = 50)
  top_tweets <- search_tweets("rstats", n = 50, product = "Top")
  df <- to_dataframe(tweets)
}


Setup twscrapeR

Description

Checks that Python and the Python 'twscrape' package are available and configures the active reticulate session. It does not install Python or Python packages automatically.

Usage

setup_twscraper(python_path = NULL, install_python = TRUE, ask = TRUE)

Arguments

python_path

Ruta a Python (opcional, se detecta automaticamente)

install_python

Deprecated compatibility argument. Ignored; installation must be performed by the user outside package functions.

ask

Deprecated compatibility argument. Ignored; retained to avoid breaking existing calls.

Value

Invisibly returns 'TRUE' when Python >= 3.10 and the Python 'twscrape' module are available and configured. Invisibly returns 'FALSE' otherwise, after printing installation instructions.

Examples


if (interactive()) {
  setup_twscraper()
}


Ordenar Tweets

Description

Ordena tweets por algun criterio

Usage

sort_tweets(tweets, by = "date", decreasing = TRUE)

Arguments

tweets

Lista de tweets

by

Campo por el cual ordenar ("date", "like_count", "retweet_count", "views_count")

decreasing

Orden descendente (default: TRUE)

Value

Lista ordenada de tweets

Examples


tweets <- list(
  list(id = "1", date = as.POSIXct("2026-01-01"), like_count = 2),
  list(id = "2", date = as.POSIXct("2026-02-01"), like_count = 10)
)
class(tweets) <- c("twscraper_tweets", "list")
top_tweets <- sort_tweets(tweets, by = "like_count")


Convertir Tweets o Usuarios a Data Frame

Description

Convierte una lista de tweets o usuarios a data.frame usando purrr::map_dfr

Usage

to_dataframe(x)

Arguments

x

Lista de tweets o usuarios

Value

data.frame o tibble

Examples


tweets <- list(
  list(
    id = "1", date = as.POSIXct("2026-01-01"), text = "Hello R",
    username = "rstats", user_displayname = "R Stats", user_id = "10",
    reply_count = 0, retweet_count = 1, like_count = 2, quote_count = 0,
    views_count = 100, lang = "en", url = "https://example.com/1",
    user_followers = 1000, user_verified = FALSE
  )
)
class(tweets) <- c("twscraper_tweets", "list")
df <- to_dataframe(tweets)

users <- list(list(
  id = "10", username = "rstats", displayname = "R Stats",
  description = "Example user", followers_count = 1000,
  following_count = 50, tweets_count = 200, verified = FALSE,
  created = "2026-01-01", location = "", url = "",
  profile_image_url = ""
))
class(users) <- c("twscraper_users", "list")
users_df <- to_dataframe(users)

users[[1]]$source_tweet_id <- "1"
retweeters_df <- to_dataframe(users)  # incluye source_tweet_id


Obtener Detalles de un Tweet

Description

Obtiene informacion detallada de un tweet especifico por su ID

Usage

tweet_details(tweet_id, progress = TRUE)

Arguments

tweet_id

ID del tweet (numero o string)

progress

Mostrar progreso (default: TRUE)

Value

Lista con informacion del tweet o NULL si no se encuentra

Examples


if (check_setup()) {
  tweet <- tweet_details(1234567890)
}


Obtener Respuestas a un Tweet

Description

Obtiene las respuestas (replies) a un tweet especifico

Usage

tweet_replies(tweet_id, n = 100, progress = TRUE)

Arguments

tweet_id

ID del tweet

n

Numero maximo de respuestas (default: 100)

progress

Mostrar progreso (default: TRUE)

Value

Lista de tweets (respuestas)

Examples


if (check_setup()) {
  replies <- tweet_replies(1234567890, n = 50)
}


Obtener Tweets con Media de un Usuario

Description

Obtiene solo los tweets que contienen imagenes o videos

Usage

user_media(username, n = 100, progress = TRUE)

Arguments

username

Nombre de usuario (sin @)

n

Numero maximo de tweets (default: 100)

progress

Mostrar progreso (default: TRUE)

Value

Lista de tweets

Examples


if (check_setup()) {
  media_tweets <- user_media("elonmusk", n = 100)
}


Obtener Tweets de un Usuario

Description

Obtiene los tweets recientes de un usuario especifico

Usage

user_tweets(username, n = 100, progress = TRUE)

Arguments

username

Nombre de usuario (sin @)

n

Numero maximo de tweets (default: 100)

progress

Mostrar progreso (default: TRUE)

Value

Lista de tweets

Examples


if (check_setup()) {
  tweets <- user_tweets("hadleywickham", n = 50)
}


Obtener Tweets y Respuestas de un Usuario

Description

Obtiene tweets y respuestas de un usuario (timeline completo)

Usage

user_tweets_and_replies(username, n = 100, progress = TRUE)

Arguments

username

Nombre de usuario (sin @)

n

Numero maximo de tweets (default: 100)

progress

Mostrar progreso (default: TRUE)

Value

Lista de tweets

Examples


if (check_setup()) {
  all_tweets <- user_tweets_and_replies("elonmusk", n = 100)
}


Convertir Usuarios a Dataframe (alias de to_dataframe)

Description

Alias interno de to_dataframe() - usar to_dataframe() directamente

Usage

users_to_dataframe(users)

Arguments

users

Lista de usuarios

Value

data.frame con informacion de usuarios


Obtener Seguidores Verificados

Description

Obtiene solo los seguidores que tienen cuenta verificada

Usage

verified_followers(username, n = 100, progress = TRUE)

Arguments

username

Nombre de usuario (sin @)

n

Numero maximo de seguidores (default: 100)

progress

Mostrar progreso (default: TRUE)

Value

Lista de usuarios verificados

Examples


if (check_setup()) {
  verified <- verified_followers("elonmusk", n = 100)
}