The ruby on rails Ansökan om att skrapa länken uppladdad från CSV-fil och
hitta förekomsten av länk på en viss sida.
I applikationen måste användaren skicka en csv och en lista över användarnas e-post till vilka den analyserade CSV:en kommer att skickas.
I csv kommer det att finnas tre 2 kolumner:
- refferal_link
- home_link
- och det finns värden som nedan
Först och främst kommer vi att skapa rails-applikationen
$ rails nya scrape_data
$ cd scrape_data
Sedan genererar vi UploadCsv-modulen, kör kommandot nedan
$ skenor g ställning UploadCsv generated_csv:string csv_file:string
Det kommer att skapa alla nödvändiga modeller, kontroller och migrationer för csv_file
Då börjar vi med att först ladda upp filen i DB
ersätt nedanstående kod i filer app/views/upload_csvs/_form.html.erb
vi har lagt till koden nedan för att ladda upp filen
<%= form_with(modell: upload_csv, lokal: true) gör |form| %>
<% om upload_csv.errors.any? %>
<div id="”error_explanation”">
<h2><%= pluralize(upload_csv.errors.count, “error”) %> förbjöd denna upload_csv från att sparas:</h2>
- <%= meddelande %>
<% upload_csv.errors.full_messages.each do |message| %>
<% slut %>
</div>
<% slut %>
<div class="”field”">
<%= form.label :csv_file %>
<%= form.filfält :csv_fil %>
</div>
<div class="”actions”">
<%= form.submit %>
</div>
<% slut %>
Sedan lägger vi till pärlan för att ladda upp en csv_file
lägg till raden nedan i gem-filen
gem 'carrierwave', '~> 2.0'
$-paketinstallation
Sedan skapar vi uppladdningsprogrammet i carrierwave
$-skenor genererar uppladdningsavatar
vi kommer att bifoga uppladdaren i modellen
app/models/upload_csv.rb
klass UploadCsv < ApplicationRecord
mount_uploader :csv_file, AvatarUploader
slutet
innan du går vidare, kontrollera bara att din applikation fungerar
kör under kommandon
$ rake db:create db:migrate
uppdatera rutterna
Rails.application.routes.draw gör
resurser :upload_csvs
root 'upload_csvs#index'
slutet
$ skenor s
Sedan skapar vi ett jobb för att läsa CSV-filen och skrapa länken från den
och den genererade filen kommer att sparas i kolumnen genered_csv i den posten
för att skapa jobbet kommer vi att göra som nedan
$-skenor genererar jobb generera_csv
lägg till pärlan nedan och kör paketinstallationen
pärla 'httparty'
pärla 'nokogiri'
då ersätter vi koden med nedan
klass GenrateCsvJob < ApplicationJob
queue_as :default
def perform(upload_csv)
processed_csv(upload_csv)
fil = Tempfile.open([“#{Rails.root}/public/generated_csv”, '.csv']) till |csv|
csv << %w[referal_link home_link count]
@new_array.each gör |new_array|
csv << new_array
slutet
file = "#{Rails.root}/public/product_data.csv"
headers = ['referal_link', 'home_link', 'count']
file = CSV.open(file, 'w', write_headers: true, headers: headers) do |writer|
@new_array.each gör |new_array|
författare << new_array
slutet
upload_csv.update(generated_csv: fil)
slutet
slutet
NotificationMailer.send_csv(upload_csv).deliver_now! om @new_array.present?
1TP5Måste generera försändelsen och följa stegen för försändelsen
slutet
# Metod för att få länkräkningen och lagrar i arrayen
def processed_csv(upload_csv)
@new_array = []
CSV.foreach(upload_csv.csv_file.path, headers: true, header_converters: :symbol) gör |rad|
rad_karta = rad.till_h
page = HTTParty.get(row_map[:refferal_link])
page_parse = Nokogiri::HTML(page)
link_array = page_parse.css('a').map { |länk| länk['href'] }
link_array_group = link_array.group_by(&:itself).map { |k, v| [k, v.längd] }.till_h
@new_array.push([radkarta[:refferal_länk], radkarta[:hemlänk], (länkarraygrupp[radkarta[:hemlänk]]).to_s])
slutet
slutet
slutet
Sedan bifogar vi jobbet after_create av upload_csvs och vi lägger till valideringen för csv_file require
vänligen uppdatera koden för app/models/upload_csv.rb
klass UploadCsv < ApplicationRecord
mount_uploader :csv_file, AvatarUploader
after_create :processed_csv
def processed_csv
GenrateCsvJob.perform_later(self)
slutet
slutet
kontrollera sedan efter uppladdning av filen din scrape-genererade fil kommer att uppdateras du kan kontrollera genererad csv
inuti /scrape_data/public/product_data.csv
vi kan skicka via e-post genom att använda instruktionerna nedan
Först kommer vi att generera försändelsen
$-skenor genererar mailer NotificationMailer
uppdatera koden för app/mailers/notification_mailer.rb
def send_csv(upload_csv)
@greeting = 'Hej'
attachments['parsed.csv'] = File.read(upload_csv.generated_csv)
mail(till: "[email protected]", ämne: 'CSV har analyserats framgångsrikt.')
slutet
slutet
vänligen konfigurera e-postkonfigurationen också config/environments/development.rb eller production.rb
lägg till nedanstående rader i filen
config.action_mailer.default_url_options = { värd: 'https://sample-scrape.herokuapp.com/' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
användarnamn: '[email protected]',
lösenord: '*******123456',
domän: 'gmail.com',
adress: 'smtp.gmail.com',
port: '587',
autentisering: :plain
}
config.action_mailer.raise_delivery_errors = falskt
och uppdatera vyn också app/views/notification_mailer/send_csv.html.erb
<h1>CSV har bearbetats, tack!</h1>
<p>
<%= @hälsning %>, kontrollera bilagan för att få e-postmeddelandet
</p>
Tack !