Added threads

Signed-off-by: Marcin Woźniak <y0rune@aol.com>
This commit is contained in:
Marcin Woźniak 2020-12-28 01:14:07 +01:00
parent 83b6268d13
commit 4b7fed6218
Signed by: y0rune
GPG Key ID: F204C385F57EB348

View File

@ -3,13 +3,15 @@
require 'open-uri' require 'open-uri'
require 'nokogiri' require 'nokogiri'
require 'csv' require 'spreadsheet'
require 'thread'
require 'thwait'
semestr = "Semestr zimowy 2019" semestr = "Semestr zimowy 2019"
url = "https://usosweb.amu.edu.pl/kontroler.php?_action=katalog2/przedmioty/szukajPrzedmiotu&cp_showDescriptions=0&cp_showGroupsColumn=0&cp_cdydsDisplayLevel=2&f_tylkoWRejestracji=0&f_obcojezyczne=0&method=faculty_organized&kierujNaPlanyGrupy=0&jed_org_kod=0600000000&tab9b4e_offset=0&tab9b4e_limit=2000&tab9b4e_order=2a1a" url = "https://usosweb.amu.edu.pl/kontroler.php?_action=katalog2/przedmioty/szukajPrzedmiotu&cp_showDescriptions=0&cp_showGroupsColumn=0&cp_cdydsDisplayLevel=2&f_tylkoWRejestracji=0&f_obcojezyczne=0&method=faculty_organized&kierujNaPlanyGrupy=0&jed_org_kod=0600000000&tab9b4e_offset=0&tab9b4e_limit=2000&tab9b4e_order=2a1a"
puts "URL: #{url}" puts "URL: #{url}"
source = open(url).read source = open(url, :read_timeout => 300).read
prz_kod = source.scan(/prz_kod=06-D\w*-*\w*-*\w*-*\w*-*/).uniq prz_kod = source.scan(/prz_kod=06-D\w*-*\w*-*\w*-*\w*-*/).uniq
@ -17,41 +19,66 @@ file = File.open("output.csv", 'w')
file.puts "zaj_cyk_id,typ,kod,nazwa,nr_gr,Mc,dzien,godzina,nazwisko,imie" file.puts "zaj_cyk_id,typ,kod,nazwa,nr_gr,Mc,dzien,godzina,nazwisko,imie"
file.close file.close
book = Spreadsheet::Workbook.new
sheet = book.create_worksheet(name: "#{semestr}")
sheet.row(0).push('zaj_cyk_id','typ','kod','nazwa','nr_gr','Mc','dzien','godzina','stopien','nazwisko','imie')
j = 1
threads = []
prz_kod.each do |przkod| prz_kod.each do |przkod|
pokazPrzedmiotUrl = "https://usosweb.amu.edu.pl/kontroler.php?_action=katalog2/przedmioty/pokazPrzedmiot&" + przkod pokazPrzedmiotUrl = "https://usosweb.amu.edu.pl/kontroler.php?_action=katalog2/przedmioty/pokazPrzedmiot&" + przkod
puts "PrzedmiotUrl: #{pokazPrzedmiotUrl}" puts "PrzedmiotUrl: #{pokazPrzedmiotUrl}"
pokazPrzedmiot = open(pokazPrzedmiotUrl).read sleep 2
pokazPrzedmiot = open(pokazPrzedmiotUrl, :open_timeout => 300).read
semestrPrzedmiotu = pokazPrzedmiot.scan(semestr).uniq semestrPrzedmiotu = pokazPrzedmiot.scan(semestr).uniq
przedmiot = pokazPrzedmiot.scan(/<h1>.*/).uniq.to_s.sub("<h1>","").sub("</h1>","") przedmiot = pokazPrzedmiot.scan(/<h1>.*/).uniq.to_s.sub("<h1>","").sub("</h1>","")
if semestrPrzedmiotu != [] if semestrPrzedmiotu != []
zajCykId = pokazPrzedmiot.scan(/https.*zaj_cyk_id=[0-9]*/).to_s.scan(/[0-9]{2,}/) zajCykId = pokazPrzedmiot.scan(/https.*zaj_cyk_id=[0-9]*/).to_s.scan(/[0-9]{2,}/)
zajCykId.each do |zajcyk| zajCykId.each do |zajcyk|
zajCykUrl = "https://usosweb.amu.edu.pl/kontroler.php?_action=katalog2/przedmioty/pokazGrupyZajec&zaj_cyk_id=" + zajcyk zajCykUrl = "https://usosweb.amu.edu.pl/kontroler.php?_action=katalog2/przedmioty/pokazGrupyZajec&zaj_cyk_id=" + zajcyk
puts "PrzedmiotUrl: #{zajCykUrl}" puts "PrzedmiotUrl: #{zajCykUrl}"
zajCyk = open(zajCykUrl).read
zajCyk = open(zajCykUrl, :open_timeout => 300).read
groups = zajCyk.scan(/strong grupa.*/).to_s.scan(/[0-9]{1,}/).uniq groups = zajCyk.scan(/strong grupa.*/).to_s.scan(/[0-9]{1,}/).uniq
groups.each do |nrgrupy| groups.each do |nrgrupy|
threads << Thread.new {
sleep 2 sleep 2
dzien = "" typ, dzien, prowadzacyImiona, prowadzacyNazwisko, prowadzacyStopien = ""
typ = ""
dzienTygodnia = [/poniedziałek/,/wtorek/,/środa/,/czwartek/,/piątek/] dzienTygodnia = [/poniedziałek/,/wtorek/,/środa/,/czwartek/,/piątek/]
typ = [/Ćwiczenia/,/Zajęcia laboratoryjne/,/Seminarium/,/Wykład/,/Konwersatorium/] typ = [/Praktyka/,/Ćwiczenia/,/Lektorat/,/Zajęcia laboratoryjne/,/Seminarium/,/Wykład/,/Konwersatorium/]
grupaUrl = "https://usosweb.amu.edu.pl/kontroler.php?_action=katalog2/przedmioty/pokazZajecia&zaj_cyk_id=" + zajcyk + "&gr_nr=" + nrgrupy grupaUrl = "https://usosweb.amu.edu.pl/kontroler.php?_action=katalog2/przedmioty/pokazZajecia&zaj_cyk_id=" + zajcyk + "&gr_nr=" + nrgrupy
puts "GrupaUrl: #{grupaUrl}" puts "GrupaUrl: #{grupaUrl}"
grupa = open(grupaUrl).read
grupa = open(grupaUrl, :open_timeout => 300).read
document = Nokogiri::HTML(grupa) document = Nokogiri::HTML(grupa)
table = document.css('div#layout-container div#layout-t2 div.layout-row main#layout-main-content div#layout-c22a div.wrtext table.grey').text.gsub!(/\s+/, ' ') table = document.css('div#layout-container div#layout-t2 div.layout-row main#layout-main-content div#layout-c22a div.wrtext table.grey').text.gsub!(/\s+/, ' ')
semestrt = table.match(/Semestr.* [0-9]+\//).to_s.sub("/","") semestrt = table.match(/Semestr.* [0-9]+\//).to_s.sub("/","")
prowadzacy = table.match(/Prowadzący:.* Uwagi/).to_s.sub("Uwagi", "").to_s.sub("Prowadzący:", "").strip.split
przedmiot = table.match(/Przedmiot.* 06/).to_s.sub("06","").sub("Przedmiot","").strip przedmiot = table.match(/Przedmiot.* 06/).to_s.sub("06","").sub("Przedmiot","").strip
godzina = table.match(/[0-9]+:[0-9]+/) godzina = table.match(/[0-9]+:[0-9]+/)
limitMiejsc = table.match(/Limit miejsc: [0-9]+/).to_s.match(/[0-9]+/) limitMiejsc = table.match(/Limit miejsc: [0-9]+/).to_s.match(/[0-9]+/)
kod = table.match(/06-D\w*-*\w*-*\w*-*/).to_s.sub("06-","") kod = table.match(/06-D\w*-*\w*-*\w*-*/).to_s.sub("06-","")
prowadzacyKod = document.to_s.match('os_id=[0-9]+').to_s
if prowadzacyKod != ""
prowadzacyUrl = "https://usosweb.amu.edu.pl/kontroler.php?_action=katalog2/osoby/pokazOsobe&" + prowadzacyKod
puts "prowadzacyUrl: #{prowadzacyUrl}"
prowadzacyWeb = Nokogiri::HTML(open(prowadzacyUrl, :open_timeout => 300).read)
prowadzacyInfo = prowadzacyWeb.css('div#user-attrs-id').text.gsub!(/\s+/, ' ').strip
prowadzacyImiona = prowadzacyInfo.match(/Imiona.* Nazwisko/).to_s.sub("Imiona","").sub("Nazwisko","").strip
prowadzacyNazwisko = prowadzacyInfo.match(/Nazwisko.* Stopnie/).to_s.sub("Nazwisko","").sub("Stopnie","").strip
prowadzacyStopien = prowadzacyInfo.match(/Stopnie.*/).to_s.sub("Stopnie i tytuły","").strip
else
prowadzacyImiona, prowadzacyNazwisko, prowadzacyStopien = "null"
end
i = 0 i = 0
if (semestr == semestrt) && (kod != "") #&& !(kod.match('-E$')) if (semestr == semestrt) && (kod != "") && (!kod.match?('-E$'))
dzienTygodnia.each do |dz| dzienTygodnia.each do |dz|
i =+ 1 i =+ 1
if table.match(dz) if table.match(dz)
@ -59,20 +86,29 @@ prz_kod.each do |przkod|
dzien = i dzien = i
end end
end end
typ.each do |ty| typ.each do |ty|
if table.match(ty) if table.match(ty)
typ = ty.to_s.match(/:\p{L}+/).to_s.sub(":","") typ = ty.to_s.match(/:\p{L}+/).to_s.sub(":","")
end end
end end
if typ == "Zajęcia" if typ == "Zajęcia"
typ = "Laboratorium" typ = "Laboratorium"
end end
file = File.open("output.csv", 'a') file = File.open("output.csv", 'a')
puts "#{zajcyk},#{typ},#{semestrt},#{przkod},#{przedmiot},#{nrgrupy},#{limitMiejsc},#{dzien},#{godzina},#{prowadzacy[1]},#{prowadzacy[0]}" puts "Do pliku: #{zajcyk},#{typ},#{kod},#{przedmiot},#{nrgrupy},#{limitMiejsc},#{dzien},#{godzina},#{prowadzacyStopien},#{prowadzacyNazwisko},#{prowadzacyImiona}"
file.puts "#{zajcyk},#{typ},#{kod},#{przedmiot},#{nrgrupy},#{limitMiejsc},#{dzien},#{godzina},#{prowadzacy[1]},#{prowadzacy[0]}" file.puts "#{zajcyk},#{typ},#{kod},#{przedmiot},#{nrgrupy},#{limitMiejsc},#{dzien},#{godzina},#{prowadzacyStopien},#{prowadzacyNazwisko},#{prowadzacyImiona}"
file.close file.close
sheet.row(j).push("#{zajcyk}","#{typ}","#{kod}","#{przedmiot}","#{nrgrupy}","#{limitMiejsc}","#{dzien}","#{godzina}","#{prowadzacyStopien}","#{prowadzacyNazwisko}","#{prowadzacyImiona}")
j = j + 1
end end
}
end end
end end
end end
end end
book.write "#{semestr}.xlsx"
ThreadsWait.all_waits(*threads)