Tuesday 16 May 2017

How to set 'Access-Control-Alow-Origin' header in a Meteor JS app?

I'm creating one app in Meteor that run scrapers of any profiles of google scholar, and just when I open a route, the terminal it shows me the next error of access, like this:

XMLHttpRequest cannot load https://scholar.google.cl/citations?user=n1qKMYwAAAAJ&hl=es. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.

enter image description here

results.html

<template name="results">
  
  
  <h3>Publicaciones</h3>
  <div class="radio"> <!--Inputs-->
    <div class="row">
      <div class="col-md-3 col-xs-6">
        <label><input type="radio" name="optradio">Campo</label>
        <label><input type="radio" name="optradio">Revista</label>
      </div>
      <div class="col-md-2 col-md-offset-7 col-xs-2 col-xs-offset-3">
        <button type="button" class="btn exportar">Exportar a CSV</button>
      </div>
    </div>
  </div>
  <center><h5>NĂºmero total de citaciones: 5457</h5></center>

  

  

  
  
  
</template>

results.js

var request = require('request');
var cheerio = require('cheerio');

Template.results.onCreated(function() {

  id_investigador = Busquedas.findOne({});

  url = "https://scholar.google.cl/citations?user=&hl=es";

  request(url, function(error, response, html){
    if(!error){
      var $ = cheerio.load(html);

      var id_usuario, autor, imagen_usuario, institucion, campos, titulos, citas_totales, citas_2012, indice_h_totales, indice_h_2012,
          indice_i10_totales, indice_i10_2012;

      var json = {  id_usuario: "",
                    autor : "",
                    imagen_usuario: "",
                    institucion : "",
                    campos : "",
                    titulos : "",
                    citas_totales : "",
                    citas_2012 : "",
                    indice_h_totales : "",
                    indice_h_2012 : "",
                    indice_i10_totales : "",
                    indice_i10_2012 : ""
                 };

      $('#gsc_prf_in').filter(function(){
        var data = $(this);
        autor = data.text().trim();

        json.autor = autor;
      })

      $('input[name="user"]').filter(function(){
        var data = $(this);
        id_usuario = data.val();

        json.id_usuario = id_usuario;
      })

      $('#gsc_prf_pup').filter(function(){
        var data = $(this);
        imagen_usuario = data.attr('src');

        json.imagen_usuario = imagen_usuario;
      })


      $('#gsc_prf_i').filter(function(){
        var data = $(this);
        campos = data.children().eq(3).children().eq(0).text().trim();

        json.campos = campos;
      })

      $('#gsc_prf_i').filter(function(){
        var data = $(this);
        institucion = data.children().eq(2).children().text().trim();

        //institucion = data.next().children().attr('href');

        json.institucion = institucion;
      })

      $('#gsc_a_b').filter(function(){
        var data = $(this);
        titulos = data.children().length;

        json.titulos = titulos;
      })

      /*$('.gsc_a_tr').filter(function(){
        var data = $(this);
        titulo = data.text();

        json.titulo = titulo;
      })*/

      //CITAS
      $('table[id="gsc_rsb_st"]').filter(function(){
        var data = $(this);
        citas_totales = data.children().eq(1).children().eq(1).text();

        json.citas_totales = citas_totales;
      })

      $('table[id="gsc_rsb_st"]').filter(function(){
        var data = $(this);
        citas_2012 = data.children().eq(1).children().eq(2).text();

        json.citas_2012 = citas_2012;
      })

      $('table[id="gsc_rsb_st"]').filter(function(){
        var data = $(this);
        indice_h_totales = data.children().eq(2).children().eq(1).text();

        json.indice_h_totales = indice_h_totales;
      })

      $('table[id="gsc_rsb_st"]').filter(function(){
        var data = $(this);
        indice_h_2012 = data.children().eq(2).children().eq(2).text();

        json.indice_h_2012 = indice_h_2012;
      })

      $('table[id="gsc_rsb_st"]').filter(function(){
        var data = $(this);
        indice_i10_totales = data.children().eq(3).children().eq(1).text();

        json.indice_i10_totales = indice_i10_totales;
      })

      $('table[id="gsc_rsb_st"]').filter(function(){
        var data = $(this);
        indice_i10_2012 = data.children().eq(3).children().eq(2).text();

        json.indice_i10_2012 = indice_i10_2012;
      })

      console.log(json)
      Session.set('scraperData', json);

    }
  })
});

Template.results.helpers({
  scraperData(){
    return Session.get('scraperData');
  }
});

And this the route of this template:

Router.route('/results/:id_investigador', {
   name: 'results',
   waitOn: function() {
     return Meteor.subscribe('busquedas', this.params.id_investigador);
   },
   data: function() {
     return Busquedas.findOne(this.params.id_investigador);
   }
});

Thanks for all. Regards



via beriliox

No comments:

Post a Comment