REST API para obtener información desde BuscaCursos UC, creada para el funcionamiento de https://www.horariomaker.com.
REST API del sistema BuscaCursos de la PUC Chile.
La versión 3 de la API se encuentra alojada en la url http://bc.horariomaker.com/api/v3
GET /api/v3/parametros
Endpoint para obtener los parametros permitidos y vigentes de la API.
Response:
{
"code": 200,
"data": {
"parametros": {
"semestre": [
{
"name": "2021 Segundo Semestre",
"value": "2021-2"
},
{
"name": "2021 Primer Semestre",
"value": "2021-1"
},
{
"name": "2020 TAV",
"value": "2020-3"
},
{
"name": "2020 Segundo Semestre",
"value": "2020-2"
},
{
"name": "2020 Primer Semestre",
"value": "2020-1"
}
],
"formato": [
{
"name": "-- Todos --",
"value": "TODOS"
},
{
"name": "HIB - HÃbrido",
"value": "HIB"
},
{
"name": "OL - Remoto",
"value": "OL"
},
{
"name": "PR - Presencial",
"value": "PR"
},
{
"name": "REPR - Remoto con Act.Presencial",
"value": "REPR"
}
],
"campus": [...],
"categoria": [...],
"formacion_general": [...],
"unidad_academica": [...],
}
}
}
Es una API read-only por lo que solo acepta el método HTTP GET con los siguientes parametros:
Las respuesta son en formato JSON, donde en caso de ser aceptado el request contendrá un key data
(dict
) con todos los cursos donde a su vez, cada curso será otro dict
con las secciones respectivas y su información correspondiente.
Ejemplo:
{
'code': 200,
'status': "OK",
'data': {
"IRB2001": {
"1": {
"Aprobacion especial":"NO",
"Campus":"San Joaqu\u00edn",
"Categoria":null,
"Creditos":"10",
"Ingles":"NO",
"Modulos":{
"AYU":[],
"CLAS":["M:4,5"],
"LAB":["V:5"],
"LIB":[],
"PRA":[],
"SUP":[],
"TAL":[],
"TER":[],
"TES":[]
},
"NRC":"12002",
"Nombre":"Fundamentos de Rob\u00f3tica",
"Profesor":"Torres Miguel, Troni Giancarlo, Calabi Daniel, Soto Alvaro",
"Retiro":"NO",
"Seccion":"1",
"Sigla":"IRB2001",
"Vacantes disponibles":"31",
"Vacantes totales":"31"
},
"Requisitos": {
"Equivalencias": ["IRB1001"],
"Prerequisitos": ["FIS1513","ICE1513","FIS1514","ICE1514"],
"Relacion entre prerequisitos y restricciones": [],
"Restricciones": []
}
}
}
}
Ejemplo de request HTTP GET /api/v3?sigla=irb2001&requisitos=true
El parametro requisitos
recibe únicamente valores booleanos (true o false) donde la respuesta corresponde a un diccionario en la keyword requisitos para cada curso que se encuentre en la consulta.
...
'Requisitos': {
"Equivalencias": ["MAT1523","MAT230E","MLM1130"],
"Prerequisitos": [["MAT1202","MAT1512"],["MAT1202","MAT1620"],["MAT1203","MAT1512"],["MAT1203","MAT1620"]],
"Relacion entre prerequisitos y restricciones": [],
"Restricciones": []
}
...
Ejemplo correspondiente a los requisitos del curos MAT1630
El detalle de esta respuesta se interpreta como:
Equivalencias | MAT1523 o MAT230E o MLM1130 |
Prerequisitos | (MAT1202 Y MAT1512) o (MAT1202 y MAT1620) o (MAT1203 y MAT1512) o (MAT1203 y MAT1620) |
Relacion entre prerequisitos y restricciones | No tiene |
Restricciones | No tiene |
Es decir, en caso de tener una lista vacía significa que el campo no contiene valores, en caso de compartir la lista principal son equivalentes y en caso de compartir una sublista estos (de la sublista) son todos requeridos y entre sublistas son equivalentes.
En caso de ERROR
la respuesta será en formato JSON de la siguiente forma:
{
"code":400,
"status": "Bad Request",
"error": {
"invalid_arguments": ["formato", "vacantes"],
"message": "(#400) Some arguments are not accepted."
}
}
Ejemplo de request HTTP GET api/v1?sigla=iic2233&vacantes=true&formato=foo
Algunos ejemplos de la utilización de esta API mediante python sería:
import requests
url_api = "http://buscacursos-api.herokuapp.com/api/v1"
params = {
"sigla": "iic2233",
"semestre": "2019-2",
"campus": "TODOS"
}
response = requests.get(url = url_api, params = params)
print(response.json())
Respuesta:
{
"code": 200,
"status":"Ok",
"data": {
"IIC2233": {
"1": {
"Aprobacion especial":"NO",
"Campus":"San Joaqu\u00edn",
"Categoria":null,
"Creditos":"10",
"Ingles":"NO",
"Modulos":{
"AYU":["M:4"],
"CLAS":["J:4,5"],
"LAB":[],
"LIB":[],
"PRA":[],
"SUP":[],
"TAL":[],
"TER":[],
"TES":[]
},
"NRC":"12431",
"Nombre":"Programaci\u00f3n Avanzada",
"Profesor":"Ruz Cristian",
"Retiro":"SI",
"Seccion":"1",
"Sigla":"IIC2233",
"Vacantes disponibles":"95",
"Vacantes totales":"95"
},
"2": {
"Aprobacion especial":"NO",
"Campus":"San Joaqu\u00edn",
"Categoria":null,
"Creditos":"10",
"Ingles":"NO",
"Modulos":{
"AYU":["M:4"],
"CLAS":["J:4,5"],
"LAB":[],
"LIB":[],
"PRA":[],
"SUP":[],
"TAL":[],
"TER":[],
"TES":[]
},
"NRC":"15428",
"Nombre":"Programaci\u00f3n Avanzada",
"Profesor":"Florenzano Fernando",
"Retiro":"SI",
"Seccion":"2",
"Sigla":"IIC2233",
"Vacantes disponibles":"95",
"Vacantes totales":"95"
},
"3": {
"Aprobacion especial":"NO",
"Campus":"San Joaqu\u00edn",
"Categoria":null,
"Creditos":"10",
"Ingles":"NO",
"Modulos":{
"AYU":["M:4"],
"CLAS":["J:4,5"],
"LAB":[],
"LIB":[],
"PRA":[],
"SUP":[],
"TAL":[],
"TER":[],
"TES":[]
},
"NRC":"18177",
"Nombre":"Programaci\u00f3n Avanzada",
"Profesor":"Ossa Antonio",
"Retiro":"SI",
"Seccion":"3",
"Sigla":"IIC2233",
"Vacantes disponibles":"95",
"Vacantes totales":"95"
}
}
}
}
import requests
url_api = "http://buscacursos-api.herokuapp.com/api/v1"
params = {
"sigla": "PSI1204",
}
response = requests.post(url = url_api, params = params)
print(response.json())
Respuesta:
{
'code': 405,
'status': "Method Not Allowed",
'error': {
"message": "(#405) This API do not accept PUT or POST methods."
}
}