Fork me on GitHub

No contexto da API, a Aula é referenciada como lecture. Uma Aula representa a unidade mínima de conteúdo, como um texto ou vídeo, que possui interações sociais (ver Mural). Várias Aulas podem ser agrupadas e ordenadas em um módulo.

Tipos de Lecture

Existem cinco tipos de Aula, são estas

  • Página: Conteúdo em Rich Text Format.
  • Documento: Arquivo de texto (txt, pdf, doc, docx, ppt, pptx, etc).
  • Mídia: Arquivo de vídeo (mov, avi, mpeg, mp4, etc) ou vídeo hospedado no Youtube.
  • Exercício: Possui questões a serem respondidas.
  • Canvas: Aplicativo.

Atributos

Abaixo são descritos os atributos de uma Aula:

Atributo Descrição
created_at Data de criação
name Nome (título)
position Posição na ordenação dentro módulo
type Tipo (Canvas, Document, Exercise, Page, Media)
id Identificador
rating Avaliação feita pelos usuários
view_count Quantidade de vezes que foi visualizada
updated_at Data da última atualização

Links

Abaixo são descritos os links presentes na representação de uma Aula:

Link Descrição
self Aula em questão
self_link Aula no Redu (HTML)
subject Módulo onde a Aula se encontra
space Disciplina onde a Aula se encontra
course Curso onde a Aula se encontra
environment Ambiente onde a Aula se encontra

Tipos de aulas

Page

Esta aula é simplesmente um conteúdo baseado em Rich Text Format , originado pelo CKEditor.

Chave Descrição
content Conteúdo gerado pelo CKEditor. Inclui formatação HTML e CSS
raw Contéudo cru da aula, nem um tipo de formatação e estilo é adicionado

Document

Este tipo de aula é composto basicamente por um documento, o qual pode ter o formato txt, pdf, doc, docx, ppt, pptx, etc.

Chave Descrição
mimetype Formato do arquivo

Este tipo de aula também possui links, são estes:

Link Descrição
raw Endereço do arquivo bruto para download
scribd Endereço do arquivo hospedado no Scribd (com player para ser usado embedded)

Media

Este tipo de Lecture representa arquivos de mídia, podendo ser áudio ou vídeo, inclusive mídias do Youtube.

Chave Descrição
mimetype MimeType do arquivo de mídia
Link Descrição
raw Endereço para download do arquivo

Para casos de vídeos do Youtube, o MimeType retornado será video/x-youtube. Por exemplo:

Exercise

Canvas

Mais informações podem ser encontradas na documentação do Canvas.

GET /api/subjects/:id/lectures

Lista todas a Lectures presentes no Subject.

Autorização

É necessário estar matriculado no Course do qual o Subject faz parte.

Parâmetros

Atributo Descrição Restrições
id ID do Subject. N/A

Exemplo

Requisição: GET /api/spaces/12/lectures

Resposta:

[{
  "name": "Aula youtube",
    "position": 1,
    "rating": 0,
    "type": "Media",
    "links": [
    { "rel": "next_lecture", "href": "http://www.redu.com.br/api/lectures/105-conheca-o-seu-cliente" },
    { "rel": "course", "href": "http://www.redu.com.br/api/courses/recife" },
    { "rel": "environment", "href": "http://www.redu.com.br/api/environments/www" },
    { "rel": "subject", "href": "http://www.redu.com.br/api/subjects/114" },
    { "rel": "self", "href": "http://www.redu.com.br/api/lectures/107-aula-youtube" },
    { "rel": "raw", "href": "http://www.youtube.com/watch?v=GrV2SZuRPv0" },
    { "rel": "self_link", "href": "http://www.redu.com.br/espacos/27/modulos/114/aulas/107-aula-youtube" },
    { "rel": "space", "href": "http://www.redu.com.br/api/spaces/27" }
  ],
    "view_count": 6,
    "mimetype": "video/x-youtube",
    "updated_at": "2011-11-22T22:56:59-02:00",
    "id": 107,
    "created_at": "2011-02-21T10:11:05-03:00"
}]

GET /api/lectures/:id

Retorna a Aula em questão.

Autorização

Deve estar matriculado no Curso ao qual o módulo pertence (no caso, o curso ao qual a disciplina pertence).

Parâmetros

Parâmetro Descrição Restrições
id ID da Aula N/A

Exemplo

Requisição: GET /api/lectures/1

