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>
- <%= mensaje %>
<% upload_csv.errors.full_messages.cada uno |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 !