{"id":27066947,"url":"https://github.com/mrk214/bible-data-es-spa","last_synced_at":"2025-04-05T19:36:27.526Z","repository":{"id":275509211,"uuid":"925964880","full_name":"mrk214/bible-data-es-spa","owner":"mrk214","description":"La Biblia en formato JSON","archived":false,"fork":false,"pushed_at":"2025-02-28T02:59:26.000Z","size":102078,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-28T07:27:05.648Z","etag":null,"topics":["api","bible","biblia","data","god","jesus","json","spanish"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mrk214.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-02T07:32:28.000Z","updated_at":"2025-02-28T02:59:29.000Z","dependencies_parsed_at":"2025-02-03T01:33:13.507Z","dependency_job_id":"a2bb5368-2361-439f-b08c-b9877ba2caa7","html_url":"https://github.com/mrk214/bible-data-es-spa","commit_stats":null,"previous_names":["jsckdm/bible-data-es-spa","mrk214/bible-data-es-spa"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrk214%2Fbible-data-es-spa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrk214%2Fbible-data-es-spa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrk214%2Fbible-data-es-spa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrk214%2Fbible-data-es-spa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrk214","download_url":"https://codeload.github.com/mrk214/bible-data-es-spa/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247393543,"owners_count":20931808,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","bible","biblia","data","god","jesus","json","spanish"],"created_at":"2025-04-05T19:36:26.934Z","updated_at":"2025-04-05T19:36:27.517Z","avatar_url":"https://github.com/mrk214.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# La Biblia en formato JSON\n\n📖 Este proyecto es un conjunto de datos de la **Biblia** en formato `JSON`\n(encoding `utf8`), obtenidos mediante web scraping. Los datos están\nestructurados de manera estándar y consistente, con la intención de que sea\nsencillo implementar cualquiera de las versiones (_traducciones_) disponibles\naquí.\n\n👨‍💻 En la carpeta **data** se encuentran las diferentes versiones, divididas en\narchivos `JSON` por cada libro de la Biblia.\n\n🙏 Espero poder seguir agregando traducciones mientras sea posible, espero que\nsea útil para alguien que lo necesite; y, sobre todo, espero que sirva para la\nobra de Dios.\n\n## Estructura de los datos\n\nCada archivo `JSON` corresponde a un libro de la Biblia, y fue tipado como\n`Book` (con **TypeScript**).\nEs por ello que adjunto los tipos en **TypeScript** con los que fueron\nestructurados los datos, para que se entienda su funcionamiento.\n\nLos tipos importantes aquí son `Book`, `Chapter`, `ChapterItem` y\n`ChapterItemType`.\n\n```typescript\nexport type Book = {\n  book_usfm: string\n  name: string\n  local_title: string\n  local_abbreviation: string\n  version_id: number\n  publisher: Publisher\n  copyright: Copyright\n  language: Language\n  repository: string\n  chapters: Chapter[]\n}\n\nexport type Chapter = {\n  chapter_usfm: string\n  is_chapter: boolean\n  current: Current\n  next: NextPrev | null\n  previous: NextPrev | null\n  chapter_text: string\n  chapter_html: string\n  items: ChapterItem[]\n}\n\nexport type ChapterItem = {\n  type: ChapterItemType\n  verse_numbers: number[]\n  lines: string[]\n  rlw_lines: RedLetterWordsSection[][]\n}\n\n// Dependiendo de la versión, algunos ChapterItemType pueden aparecer más o menos.\n// Los ChapterItemType esenciales son: 'heading1' y 'verse'.\n// Puse comentarios que pueden usarse como referencia para los estilos. 👇👇👇\n// (Solo es una referencia; puedes poner los estilos que quieras.)\nexport type ChapterItemType =\n  | 'section1' // raro      - weight: 900 - h1\n  | 'section2' // raro      - weight: 800 - h2\n  | 'heading1' // muy común - weight: 700 - h3\n  | 'heading2' // común     - weight: 600 - h4\n  | 'label' //    común     - weight: 500 - italic\n  | 'verse' //    muy común - weight: 400 - regular text\n```\n\nDemás tipos.\n\n```typescript\nexport type Publisher = {\n  name: string\n}\n\nexport type Copyright = {\n  html: string\n  text: string\n}\n\nexport type Language = {\n  iso_639_1: string\n  iso_639_3: string\n  language_tag: string\n  local_name: string\n  text_direction: string\n}\n\nexport type Current = {\n  usfm: string[]\n  human: string\n}\n\nexport type NextPrev = Current \u0026 {\n  canonical: boolean\n  toc: boolean\n}\n\nexport type RedLetterWordsSection = {\n  text: string\n  rl: boolean\n}\n```\n\n## Explicación\n\nLos datos son en su mayoría autoexplicativos, pero dejo algunas aclaraciones ya\nque, según la versión, pueden variar algunos datos (_pero no la estructura, la\nestructura es la misma para todas las versiones_):\n\n👉 Cada **libro** (`Book`) contiene **capítulos** (`Chapter[]`), y cada capítulo\ncontiene **items** (`ChapterItem[]`).\n\n👉 En algunas versiones, algunos libros tienen una introducción.\nPara verificar que un **capítulo** (`Chapter`) es realmente un capítulo y no una\nintroducción, puedes usar la propiedad `is_chapter`.\n\n👉 Si un `Chapter` es una introducción, entonces su propiedad `items` será un\narray vacío. Si deseas usar el contenido, estará disponible en las propiedades\n`chapter_text` y `chapter_html`.\n\n👉 Un `ChapterItem` casi siempre será de tipo **verse** (`verse`) o **heading1**\n(`heading1`). Sin embargo, hay varios otros tipos: `section1`, `section2`,\n`heading1`, `heading2`, `label`, `verse`.\n\n👉 Si un `ChapterItem` **no es de tipo verse** (`verse`), entonces su propiedad\n`verse_numbers` siempre será un array vacío `[]`.\n\n👉 La razón por la que `verse_numbers` es un array es porque algunas versiones\nagrupan varios versículos en un solo párrafo de texto, sin que se pueda saber\ndónde comienza o termina cada versículo: `\"verse_numbers\":[5,6,7]`.\n\n👉 Pero lo más común siempre será que `verse_numbers` contenga un solo item:\n`\"verse_numbers\":[7]`.\n\n👉 Los versículos (`ChapterItem` _de tipo_ `verse`) se dividen en líneas, por lo\nque `lines` es un array (`string[]`).\nA veces tiene un solo elemento, y otras veces varios, dependiendo de cómo esté\nestructurado el versículo (_esto no lo decidí yo, sino que así viene desde la\nfuente de datos, y puede cambiar de un capítulo a otro_).\n\n👉 Por otro lado, en los `ChapterItem` de tipo **diferente a** `verse`, como\n`heading1`, su propiedad `lines` siempre será un array de un solo elemento:\n`\"lines\":[\"Hello world\"]`.\n\n👉 Algunas veces se puede encontrar un título (_u otro elemento_) en medio de un\nversículo. En estos casos, el versículo continúa después del elemento. Por lo\ntanto, un mismo `verse_numbers` puede repetirse en más de un `ChapterItem`.\n\n- Esto se debe tener en cuenta a la hora de buscar un versículo, por ejemplo,\n  ya que **aunque no es común**, se pueden encontrar varios `ChapterItem` con el\n  mismo array en `verse_numbers`.\n\n- También porque, generalmente, solo se quiere mostrar el número del versículo\n  la primera vez, al principio del versículo.\n\n👉 Cada capítulo (`Chapter`) también contiene el texto completo del capítulo en\nformato plano en `chapter_text`, con caracteres de salto de línea (`\\n`), y el\nHTML original en `chapter_html`.\n\n👉 **rlw** significa **red letter words**, es decir, las palabras atribuidas a\nJesús. Por esto, `ChapterItem` tiene una propiedad llamada `rlw_lines`.\n\n👉 Para ahorrar espacio, `rlw_lines` casi siempre será un array vacío, ya que la\nmayoría de los versículos de la Biblia no contienen **red letter words** (_y\ntampoco en todas las versiones vienen marcadas_).\n\n👉 El array `rlw_lines` solo tendrá items cuando el versículo contenga\n**red letter words**. Puedes usar este dato como una validación.\n\n👉 También debes saber que, si el versículo contiene **red letter words**,\nentonces por cada elemento en el array `lines` existe un elemento en el\narray `rlw_lines`.\n\n- **if** `rlw_lines.length \u003e 0` **then** `rlw_lines.length === lines.length`\n\n👉 Sin embargo, cada elemento de `rlw_lines` también es un array, porque a veces\nsolo una parte de una línea se atribuye a Jesús.\n\n## Ejemplo de código\n\n🤯 Para entender todo lo anterior, lo mejor es ir al código y revisar los datos\ny su estructura.\n\n🧠 Por eso, para ilustrar mejor los **diferentes casos que se pueden encontrar**\nen los datos, hice un ejemplo de código en el cual genero un archivo `README.md`\na partir de leer algunos capítulos especiales que tienen **diferentes niveles\nde complejidad**.\n\n🤔 Estoy seguro de que te puede servir para guiarte y darte ideas.\n\n🚀 Revisa el código en el\n[repositorio del ejemplo aquí](https://github.com/mrk214/reading-json-files).\n\n## Datos calculados\n\nCreo que los datos son bastante completos; sin embargo, **para evitar algo de\nredundancia y mantener cierta flexibilidad** y libertad, hay datos que no\nse encuentran de manera explícita, porque **se pueden calcular** de\ndiferentes maneras.\n\nAsí que, si no encuentras un dato en particular de manera explícita, es muy\nprobable que se pueda calcular con código (_solo hay que programarlo_ 👨‍💻).\n\n## Archivos alojados en GitHub\n\nPuedes clonar el repositorio y trabajar con los archivos de manera convencional\no, si prefieres, acceder directamente a los `archivos JSON servidos en GitHub`.\n\nEn cada carpeta de versión hay un archivo `README.md` que incluye:\n\n- La **cantidad de libros** que contiene esa versión.\n- Y los **links directos a los archivos JSON alojados en GitHub**.\n\n| usfm      | name                                           | link                                                                                                  |\n| --------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------- |\n| `DHH94I`  | Biblia Dios Habla Hoy                          | [readme](https://github.com/mrk214/bible-data-es-spa/blob/main/data/es___spa___spa/DHH94I/README.md)  |\n| `DHHS94`  | Dios habla Hoy Estándar                        | [readme](https://github.com/mrk214/bible-data-es-spa/blob/main/data/es___spa___spa/DHHS94/README.md)  |\n| `LBLA`    | La Biblia de las Américas                      | [readme](https://github.com/mrk214/bible-data-es-spa/blob/main/data/es___spa___spa/LBLA/README.md)    |\n| `NBLA`    | Nueva Biblia de las Américas                   | [readme](https://github.com/mrk214/bible-data-es-spa/blob/main/data/es___spa___spa/NBLA/README.md)    |\n| `NTV`     | Nueva Traducción Viviente                      | [readme](https://github.com/mrk214/bible-data-es-spa/blob/main/data/es___spa___spa/NTV/README.md)     |\n| `NVI`     | Nueva Versión Internacional                    | [readme](https://github.com/mrk214/bible-data-es-spa/blob/main/data/es___spa___spa/NVI/README.md)     |\n| `NVI`     | Nueva Versión Internacional - Castellano       | [readme](https://github.com/mrk214/bible-data-es-spa/blob/main/data/es___spa___spa_es/NVI/README.md)  |\n| `RVA2015` | Reina Valera Actualizada                       | [readme](https://github.com/mrk214/bible-data-es-spa/blob/main/data/es___spa___spa/RVA2015/README.md) |\n| `RVC`     | Reina Valera Contemporánea                     | [readme](https://github.com/mrk214/bible-data-es-spa/blob/main/data/es___spa___spa/RVC/README.md)     |\n| `RVR1960` | Biblia Reina Valera 1960                       | [readme](https://github.com/mrk214/bible-data-es-spa/blob/main/data/es___spa___spa/RVR1960/README.md) |\n| `TLA`     | Traducción en Lenguaje Actual                  | [readme](https://github.com/mrk214/bible-data-es-spa/blob/main/data/es___spa___spa/TLA/README.md)     |\n| `TLAI`    | Traducción en Lenguaje Actual Interconfesional | [readme](https://github.com/mrk214/bible-data-es-spa/blob/main/data/es___spa___spa/TLAI/README.md)    |\n\n## Capítulos especiales\n\nEn algunas versiones, hay casos especiales de algunos capítulos\n(`Chapter`) que tienen un `chapter_usfm` en un formato diferente a los demás.\n\nPor ejemplo, `PSA.42_1`, cuando el formato común es `PSA.42`.\n\nPara entender un poco mejor su estructura y cómo manejarlos (_por ejemplo,\nen una búsqueda_), recomiendo revisar los siguientes campos en cada uno\nde esos capítulos:\n`chapter_usfm`, `next?.usfm?.[0]`, `chapter_text`, `chapter_html`, `items`.\n\n🔎 **DHH94I**\n\n- `PSA.42`\n- `PSA.42_1`\n- `PSA.43_1`\n- `SIR.1`\n- `SIR.1_1`\n\n🔎 **DHHS94**\n\n- `PSA.42`\n- `PSA.42_1`\n- `PSA.43_1`\n- `SIR.1`\n- `SIR.1_1`\n\n🔎 **TLAI**\n\n- `BEL.1_1`\n- `LJE.1_1`\n- `S3Y.1_1`\n- `SUS.1_1`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrk214%2Fbible-data-es-spa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrk214%2Fbible-data-es-spa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrk214%2Fbible-data-es-spa/lists"}