Resposta:

  • Página (Page)
{
  "created_at": "2013-01-16T10:28:23-02:00",
  "name": "Nome da aula",
  "links": [
    { "href": "http://www.redu.com.br/api/lectures/4877-novo", "rel": "self" },
    { "href": "http://www.redu.com.br/espacos/1412/modulos/3111/aulas/4877-novo", "rel": "self_link" },
    { "href": "http://www.redu.com.br/api/subjects/3111", "rel": "subject" },
    { "href": "http://www.redu.com.br/api/spaces/1412", "rel": "space" },
    { "href": "http://www.redu.com.br/api/courses/curso-de-exemplo", "rel": "course" },
    { "href": "http://www.redu.com.br/api/environments/ambiente-de-exemplo-api", "rel": "environment" },
    { "href": "http://www.redu.com.br/api/lectures/4877/statuses", "rel": "statuses" },
  ],
  "position": 1,
  "content": "<html></html>",
  "raw": "lorem lipsum",
  "type": "Page",
  "mimetype": "text/html",
  "id": 4877,
  "rating": 0,
  "view_count": 1,
  "updated_at": "2013-01-16T10:28:23-02:00"
}
  • Documento (Document)
{
  "created_at": "2013-01-16T10:28:23-02:00",
    "name": "Nome da aula",
    "links": [
      { "href": "http://www.redu.com.br/api/lectures/4877-novo", "rel": "self" },
      { "href": "http://www.redu.com.br/espacos/1412/modulos/3111/aulas/4877-novo", "rel": "self_link" },
      { "href": "http://www.redu.com.br/api/subjects/3111", "rel": "subject" },
      { "href": "http://www.redu.com.br/api/spaces/1412", "rel": "space" },
      { "href": "http://www.redu.com.br/api/courses/curso-de-exemplo", "rel": "course" },
      { "href": "http://www.redu.com.br/api/environments/ambiente-de-exemplo-api", "rel": "environment" },
      { "href": "http://www.redu.com.br/api/lectures/4877/statuses", "rel": "statuses" },
      { "href": "http://s3.amazonaws.com/redu_uploads/documents/attachments/1837/original/04-platform-101.pdf?1358254757", "rel" : "raw" },
      { "href": "http://www.scribd.com/embeds/120454644/content?start_page=1&view_mode=list&access_key=key-1k5p2ziz2wckhlhjsm9n", "rel" : "scribd" },
    ],
    "mimetype": "application/pdf",
    "position": 1,
    "type": "Document",
    "id": 4877,
    "rating": 0,
    "view_count": 1,
    "updated_at": "2013-01-16T10:28:23-02:00"
}
  • Exercício (Exercise)
  • Mídia (Media)

Para vídeos do YouTube:

{
  "created_at": "2013-01-16T10:28:23-02:00",
    "name": "Nome da aula",
    "links": [
      { "href": "http://www.redu.com.br/api/lectures/4877-novo", "rel": "self" },
      { "href": "http://www.redu.com.br/espacos/1412/modulos/3111/aulas/4877-novo", "rel": "self_link" },
      { "href": "http://www.redu.com.br/api/subjects/3111", "rel": "subject" },
      { "href": "http://www.redu.com.br/api/spaces/1412", "rel": "space" },
      { "href": "http://www.redu.com.br/api/courses/curso-de-exemplo", "rel": "course" },
      { "href": "http://www.redu.com.br/api/environments/ambiente-de-exemplo-api", "rel": "environment" },
      { "href": "http://www.redu.com.br/api/lectures/4877/statuses", "rel": "statuses" },
      { "href": "http://www.youtube.com/watch?v=zm5GcMjPFOU", "rel": "raw" }
    ]
    "position": 1,
    "mimetype": "video/x-youtube",
    "type": "Media",
    "id": 4877,
    "rating": 0,
    "view_count": 1,
    "updated_at": "2013-01-16T10:28:23-02:00"
}

Para vídeos hospedados no Redu:

{
  "created_at": "2013-01-16T10:28:23-02:00",
    "name": "Nome da aula",
    "links": [
    { "href": "http://www.redu.com.br/api/lectures/4877-novo", "rel": "self" },
    { "href": "http://www.redu.com.br/espacos/1412/modulos/3111/aulas/4877-novo", "rel": "self_link" },
    { "href": "http://www.redu.com.br/api/subjects/3111", "rel": "subject" },
    { "href": "http://www.redu.com.br/api/spaces/1412", "rel": "space" },
    { "href": "http://www.redu.com.br/api/courses/curso-de-exemplo", "rel": "course" },
    { "href": "http://www.redu.com.br/api/environments/ambiente-de-exemplo-api", "rel": "environment" },
    { "href": "http://www.redu.com.br/api/lectures/4877/statuses", "rel": "statuses" },
    { "href": "http://s3.amazonaws.com/redu/video-name.mpg", "rel": "raw" }
  ],
  "position": 1,
  "mimetype": "video/mpeg",
  "type": "Media",
  "id": 4877,
  "rating": 0,
  "view_count": 1,
  "updated_at": "2013-01-16T10:28:23-02:00"
}

