Um diretório mundial de igrejas e dos horários de suas Missas, confissões e adoração. As leituras são abertas a todos; uma correção é uma sugestão que uma pessoa revisa.
openapi.json, para Postman, Bruno ou um gerador de clientes (em inglês)
Autenticação
Nenhuma. Toda rota aceita qualquer origem, então uma página web pode chamá-la diretamente.
Cache
As leituras são public, max-age=300; os blocos do mapa, uma hora, e mais um dia servidos enquanto se revalidam.
Erros
Uma igreja inexistente é 404 { "error": "not_found" }. Um parâmetro inválido é 400 com os problemas de validação. Escritas demais são 429 { "error": "rate_limited" }.
As descrições curtas de parâmetros e campos vêm dos schemas no código e estão em inglês.
Lendo os horários
Os services de uma igreja são seus horários recorrentes, cada um com um padrão e uma hora: “domingos às 9h” é um horário e “domingos às 11h30” é outro. rrule é uma regra do iCalendar que escolhe os dias, e startTime dá a hora local no timezone da própria igreja. exdate lista os dias cancelados e rdate os acrescentados. A API manda as regras sem expandir, então é você quem calcula a próxima Missa.
O expand.ts faz isso em sessenta linhas com o pacote rrule e, como todo o código do Ember, está em domínio público para copiar:
JavaScript
import { expandService } from './expand' // packages/api/src/expand.ts
const church = await (await fetch('https://ember-mass-times.dpgu.workers.dev/churches/ns-do-carmo-se-sao-paulo-sp')).json()
for (const service of church.services.filter((s) => s.kind === 'mass')) {
for (const { date, startTime } of expandService(service, { count: 3 })) {
console.log(date.toISOString().slice(0, 10), startTime, service.language)
}
}
Um bundler o aceita como está. No Node puro, o rrule não tem exports nomeados: escreva import rrule from 'rrule' e const { RRule, RRuleSet } = rrule.
Quando não há horário estruturado registrado (hasStructuredSchedule é falso), o texto da própria paróquia está em texts, como foi publicado.
Igrejas
Leituras públicas
GET/churches/near
Igrejas perto de um ponto
Igrejas a até radiusKm de um ponto, da mais próxima à mais distante. Um filtro de kind ou rite restringe os horários de cada igreja e tira as que ficam sem nenhum.
Parâmetros
latqueryobrigatório
number
lngqueryobrigatório
number
radiusKmquery
number
kindquery
string
Keep only services of this kind: mass, confession, adoration
ritequery
string
Keep only services of this rite, e.g. latin_tridentine
institutequery
string
Only churches served by this institute, e.g. FSSP
statusquery
string
active | temporarily_closed | closed
limitquery
integer
Respostas
200OK{ churches: (Church & { distanceKm: number })[] }
400Um parâmetro ou o corpo não passou na validaçãoValidationError
GET/churches
Buscar pelo nome, ou ler a área de um mapa
Passe q para buscar pelo nome, ou bbox para as igrejas na área visível de um mapa. Uma área grande demais para listar responde com clusters, contados por célula de geohash.
Parâmetros
qquery
string
Name search
nearquery
string
With q: "lat,lng" to rank matches nearest it first
bboxquery
string
A map viewport, "minLng,minLat,maxLng,maxLat": churches, or clusters when wide
kindquery
string
ritequery
string
institutequery
string
statusquery
string
limitquery
integer
offsetquery
integer
Respostas
200{ churches } para uma busca, { churches, clusters } para uma área do mapa{ churches: Church[], clusters?: Cluster[] }
400Um parâmetro ou o corpo não passou na validaçãoValidationError
GET/churches/index
O diretório inteiro, uma página por vez
Todas as igrejas na ordem do id, com os poucos campos de que um sitemap precisa, ou com full=1 cada igreja inteira, como /churches/{id} a dá. Passe o next de uma página como o after da seguinte; uma página sem next é a última.
Parâmetros
afterquery
string
The last id of the previous page
scheduledquery
"1"
Only churches with service times on record
countryquery
string
Only churches in these countries: ISO codes, comma-separated (BR,PT)
limitquery
integer
fullquery
"1"
Each church whole, as /churches/{id} gives it: schedule, texts, links, parish and chapels
400Um parâmetro ou o corpo não passou na validaçãoValidationError
GET/churches/tiles/{cell}
Um bloco do mapa
Uma célula de cinco caracteres responde com suas igrejas (sem textos e links); uma mais curta, ou root, com a contagem das células dentro dela. Fica uma hora em cache.
Parâmetros
cellpathobrigatório
string
A geohash of 1–5 characters, or root
kindquery
string
Count only churches with services of this kind
Respostas
200{ churches } para uma célula completa, { cells } acima dela{ churches: Church[] } | { cells: Cluster[] }
400Um parâmetro ou o corpo não passou na validaçãoValidationError
GET/churches/{id}
Uma igreja
Uma igreja com seus horários, textos e links, a paróquia a que pertence e as capelas que atende.
400Um parâmetro ou o corpo não passou na validaçãoValidationError
Mudanças
O que os moderadores mudaram, para diretórios que acompanham
GET/changes
O registro de mudanças
Cada mudança que um moderador aplicou ao diretório e que continua valendo, da mais recente à mais antiga. Cada igreja atingida vem com o que mudou e seus horários como estão agora, e message diz o mesmo em texto simples, pronta para repassar. Passe o next de uma página como o before da seguinte; para acompanhar, peça com since igual ao appliedAt mais recente que você tem.
Põe na fila de um moderador uma mudança num horário ou na igreja, um novo horário, um fechamento ou uma observação. kind define a forma do restante.
Parâmetros
idpathobrigatório
string
O id da igreja, feito do nome e da cidade
X-Client-Idheader
string
Um id fixo por aparelho ou pessoa; junto com o IP, identifica o cliente para o limite de escritas e para as confirmações
Corpo da requisição
kind: "edit_service"
kindobrigatório
"edit_service"
serviceIdobrigatório
string
changesobrigatório
object
↳ kind
string
↳ rite
string
↳ language
string
↳ rrule
string
↳ startTime
string
↳ endTime
string
↳ exdate
string
↳ rdate
string
↳ locationNote
string
↳ note
string
comment
stringat least 1 charactersat most 2000 characters
attachmentKeys
string[]at most 10 items
kind: "edit_church"
kindobrigatório
"edit_church"
changesobrigatório
object
↳ name
string
↳ longName
string
↳ address
string
↳ city
string
↳ region
string
↳ postalCode
string
↳ country
string
↳ phoneE164
string
↳ email
string
↳ status
string
↳ administration
string
↳ institute
string
↳ canonicalStatus
string
↳ note
string
comment
stringat least 1 charactersat most 2000 characters
attachmentKeys
string[]at most 10 items
kind: "add_service"
kindobrigatório
"add_service"
changesobrigatório
object
↳ kindobrigatório
string
↳ rite
string
↳ language
string
↳ rruleobrigatório
string
↳ startTimeobrigatório
string
↳ endTime
string
↳ exdate
string
↳ rdate
string
↳ locationNote
string
↳ note
string
comment
stringat least 1 charactersat most 2000 characters
attachmentKeys
string[]at most 10 items
kind: "flag_closed"
kindobrigatório
"flag_closed"
serviceId
string
comment
stringat least 1 charactersat most 2000 characters
attachmentKeys
string[]at most 10 items
kind: "note"
kindobrigatório
"note"
serviceId
string
commentobrigatório
stringat least 1 charactersat most 2000 characters
attachmentKeys
string[]at most 10 items
Respostas
201Na fila{ id: string }
400Um parâmetro ou o corpo não passou na validaçãoValidationError
429Escritas demais deste cliente: rate_limitedError
Terminal
curl -X POST 'https://ember-mass-times.dpgu.workers.dev/churches/ns-do-carmo-se-sao-paulo-sp/corrections' \
-H 'Content-Type: application/json' -H 'X-Client-Id: device-7f3a2c' \
-d '{"kind": "note", "comment": "A partir de outubro, a Missa de domingo é às 9h30."}'
POST/churches/{id}/corrections/attachments
Anexar uma foto a uma correção
Os bytes de um arquivo de até 1 MB, como a foto do boletim. Envie a key devolvida nos attachmentKeys da correção.
Parâmetros
idpathobrigatório
string
O id da igreja, feito do nome e da cidade
X-Client-Idheader
string
Um id fixo por aparelho ou pessoa; junto com o IP, identifica o cliente para o limite de escritas e para as confirmações