Este é um projeto de código aberto que tem como objetivo manter uma API simples e funcional para que aplicações diversas possam consumir a programação de salas e horários de filmes em cartaz do Cinépolis, uma das maiores redes de cinema do país.
Tudo o que você precisa saber é que o projeto foi desenvolvido com Rails e é basicamente um parser do site oficial do Cinépolis. Então, acabei usando uma boa dose da fantástica gem Nokogiri e também um pouquinho da HTTParty.
Caso queira ver a API em ação, acesse: cinepolisapi.heroku.com. Sinta-se livre para contribuir como quiser. Toda ajuda será bem-vinda!
-
Ruby 2.3.0 ou superior
-
Rails 4.2.5.1
Clone este repositório:
git clone git@github.com:afilhodaniel/cinepolis_api
Instale as dependências necessárias:
bundle install
-
GET /api/v1/states.json
-
GET /api/v1/states/:uf.json
-
GET /api/v1/cities.json
-
GET /api/v1/cities/:id.json
-
GET /api/v1/movie_theaters.json
-
GET /api/v1/movie_theaters/:id.json
-
GET /api/v1/movies.json
-
GET /api/v1/movies/:id.json
GET /api/v1/states.json
Retorna um JSON com todos os estados e suas cidades. Exemplo:
{ states: [ { uf: "AM", name: "Amazonas", url: "http://cinepolisapi.herokuapp.com:80/api/v1/states/am.json", cities: [ { id: "29", name: "Manaus", url: "http://cinepolisapi.herokuapp.com:80/api/v1/cities/29.json" }, ... ] }, ... ] }
GET /api/v1/states/am.json
Retorna um JSON com todas as cidades do estado requisitado. Exemplo:
{ success: true, state: { uf: "AM", name: "Amazonas", url: "http://cinepolisapi.herokuapp.com:80/api/v1/states/am.json", cities: [ { id: "29", name: "Manaus", url: "http://cinepolisapi.herokuapp.com:80/api/v1/cities/29.json", }, ... ] } }
GET /api/v1/cities.json
Retorna um JSON com todas as cidades e suas unidades de cinema. Exemplo:
{ cities: [ { id: "8", name: "Barueri - SP", url: "http://cinepolisapi.herokuapp.com:80/api/v1/cities/8.json", state: { uf: "SP", name: "São Paulo", url: "http://cinepolisapi.herokuapp.com:80/api/v1/states/sp.json" }, movie_theaters: [ { id: "8", name: "Cinépolis Iguatemi Alphaville", url: "http://localhost:3000/api/v1/movie_theaters/8.json" }, { id: "22", name: "Cinépolis Parque Barueri", url: "http://localhost:3000/api/v1/movie_theaters/22.json" } ] }, ... ] }
GET /api/v1/cities/8.json
Retorna um JSON com todas as informações sobre a cidade requisitada e todas as suas unidades de cinema. Exemplo:
{ success: true, city: { id: "8", name: "Barueri", url: "http://cinepolisapi.herokuapp.com:80/api/v1/cities/8.json", state: { uf: "SP", name: "São Paulo", url: "http://cinepolisapi.herokuapp.com:80/api/v1/states/sp.json" }, movie_theaters: [ { id: "8", name: "Cinépolis Iguatemi Alphaville", url: "http://cinepolisapi.herokuapp.com:80/api/v1/movie_theaters/8.json" }, ... ] } }
GET /api/v1/movie_theaters.json
Retorna um JSON com todas as unidades de cinema. Exemplo:
{ movie_theaters: [ { id: "8", name: "Cinépolis Iguatemi Alphaville" city: { id: "8", name: "Barueri - SP" }, url: "http://localhost:3000/api/v1/movie_theaters/8.json" }, { id: "22", name: "Cinépolis Parque Barueri", city: { id: "8", name: "Barueri - SP" }, url: "http://localhost:3000/api/v1/movie_theaters/22.json" }, ... ] }
GET /api/v1/movie_theaters/:id.json
Retorna um JSON com a programação completa de salas e horários da unidade de cinema em questão. Exemplo:
{ success: true, movie_theater: { name: "Cinépolis Parque Barueri", city: "Barueri-SP", weeks: [ { from: "18/02", to: "24/02/2016", sessions: [ { room: "1", movie: { name: "Deadpool", url: "http://localhost:3000/api/v1/movies/7160.json", pg: "16", subtitled: false, dubbed: true }, hours: [ "13h35", "16h15", "19h00", "21h45" ] }, ... ] }, ... ] } }
GET /api/v1/movies.json
Retorna um JSON com todos os filmes em cartaz. Exemplo:
{ movies: [ { id: "7400", name: "13 Horas: Os Soldados Secretos de Benghazi", url: "http://localhost:3000/api/v1/movies/7400.json", }, { id: "7142", name: "A 5ª Onda", url: "http://localhost:3000/api/v1/movies/7142.json" }, ... ] }
GET /api/v1/movies/:id.json
Retorna um JSON com todas as informações sobre o filme em questão e a programação completa de salas e horários de todas as unidades de cinema em que o filme está sendo exibido, organizada por cidade. Exemplo:
{ success: true, movie: { id: "7400", image: "http://www.claquete.com/fotos/filmes/poster/7400_medio.jpg", trailer: "http://www.youtube.com/embed/aLKSUIXYE14", name: "13 Horas: Os Soldados Secretos de Benghazi", original_name: "13 Hours: The Secret Soldiers of Benghazi, 2015", pg: "14", sinopse: "O longa retratará o ataque terrorista que vitimou o embaixador dos Estados Unidos na Líbia em setembro de 2012, sob o ponto de vista de um oficial, vivido por John Krasinski, do grupo de elite da Marinha dos Estados Unidos.", cast: "John Krasinski, Dominic Fumusa, James Badge Dale, Max Martini, Pablo Schreiber, Alexia Barlier, David Costabile, Peyman Moaadi", director: "Michael Bay", cities: [ { city: "Barueri-SP", movie_theaters: [ { name: "Cinépolis Iguatemi Alphaville", url: "http://localhost:3000/api/v1/movie_theaters/8.json", sessions: [ { room: "1", subtitled: true, dubbed: false, macroxe: false, vip: false, 4dx: false, 2d: false, hours: [ "15h00", "18h15", "21h30" ] }, ... ] }, ... ] }, ... ] } }
404
No caso de você solicitar algum recurso que não existe, a API retornará algo como isso:
{ success: false, errors: { movie: "Movie doesn't exists" } }
Também fiz outros projetos de API de outros cinemas. Todos seguem exatamente (ou quase) a mesma estrutura. Confira nos links abaixo:
Cinspaço API: github.com/afilhodaniel/cinespaco_api
-
Você pode usar este projeto como bem entender. Mas sugiro não usar o deploy do Heroku citado mais acima. Trata-se de um deploy que eu fiz apenas para demonstrar o funcionamento da API. Faça seu próprio deploy, em um servidor profissional.
-
Caso queria entender melhor sobre a estrutura do projeto, acesse: github.com/afilhodaniel/rails_app