public_domain busca y explora contenido de libre acceso en español,
agregando varias fuentes bajo una interfaz común. La meta es hacer ese acervo
accesible y remixeable: una API Ruby para consultarlo, filtro por licencia
y una interfaz web ligera con Hotwire para navegarlo.
Fuentes disponibles
| Fuente | Contenido | Licencia |
|---|---|---|
| Archive.org | Textos, audio, video, imágenes, software | Variada (con filtro "solo remixeable") |
| Wikisource (es) | Textos / transcripciones | CC BY-SA + dominio público |
| Europeana | Bibliotecas virtuales, códices y manuscritos (BNE, Biblioteca Virtual Miguel de Cervantes, bibliotecas universitarias…) | Normalizada (faceta de derechos) — requiere API key |
| Repositorio OAI-PMH (configurable) | Repositorios universitarios y ephemera (UNAM, universidades de Hispanoamérica…). Modo explorar serendípico, no búsqueda dirigida | Según el repositorio (se detecta la licencia por registro) |
| Project Gutenberg (vía Gutendex) | Libros de dominio público, con filtro por idioma (es) |
Dominio público (todo el catálogo) — sin API key |
| Wikimedia Commons | Media (imágenes, audio, video) libremente licenciada y de dominio público | Normalizada (dominio público / CC) — sin API key |
| The Met — Open Access | Obras de arte de dominio público (pinturas, grabados, objetos) | CC0 / dominio público — sin API key |
Project Gutenberg usa la API libre Gutendex: sin clave, todo el catálogo es dominio público y remixeable. La búsqueda filtra por idioma español por defecto; cada resultado enlaza a su versión legible (HTML/EPUB).
Wikimedia Commons consulta la API de MediaWiki (namespace de archivos) y normaliza la licencia desde los metadatos de cada archivo; cada tarjeta muestra la miniatura y enlaza a la página del archivo.
The Met usa su API Open Access: la búsqueda devuelve IDs y se obtiene cada objeto; solo los marcados
isPublicDomain(CC0) se consideran remixeables. Con el filtro "solo remixeable" se descarta el resto.Europeana necesita una API key gratuita. Consíguela en https://pro.europeana.eu/get-api y expórtala como
EUROPEANA_API_KEY.OAI-PMH trae presets de repositorios hispanos seleccionables en la UI (
repo:) — o apunta a cualquiera conOAI_ENDPOINT(y, opcionalmente,OAI_LABEL/OAI_SET). OAI-PMH es un protocolo de cosecha, no de búsqueda: la consulta de texto se ignora y se navega con elresumptionToken— ideal para toparse con lo raro, efímero y casual. Los presets incluidos son puntos de partida; verifícalos para tu uso.Cada resultado incluye la institución de origen (
#provider).
Agrega esta línea al Gemfile de tu aplicación:
gem "public_domain"Y luego ejecuta:
$ bundle install
O instálalo directamente:
$ gem install public_domain
require "public_domain"
# Por defecto: Archive.org, español, todos los mediatypes,
# ordenado por descargas.
page = PublicDomain.search("quijote")
# Otras fuentes:
PublicDomain.search("quijote", source: :wikisource)
PublicDomain.search("códice", source: :europeana) # requiere EUROPEANA_API_KEY
# Solo material remixeable (dominio público / Creative Commons):
PublicDomain.search("quijote", remixable: true)
page.total # => 137 (total de coincidencias)
page.total_pages # => 3
page.next_page? # => true
page.results.first.tap do |r|
r.title # => "El ingenioso hidalgo Don Quijote de la Mancha"
r.creator # => "Miguel de Cervantes Saavedra"
r.language # => "spanish"
r.mediatype # => "texts"
r.details_url # => "https://archive.org/details/..."
r.thumbnail_url # => "https://archive.org/services/img/..."
endPublicDomain.search("borges",
source: :archive, # :archive (defecto) o :wikisource
language: "spanish", # nil o "" para buscar en todos los idiomas
mediatype: "texts", # "texts", "audio", "movies", "image", "software"; nil = todos
remixable: true, # solo dominio público / Creative Commons
sort: "downloads desc",
rows: 50, # máximo 100 por página
page: 1)ResultPage incluye Enumerable, así que puedes iterar directamente
(page.each, page.map(&:title), …). Cada resultado responde a #license
(un PublicDomain::License con name, remixable?, public_domain?) y a
#source_key / #source_label.
item = PublicDomain.item("elingeniosohidalgo")
item.title
item.files_of_format("pdf").each do |file|
file.name # => "quijote.pdf"
file.download_url # => "https://archive.org/download/.../quijote.pdf"
endSi la petición a Archive.org falla, se lanza PublicDomain::Error.
Una app Sinatra + Turbo/Stimulus para buscar y navegar visualmente. El formulario y la paginación actualizan un Turbo Frame sin recargar la página.
# desde el repositorio
bundle exec rackup # http://localhost:9292
# o
bundle exec ruby exe/public_domain --port 4567Incluye:
- Barra lateral de facetas: fuente, repositorio OAI (presets), idioma, tipo, orden y "solo remixeable".
- Modal de detalle (Turbo Frame) para los ítems de Archive.org, con archivos descargables.
- Visor IIIF (
/viewer, Mirador) para códices y manuscritos de Archive.org y Europeana — botón "🔍 Ver" en las tarjetas. - Modo serendipia ("🎲 Sorpréndeme"): salta a una porción aleatoria de ephemera (almanaques, panfletos, coplas, aucas…).
Requiere sinatra y un servidor Rack (puma); ambos vienen como
dependencias de desarrollo del gem.
El foco en español se aplica por defecto con el filtro language:(spanish)
de Archive.org. Puedes ampliarlo a todos los idiomas pasando language: nil.
Ya existe una interfaz común de fuentes (PublicDomain::Sources), filtro por
licencia, acceso a bibliotecas virtuales y códices vía Europeana
(BNE, Biblioteca Virtual Miguel de Cervantes), un cosechador OAI-PMH con
presets de repositorios hispanos (incluido Hispana, hispana.mcu.es),
libros de dominio público vía Project Gutenberg / Gutendex, media
libre de Wikimedia Commons, arte de dominio público de The Met,
un visor IIIF de manuscritos, y un modo serendipia para ephemera.
Pendientes:
- Verificar y ampliar los presets OAI (los incluidos son puntos de partida) y afinar los sets de Hispana por colección.
- Serendipia multi-fuente (hoy usa Archive.org) y lectura integrada dentro de la UI (Wikisource, Europeana, OAI, Gutenberg, Commons y The Met enlazan a su página).
- Búsqueda simultánea en varias fuentes a la vez.
- Más agregados de dominio público (p. ej. DPLA, Gallica/BnF vía IIIF).
Además del source moderno vía Gutendex, el scraper heredado de Project Gutenberg sigue disponible como
PublicDomain::Search.new("consulta").results.
Tras clonar el repo, ejecuta bin/setup para instalar dependencias.
bin/console abre una consola interactiva. Ejecuta las pruebas y el linter
con:
$ bundle exec rake # test + rubocop
Disponible como open source bajo los términos de la MIT License.
Se espera que todas las personas que interactúan con el proyecto respeten el código de conducta.