Extracción de datos en rieles mediante procesamiento CSV

La aplicación Ruby on Rails para extraer el enlace cargado desde un archivo CSV y

encuentre la aparición de un enlace en una página en particular.

En la aplicación, el usuario debe pasar un csv y una lista de correo electrónico de los usuarios a quienes se enviará el CSV analizado.

En el csv habrá tres columnas de 2:

  • enlace_referencia
  • enlace_inicio
  • y hay valores como a continuación

Primero que nada crearemos la aplicación Rails.

$ rieles nuevos scrape_data

$ CD scrape_data

Luego generaremos el módulo UploadCsv, ejecutaremos el siguiente comando

$ rieles g andamio UploadCsv generate_csv:string csv_file:string

Eso creará todos los modelos, controladores y migraciones necesarios para csv_file

Luego comenzaremos cargando primero el archivo en la base de datos.

reemplace el siguiente código en los archivos  aplicación/views/upload_csvs/_form.html.erb

Agregamos el siguiente código para cargar el archivo a la vista.

<%= form_with(modelo: upload_csv, local: true) hacer |formulario| %>

  <% si upload_csv.errors.any? %>

    <div id="”error_explanation”">

      <h2><%= pluralize(upload_csv.errors.count, “error”) %> prohibió que se guardara este upload_csv:</h2>

     

            <% upload_csv.errors.full_messages.cada uno |mensaje| %>

             

  • <%= mensaje %>
  •         <% final %>

         

    </div>

  <% final %>

  <div class="”field”">

    <%= formulario.etiqueta:csv_file %>

    <%= formulario.campo_archivo :archivo_csv %>

  </div>

  <div class="”actions”">

    <%= formulario.enviar %>

  </div>

<% final %>

Luego agregaremos la gema para cargar un archivo csv.

agregue la siguiente línea en el archivo de gemas

gema 'onda portadora', '~> 2.0'

Instalación del paquete $

Luego crearemos el cargador en Carrierwave.

Los rieles $ generan el avatar del cargador

Adjuntaremos el cargador en el modelo.

aplicación/modelos/upload_csv.rb

clase UploadCsv <Registro de aplicación

  mount_uploader: archivo_csv, AvatarUploader

fin

Antes de continuar, simplemente verifique que su aplicación esté funcionando.

ejecutar los siguientes comandos

$ rastrillo db:crear db:migrar

actualizar las rutas

Rails.application.routes.draw hacer

  recursos: subir_csvs

  raíz 'upload_csvs#index'

fin

Rieles $

Luego crearemos un trabajo para leer el archivo CSV y eliminar el enlace.

y el archivo generado se guardará en la columna generate_csv de esos registros

Para generar el trabajo haremos como se muestra a continuación.

Los carriles $ generan empleo generar_csv

agregue la siguiente gema y ejecute la instalación del paquete

joya 'httppartido'

joya 'nokogiri'

luego reemplazaremos el código con el siguiente

clase GenrateCsvJob <ApplicationJob

  cola_as: predeterminado

  def realizar(upload_csv)

    procesado_csv(cargar_csv)

    archivo = Tempfile.open([“#{Rails.root}/public/generated_csv”, '.csv']) hacer |csv|

      csv << %w[referal_link home_link count]

      @new_array.cada uno hace |new_array|

        csv << nueva_matriz

      fin

      archivo = "#{Rails.root}/public/product_data.csv"

      encabezados = ['referal_link', 'home_link', 'count']

      archivo = CSV.open(archivo, 'w', write_headers: verdadero, encabezados: encabezados) hacer |escritor|

        @new_array.cada uno hace |new_array|

          escritor << nueva_matriz

        fin

        upload_csv.update(generated_csv: archivo)

      fin

    fin

    NotificationMailer.send_csv(upload_csv).deliver_now! si @new_array.presente?

    1TP5Necesita generar el correo y seguir los pasos del mismo.

  fin

  Método # para obtener el recuento de enlaces y los almacenes en la matriz

  def procesado_csv(cargar_csv)

    @new_array = []

    CSV.foreach(upload_csv.csv_file.path, encabezados: verdadero, header_converters: :symbol) hacer |fila|

      mapa_fila = fila.to_h

      página = HTTParty.get(row_map[:refferal_link])

      page_parse = Nokogiri::HTML(página)

      link_array = page_parse.css('a').map { |enlace| enlace['href'] }

      link_array_group = link_array.group_by(&:itself).map { |k, v| [k, v.longitud] }.to_h

      @new_array.push([row_map[:refferal_link], row_map[:home_link], (link_array_group[row_map[:home_link]]).to_s])

    fin

  fin

fin

Luego adjuntaremos el trabajo after_create de upload_csvs y agregaremos la validación para csv_file require

 por favor actualice el código de  aplicación/modelos/upload_csv.rb

clase UploadCsv <Registro de aplicación

  mount_uploader: archivo_csv, AvatarUploader

  after_create: procesado_csv

  def procesado_csv

    GenerarCsvJob.perform_later(self)

  fin

fin

luego verifique después de cargar el archivo, su archivo generado por scrape se actualizará. Puede verificar el csv generado.

adentro  /scrape_data/public/product_data.csv

Podemos enviar por correo electrónico siguiendo las instrucciones a continuación.

Primero generaremos el anuncio publicitario.

Los rieles $ generan correo NotificationMailer

actualizar el código de aplicación/mailers/notification_mailer.rb

  def enviar_csv(cargar_csv)

    @saludo = 'Hola'

    archivos adjuntos ['parsed.csv'] = Archivo.read(upload_csv.generated_csv)

    mail(a: “sample@gmail.com”, asunto: 'CSV se analiza correctamente').

  fin

fin

por favor configure el correo configure también config/environments/development.rb o production.rb

agregue las siguientes líneas en el archivo

config.action_mailer.default_url_options = {host: 'https://sample-scrape.herokuapp.com/'}

config.action_mailer.delivery_method = :smtp

config.action_mailer.smtp_settings = {

  nombre_usuario: 'muestra@gmail.com',

  contraseña: '*******123456',

  dominio: 'gmail.com',

  dirección: 'smtp.gmail.com',

  puerto: '587',

  autenticación: :simple

}

config.action_mailer.raise_delivery_errors = falso

y actualizar la vista también aplicación/views/notification_mailer/send_csv.html.erb

<h1>CSV ha sido procesado. ¡Gracias!</h1>

<p>

  <%= @saludo %>, verifique el archivo adjunto para recibir el correo electrónico

</p>

Gracias !

Suscríbete para recibir las últimas actualizaciones

Artículos Relacionados

Acerca del autor de la publicación

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


es_ESSpanish