# encoding: utf-8 require 'net/http' require 'open-uri' require 'timeout' class Admin::ImportDataController < OrbitBackendController # helper Admin::PagePartsHelper # include Admin::FrontendWidgetInterface def get_teacher_data uri = URI("https://localhost:8000/teachers.xml") #params = {"UnitName" => "管理學院".encode('big5-uao'), "account" => "manage"} #uri.query = URI.encode_www_form(params) res = Net::HTTP.get_response(uri) @teacher_data = Hash.from_xml(res.body) @teachers = @teacher_data["objects"] @i = 5000 @teachers.each do |hash| # @roles = Role.skip(1).first @roles = Role.all @teacher = User.new I18n.locale = :zh_tw if !hash['teacher_zh_tw'].blank? @teacher.first_name = hash['teacher_zh_tw'] elsif hash['teacher_zh_tw'].blank? && !hash['teacher_en'].blank? @teacher.first_name = hash['teacher_en'] elsif hash['teacher_zh_tw'].blank? && hash['teacher_en'].blank? @teacher.first_name = "Please Fill the Name" end I18n.locale = :en if !hash['teacher_en'].blank? @teacher.first_name = hash['teacher_en'] elsif hash['teacher_en'].blank? && !hash['teacher_zh_tw'].blank? @teacher.first_name = hash['teacher_zh_tw'] elsif hash['teacher_en'].blank? && hash['teacher_zh_tw'].blank? @teacher.first_name = "Please Fill the Name" end #@teacher.first_name = hash['teacher_en'] @teacher.ntu_seq = hash['ntu_seq'] @teacher.sid = hash['ntu_seq'] @teacher.role_ids = ["#{@roles.skip(1).first.id}"] @teacher.password = "testpass" @i += 10 if !hash['email'].blank? @user = User.where(email: "#{hash['email']}") if @user.length == 0 @teacher.email = hash['email'] elsif @user.length > 0 @teacher.email = "#{@i}duplicate@ntu.edu.tw" end else @teacher.email = "#{@i}@ntu.edu.tw" end if hash['teacher_zh_tw'].blank? && hash['teacher_en'].blank? @teacher.user_id = "defaultuser" elsif hash['teacher_en'].blank? @teacher.user_id = hash['teacher_zh_tw'] elsif hash['teacher_zh_tw'] @teacher.user_id = hash['teacher_en'] end @teacher.save! end end def get_book_data uri = URI("http://ann.cc.ntu.edu.tw/Achv/xmlTeacherData.asp") params = {"UnitName" => "管理學院".encode('big5-uao'), "account" => "manage"} uri.query = URI.encode_www_form(params) res = Net::HTTP.get_response(uri) teachers = User.all teachers.each do |hash| # if hash.ntu_seq.present? if hash.user_id.present? # ntu_seq = hash.ntu_seq u_account = hash.user_id books_xml = Nokogiri::XML( \ # open("http://ann.cc.ntu.edu.tw/Achv/xmlBook.asp?Seq=#{ntu_seq}")) open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=Book&account=#{u_account}")) @books = books_xml.xpath("//Book").map do |book_node| { author: (book_node>"Authors").text, year: (book_node>"PublishYear").text, title: (book_node>"DocTitle").text, remarks: (book_node>"Remarks").text, publisher: (book_node>"Publisher").text, book_title: (book_node>"BookTitle").text } end if @books.present? @books.each do |b| @book = WritingBook.new I18n.locale = :zh_tw @book.authors = b[:author] @book.paper_title = b[:title] @book.book_title = b[:book_title] @book.note = b[:remarks] @book.publisher = b[:publisher] I18n.locale = :en @book.authors = b[:author] @book.paper_title = b[:title] @book.book_title = b[:book_title] @book.note = b[:remarks] @book.publisher = b[:publisher] @book.year = b[:year] @book.create_user_id = hash.id @book.save end else puts "No books by Teacher" end end end end def get_conference_data uri = URI("http://ann.cc.ntu.edu.tw/Achv/xmlTeacherData.asp") params = {"UnitName" => "管理學院".encode('big5-uao'), "account" => "manage"} uri.query = URI.encode_www_form(params) res = Net::HTTP.get_response(uri) teachers = User.all teachers.each do |hash| # if hash.ntu_seq.present? if hash.user_id.present? # ntu_seq = hash.ntu_seq u_account = hash.user_id conference_xml = Nokogiri::XML( \ # open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=C")) open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&type=C")) #open("http://versatile.management.ntu.edu.tw/publication1/conference/#{ntuseq}.xml")) @conference_papers = conference_xml.xpath("//Paper").map do |cp_node| { author: (cp_node>"Authors").text, year: (cp_node>"PublishYear").text, title: (cp_node>"PaperTitle").text, conference: (cp_node>"PublishOn").text, date: Date::MONTHNAMES[(cp_node>"PublishMonth").text.to_i], location: "#{(cp_node>"Country").text} #{(cp_node>"location").text}", conference_title: (cp_node>"PublishOn").text, remarks: (cp_node>"Remarks").text } end if @conference_papers.present? @conference_papers.each do |b| @conference_paper = WritingConference.new I18n.locale = :zh_tw @conference_paper.authors = b[:author] if b[:title].blank? @conference_paper.paper_title = "No Title Present" else @conference_paper.paper_title = b[:title] end if b[:conference_title].blank? @conference_paper.conference_title = "No Title Present" else @conference_paper.conference_title = b[:conference_title] end @conference_paper.note = b[:remarks] I18n.locale = :en @conference_paper.authors = b[:author] if b[:title].blank? @conference_paper.paper_title = "No Title Present" else @conference_paper.paper_title = b[:title] end if b[:conference_title].blank? @conference_paper.conference_title = "No Title Present" else @conference_paper.conference_title = b[:conference_title] end @conference_paper.note = b[:remarks] @conference_paper.location = b[:location] @conference_paper.year = b[:year] @conference_paper.create_user_id = hash.id @conference_paper.save! end else puts "No conference by Teacher" end end end end def get_journal_paper_data uri = URI("http://ann.cc.ntu.edu.tw/Achv/xmlTeacherData.asp") params = {"UnitName" => "管理學院".encode('big5-uao'), "account" => "manage"} uri.query = URI.encode_www_form(params) res = Net::HTTP.get_response(uri) teachers = User.all teachers.each do |hash| # if hash.ntu_seq.present? if hash.user_id.present? # ntu_seq = hash.ntu_seq u_account = hash.user_id paper_xml = Nokogiri::XML( \ #open("http://versatile.management.ntu.edu.tw/publication1/journal/#{ntuseq}.xml")) # open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=J")) open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&type=J")) @journal_papers = paper_xml.xpath("//Paper").map do |paper_node| { author: (paper_node>"Authors").text, year: (paper_node>"PublishYear").text, title: (paper_node>"PaperTitle").text, journal: (paper_node>"PublishOn").text, volume:(paper_node>"Volume").text, volumeno:(paper_node>"VolumeNo").text, beginpage:(paper_node>"BeginPage").text, endpage:(paper_node>"EndPage").text, subgroup:(paper_node>"subgroup").text, remarks: (paper_node>"Remarks").text, cate: ((paper_node>"subgroup")>"Group").text } end if @journal_papers.present? @journal_papers.each do |b| @journal_paper = WritingJournal.new I18n.locale = :zh_tw @journal_paper.authors = b[:author] if b[:title].blank? @journal_paper.paper_title = "No Title Present" else @journal_paper.paper_title = b[:title] end @journal_paper.journal_title = b[:journal] @journal_paper.note = b[:remarks] I18n.locale = :en @journal_paper.authors = b[:author] if b[:title].blank? @journal_paper.paper_title = "No Title Present" else @journal_paper.paper_title = b[:title] end @journal_paper.journal_title = b[:journal] @journal_paper.note = b[:remarks] @journal_paper.year = b[:year] @journal_paper.vol_no = b[:volumeno] @journal_paper.form_to_start = b[:beginpage] @journal_paper.form_to_end = b[:endpage] if !b[:cate].blank? @level_type = JournalLevelType.where(:key => b[:cate]) if @level_type.present? @journal_paper.journal_level_type_ids = ["#{@level_type.first.id}"] end end @journal_paper.create_user_id = hash.id @journal_paper.save! end else puts "No journal paper by Teacher" end end end end def sync_conference_data @conference_data = WritingConference.where(create_user_id: "#{params[:user_id]}") @conference_data.delete_all @user = User.find("#{params[:user_id]}") # teachers.each do |hash| # if @user.sid.present? if @user.user_id.present? # ntu_seq = @user.sid u_account = @user.user_id conference_xml = Nokogiri::XML( \ # open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=C")) open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&type=C")) #open("http://versatile.management.ntu.edu.tw/publication1/conference/#{ntuseq}.xml")) @conference_papers = conference_xml.xpath("//Paper").map do |cp_node| { author: (cp_node>"Authors").text, year: (cp_node>"PublishYear").text, title: (cp_node>"PaperTitle").text, conference: (cp_node>"PublishOn").text, date: Date::MONTHNAMES[(cp_node>"PublishMonth").text.to_i], location: "#{(cp_node>"Country").text} #{(cp_node>"location").text}", conference_title: (cp_node>"PublishOn").text, remarks: (cp_node>"Remarks").text } end if @conference_papers.present? @conference_papers.each do |b| @conference_paper = WritingConference.new I18n.locale = :zh_tw @conference_paper.authors = b[:author] if b[:title].blank? @conference_paper.paper_title = "No Title Present" else @conference_paper.paper_title = b[:title] end if b[:conference_title].blank? @conference_paper.conference_title = "No Title Present" else @conference_paper.conference_title = b[:conference_title] end @conference_paper.note = b[:remarks] I18n.locale = :en @conference_paper.authors = b[:author] if b[:title].blank? @conference_paper.paper_title = "No Title Present" else @conference_paper.paper_title = b[:title] end if b[:conference_title].blank? @conference_paper.conference_title = "No Title Present" else @conference_paper.conference_title = b[:conference_title] end @conference_paper.note = b[:remarks] @conference_paper.location = b[:location] @conference_paper.year = b[:year] @conference_paper.create_user_id = @user.id @conference_paper.save! end else puts "No conference by Teacher" end end respond_to do |format| format.html { redirect_to request.referer } format.json { render json: {"success"=>true}.to_json} end end def sync_journal_paper_data @journal_data = WritingJournal.where(create_user_id: "#{params[:user_id]}") @journal_data.delete_all @user = User.find("#{params[:user_id]}") # teachers.each do |hash| # if @user.sid.present? if @user.user_id.present? # ntu_seq = @user.sid u_account = @user.user_id paper_xml = Nokogiri::XML( \ #open("http://versatile.management.ntu.edu.tw/publication1/journal/#{ntuseq}.xml")) # open("http://ann.cc.ntu.edu.tw/Achv/xmlPaper.asp?Seq=#{ntu_seq}&type=J")) open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&type=J")) @journal_papers = paper_xml.xpath("//Paper").map do |paper_node| { author: (paper_node>"Authors").text, year: (paper_node>"PublishYear").text, title: (paper_node>"PaperTitle").text, journal: (paper_node>"PublishOn").text, volume:(paper_node>"Volume").text, volumeno:(paper_node>"VolumeNo").text, beginpage:(paper_node>"BeginPage").text, endpage:(paper_node>"EndPage").text, subgroup:(paper_node>"subgroup").text, remarks: (paper_node>"Remarks").text, cate: ((paper_node>"subgroup")>"Group").text } end if @journal_papers.present? @journal_papers.each do |b| @journal_paper = WritingJournal.new I18n.locale = :zh_tw @journal_paper.authors = b[:author] if b[:title].blank? @journal_paper.paper_title = "No Title Present" else @journal_paper.paper_title = b[:title] end @journal_paper.journal_title = b[:journal] @journal_paper.note = b[:remarks] I18n.locale = :en @journal_paper.authors = b[:author] if b[:title].blank? @journal_paper.paper_title = "No Title Present" else @journal_paper.paper_title = b[:title] end @journal_paper.journal_title = b[:journal] @journal_paper.note = b[:remarks] @journal_paper.year = b[:year] @journal_paper.vol_no = b[:volumeno] @journal_paper.form_to_start = b[:beginpage] @journal_paper.form_to_end = b[:endpage] if !b[:cate].blank? @level_type = JournalLevelType.where(:key => b[:cate]) if @level_type.present? @journal_paper.journal_level_type_ids = ["#{@level_type.first.id}"] end end @journal_paper.create_user_id = @user.id @journal_paper.save! end end end respond_to do |format| format.html { redirect_to request.referer } format.json { render json: {"success"=>true}.to_json} end end def sync_book_data @books_data = WritingBook.where(create_user_id: "#{params[:user_id]}") @books_data.delete_all @user = User.find("#{params[:user_id]}") # teachers.each do |hash| # if @user.sid.present? if @user.user_id.present? # ntu_seq = @user.sid u_account = @user.user_id books_xml = Nokogiri::XML( \ # open("http://ann.cc.ntu.edu.tw/Achv/xmlBook.asp?Seq=#{ntu_seq}")) open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=Book&account=#{u_account}")) @books = books_xml.xpath("//Book").map do |book_node| { author: (book_node>"Authors").text, year: (book_node>"PublishYear").text, title: (book_node>"DocTitle").text, remarks: (book_node>"Remarks").text, publisher: (book_node>"Publisher").text, book_title: (book_node>"BookTitle").text } end if @books.present? @books.each do |b| @book = WritingBook.new I18n.locale = :zh_tw @book.authors = b[:author] @book.paper_title = b[:title] @book.book_title = b[:book_title] @book.note = b[:remarks] @book.publisher = b[:publisher] I18n.locale = :en @book.authors = b[:author] @book.paper_title = b[:title] @book.book_title = b[:book_title] @book.note = b[:remarks] @book.publisher = b[:publisher] @book.year = b[:year] @book.create_user_id = @user.id @book.save end end end respond_to do |format| format.html { redirect_to request.referer } format.json { render json: {"success"=>true}.to_json} end end def sync_conference_data_auto @user = User.all @user.each do |user| if user.user_id.present? next if !user.email.include? "ntu.edu.tw" u_account = user.user_id @conference_xml = nil begin timeout(60) do @conference_xml = Nokogiri::XML( \ open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&type=C")) end rescue Timeout::Error next end @conference_papers = @conference_xml.xpath("//Paper").map do |cp_node| { author: (cp_node>"Authors").text, year: (cp_node>"PublishYear").text, title: (cp_node>"PaperTitle").text, conference: (cp_node>"PublishOn").text, date: Date::MONTHNAMES[(cp_node>"PublishMonth").text.to_i], location: "#{(cp_node>"Country").text} #{(cp_node>"location").text}", conference_title: (cp_node>"PublishOn").text, remarks: (cp_node>"Remarks").text } end if @conference_papers.present? WritingConference.delete_all(conditions:{create_user_id: user.id}) @conference_papers.each do |b| @conference_paper = WritingConference.new I18n.locale = :zh_tw @conference_paper.authors = b[:author] if b[:title].blank? @conference_paper.paper_title = "No Title Present" else @conference_paper.paper_title = b[:title] end if b[:conference_title].blank? @conference_paper.conference_title = "No Title Present" else @conference_paper.conference_title = b[:conference_title] end @conference_paper.note = b[:remarks] I18n.locale = :en @conference_paper.authors = b[:author] if b[:title].blank? @conference_paper.paper_title = "No Title Present" else @conference_paper.paper_title = b[:title] end if b[:conference_title].blank? @conference_paper.conference_title = "No Title Present" else @conference_paper.conference_title = b[:conference_title] end @conference_paper.note = b[:remarks] @conference_paper.location = b[:location] @conference_paper.year = b[:year] @conference_paper.create_user_id = user.id @conference_paper.save! end else end end end end def sync_journal_paper_data_auto @user = User.all @user.each do |user| if user.user_id.present? next if !user.email.include? "ntu.edu.tw" u_account = user.user_id @paper_xml = nil begin timeout(60) do @paper_xml = Nokogiri::XML( \ open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=paper&account=#{u_account}&type=J")) end rescue Timeout::Error next end @journal_papers = @paper_xml.xpath("//Paper").map do |paper_node| { author: (paper_node>"Authors").text, year: (paper_node>"PublishYear").text, title: (paper_node>"PaperTitle").text, journal: (paper_node>"PublishOn").text, volume:(paper_node>"Volume").text, volumeno:(paper_node>"VolumeNo").text, beginpage:(paper_node>"BeginPage").text, endpage:(paper_node>"EndPage").text, subgroup:(paper_node>"subgroup").text, remarks: (paper_node>"Remarks").text, cate: ((paper_node>"subgroup")>"Group").text } end if @journal_papers.present? WritingJournal.delete_all(conditions:{create_user_id: user.id}) @journal_papers.each do |b| @journal_paper = WritingJournal.new I18n.locale = :zh_tw @journal_paper.authors = b[:author] if b[:title].blank? @journal_paper.paper_title = "No Title Present" else @journal_paper.paper_title = b[:title] end @journal_paper.journal_title = b[:journal] @journal_paper.note = b[:remarks] I18n.locale = :en @journal_paper.authors = b[:author] if b[:title].blank? @journal_paper.paper_title = "No Title Present" else @journal_paper.paper_title = b[:title] end @journal_paper.journal_title = b[:journal] @journal_paper.note = b[:remarks] @journal_paper.year = b[:year] @journal_paper.vol_no = b[:volumeno] @journal_paper.form_to_start = b[:beginpage] @journal_paper.form_to_end = b[:endpage] if !b[:cate].blank? @level_type = JournalLevelType.where(:key => b[:cate]) if @level_type.present? @journal_paper.journal_level_type_ids = ["#{@level_type.first.id}"] end end @journal_paper.create_user_id = user.id @journal_paper.save! end end puts "Sync "+u_account+"\r\n" end end end def sync_book_data_auto @user = User.all @user.each do |user| if user.user_id.present? next if !user.email.include? "ntu.edu.tw" u_account = user.user_id @books_xml = nil begin timeout(60) do @books_xml = Nokogiri::XML( \ open("http://ann.cc.ntu.edu.tw/Achv/xmlData_useMail.asp?item=Book&account=#{u_account}")) end rescue Timeout::Error next end @books = @books_xml.xpath("//Book").map do |book_node| { author: (book_node>"Authors").text, year: (book_node>"PublishYear").text, title: (book_node>"DocTitle").text, remarks: (book_node>"Remarks").text, publisher: (book_node>"Publisher").text, book_title: (book_node>"BookTitle").text } end if @books.present? WritingBook.delete_all(conditions:{create_user_id: user.id}) @books.each do |b| @book = WritingBook.new I18n.locale = :zh_tw @book.authors = b[:author] @book.paper_title = b[:title] @book.book_title = b[:book_title] @book.note = b[:remarks] @book.publisher = b[:publisher] I18n.locale = :en @book.authors = b[:author] @book.paper_title = b[:title] @book.book_title = b[:book_title] @book.note = b[:remarks] @book.publisher = b[:publisher] @book.year = b[:year] @book.create_user_id = user.id @book.save end end end end end def get_announcement_data uri = URI("https://localhost:8000/announcements.xml") #params = {"UnitName" => "管理學院".encode('big5-uao'), "account" => "manage"} #uri.query = URI.encode_www_form(params) res = Net::HTTP.get_response(uri) @announcement_data = Hash.from_xml(res.body) @announcements = @announcement_data["objects"] @announcements.each do |hash| @bulletin = Bulletin.new I18n.locale = :zh_tw if hash['announcement_title_zh_tw'].blank? @bulletin.title = hash['announcement_title_en'] @bulletin.text = hash['announcement_content_zh_tw'] elsif hash['announcement_title_zh_tw'].blank? && hash['announcement_title_en'].blank? @bulletin.title = "Please Fill the Name" @bulletin.text = hash['announcement_content_zh_tw'] else @bulletin.title = hash['announcement_title_zh_tw'] @bulletin.text = hash['announcement_content_zh_tw'] end I18n.locale = :en if hash['announcement_title_zh_tw'].blank? && hash['announcement_title_en'].blank? @bulletin.title = "Please Fill the Name" @bulletin.text = hash['announcement_content_en'] elsif hash['announcement_title_en'].blank? @bulletin.title = hash['announcement_zh_tw'] @bulletin.text = hash['announcement_content_en'] elsif hash['announcement_title_zh_tw'].blank? @bulletin.title = hash['announcement_title_en'] @bulletin.text = hash['announcement_content_en'] end @bulletin.category_id = "51d2a16438178423c2000001" @bulletin.is_pending = true @bulletin.save! end end end