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: “[email protected]”, 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: '[email protected]',

  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

Deja un comentario

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

es_ESSpanish