POST /api/subjects/:subject_id/lectures

Cria uma aula.

Autorização

Deve estar matriculado no Curso ao qual o módulo pertence (no caso, o curso ao qual a disciplina pertence) e ter o papel de environment_admin ou teacher.

Parâmetros

Atributo Descrição Restrições
lecture[name] Nome da aula N/A
lecture[type] Tipo Deve ser Media, Document ou Page
lecture[media] Arquivo ou URL do youtube Apenas para aulas do tipo Media e Document
lecture[content] Conteúdo em texto Apenas para aulas do tipo Page

Upload de arquivos

Em casos casos em que há o upload de arquivos, são necessários os seguintes cabeçalhos HTTP:

1. Content-Type: multipart/form-data
2. Content-Length: 13951 (tamanho do arquivo em bytes)

O uso do Content-type multipart/form-data torna possível que o corpo da requisição HTTP seja composto vários conjuntos de dados, cada qual possuindo seu próprio Content-type. Com isso podemos enviar, além do name e type, os dados binários que compõem uma imagem ou um PDF.

O Redu é capaz de detectar automaticamente o Content-type para imagens. Porém, ao fazer upload de outros tipos de mídia, é necessário informar o seu Content-type. A maior parte das bibliotecas HTTP possuem esta funcionalidade implementada. Abaixo pode ser visto um exemplo de corpo de uma requisição HTTP para o upload de vídeo com o formato MPEG:

------------------------------17c3f87d4b40
Content-Disposition: form-data; name="lecture[media]"; filename=
"video_example.avi"
Content-Type: video/mpeg

<dados binários>
------------------------------17c3f87d4b40
Content-Disposition: form-data; name="lecture[name]"

testando_upload_de_aula
------------------------------17c3f87d4b40
Content-Disposition: form-data; name="lecture[type]"

Media

Este comportamento é descrito em detalhes no RFC 2388

Exemplo

Em todos os exemplos é utilizado cURL para testar a criação de Lecture. Um exemplo em Java pode ser encontrado aqui.

  • Documento (Document)

Neste exemplo, uma aula com o type Document será criada a partir do arquivo pdf_example.pdf no diretório atual.

curl \
  -H 'Authorization: OAuth AJOBibdmecfKxOpEeRWbdmVVCGujGRU3JKA0jyQM' \
  -F 'lecture[media]=@pdf_example.pdf;type=application/pdf' \
  -F 'lecture[name]=My lecture' \
  -F 'lecture[type]=Document' \
  http://www.redu.com.br/api/subjects/117/lectures -vv
  • Media (upload)

Neste exemplo, uma aula com o type Media será criada a partir do arquivo video.avi no diretório atual.

curl \
  -H 'Authorization: OAuth AJOBibdmecfKxOpEeRWbdmVVCGujGRU3JKA0jyQM' \
  -F 'lecture[media]=@video.avi;type=video/mpeg' \
  -F 'lecture[name]=My lecture' \
  -F 'lecture[type]=Media' \
  http://www.redu.com.br/api/subjects/117/lectures -vv
  • Media (YouTube)

Neste exemplo, uma aula com o type Media será criada a partir de um link do YouTube.

curl \
  -H 'Authorization: OAuth AJOBibdmecfKxOpEeRWbdmVVCGujGRU3JKA0jyQM' \
  -H 'Content-type: application/json' \
  -d '{ "lecture" : { "name" : "Youtube", "media" : "http://www.youtube.com/watch?v=GrV2SZuRPv0", "type" : "Media" } }' \
  http://redu.com.br/api/subjects/117/lectures -vv
  • Página (Page)
curl \
  -H 'Authorization: OAuth AJOBibdmecfKxOpEeRWbdmVVCGujGRU3JKA0jyQM' \
  -H 'Content-type: application/json' \
  -d '{ "lecture" : { "name" : "Minha pag", "content" : "<strong>meu conteudo</strong>", "type" : "Page" } }' \
  http://redu.com.br/api/subjects/117/lectures -vv

DELETE /api/lectures/:id

Deleta uma aula.

Autorização

Deve estar matriculado no Curso ao qual o módulo pertence (no caso, o curso ao qual a disciplina pertence) e ter o papel de environment_admin ou teacher.