Import des seances et export avec api ecranvillage - rodinux/plannings_cinema GitHub Wiki

J'ai trouvé un code magique pour importer les films du site d'Ecran village en utilsant une gem httparty. L'api-ecranvillage donne une page en .json avec les films qui ont la catégorie "export". J'ai mis en place une page qui va récupérer ces films si ils n'existent pas encore dans l'applivcation avec leur description et avec leur id, ce qui va me permettre de créer des liens vers les pages du site. Voici le code

controllers/films_controllers

class FilmsController < ApplicationController

  before_action :set_locale  
  def set_locale
    I18n.locale = :fr 
  end

require 'httparty'

# GET /ecranvillage.json       
  def ecranvillage    
       @films = Film.all             
       response = HTTParty.get('http://www.ecranvillage.net/wp-json/ecranvillage-api/v2/export')
       puts response.body, response.code, response.message, response.headers.inspect    
       JSON.parse(response.body).each do |item|    
       nouveaux_films = Film.new( :id => item["id"], :titrefilm => item["titrefilm"], :description => item["description"] )
       nouveaux_films.save
    end    
  end
end

views/films/ecranvillage.html.erb

<% response = HTTParty.get('http://www.ecranvillage.net/wp-json/ecranvillage-api/v2/export')%>
       <% puts response.body, response.code, response.message, response.headers.inspect %>
<div class="container">       
    <center><h1>Importer les nouveaux Films</h1>
    <h1><strong>Bravo, en arrivant ici, vous venez d'ajouter les Films à venir du site d'Ecranvillage</strong></h1></p>
    <%= link_to 'Retour à la liste de films', films_path, :class => "btn btn-lg btn-success" %>
    <h2>Liste des Films à venir sur le site d'Ecran Village</h2></center>      
      <strong><%= response.body %></strong>
</div>
<br>

views/films/ecranvillage.json.builder

response = HTTParty.get('http://www.ecranvillage.net/wp-json/ecranvillage-api/v2/export')
puts response.body, response.code, response.message, response.headers.inspect
json.array!(response)

Ensuite quand des séances vont être éditées sur l'application, l'api-ecranvillage va récupérer les séances éditées et les intégrées dans le site à partir de ces fichiers :

views/films/index.json.builder

date_range  = 2.month.ago..Date.today + 1
json.array!(@films.where(updated_at: date_range).order(created_at: :desc)) do |film|
  json.extract! film, :id, :titrefilm, :description 
  json.url film_url(film, format: :json) 
end

views/films/show.json.builder

json.array!(@film.seances.order(horaire: :asc)) do |seance|
  json.extract! seance, :id, :film_id, :version, :horaire, :village_id  
end

views/villages/show/json

json.extract! @village, :id, :salle, :espace

Elle peut récupérer les séances par film et par lieux avec tout les renseignements, pour cela sur le site Worpress d'Ecran village, il suffit de mettre un shortcode [seances] dans la page et dans la description et d'ajouter un champ personnalisé avec film_id et la valeur de l'id du film. Dans l'application l'id du film est égale à film_id des séances (association des tables).

⚠️ **GitHub.com Fallback** ⚠️