orbit-basic/vendor/built_in_modules/news/lib/tasks/nccu_news_data.rake

108 lines
3.3 KiB
Ruby

# encoding: utf-8
require 'open-uri'
require 'tempfile'
require 'nokogiri'
require 'csv'
namespace :nccu_data do
desc "load nccu data from csv"
task :setup_0918_news => :environment do
def null_or_val(str)
# binding.pry
if str == "NULL"
return nil
else
if str.class.to_s == "String"
return str.force_encoding("utf-8")
else
return str
end
end
end
# def get_file(str)
# default_base = "http://secrt.nccu.edu.tw/newsimages/"
# path = null_or_val(str)
# file = nil
# if !path.nil?
# # binding.pry
# file = Tempfile.new(str)
# full_path = ""
# begin
# full_path = default_base+path
# opened = open(full_path)
# file.binmode
# open(url, headers) { |data| file.write data.read }
# rescue Exception => e
# case e.message
# when /404/ then puts "Str:#{str} 404"
# else
# e.to_s
# end
# return nil
# end
# binding.pry
# abort('Debug')
# end
# return file
# end
NewsBulletin.destroy_all
type={
1 =>NewsBulletinCategory.first({conditions:{key: "administration"}}),
2 =>NewsBulletinCategory.first({conditions:{key: "People"}}),
3 =>NewsBulletinCategory.first({conditions:{key: "campus_life"}}),
4 =>NewsBulletinCategory.first({conditions:{key: "academics"}}),
6 =>NewsBulletinCategory.first({conditions:{key: "alumni"}}),
8 =>NewsBulletinCategory.first({conditions:{key: "Statement"}}),
11 =>NewsBulletinCategory.first({conditions:{key: "International"}})
}
counter = 0
CSV.foreach("vendor/built_in_modules/news/lib/nccu_news20120918.csv") do |row|
# news_id,uid,type_id,news_title,news_subtitle,news_content,news_posttime,news_overtime,news_editor,news_units,news_type,news_language,news_frontshow,news_check,news_head,news_pic,news_hit
if counter >=1
csv_title = ""
csv_subtitle = ""
csv_text = ""
case row[11]
when "1" #zh_tw
csv_title = {:zh_tw=>(null_or_val(row[3]) rescue nil),:en=>nil}
csv_subtitle = {:zh_tw=>(null_or_val(row[4]) rescue nil),:en=>nil}
csv_text = {:zh_tw=>(null_or_val(row[5]) rescue nil),:en=>nil}
when "2" #en
csv_title = {:zh_tw=>nil,:en=>(null_or_val(row[3]) rescue nil)}
csv_subtitle = {:zh_tw=>nil,:en=>(null_or_val(row[4]) rescue nil)}
csv_text = {:zh_tw=>nil,:en=>(null_or_val(row[5]) rescue nil)}
end
data = {:title_translations=> csv_title,
:subtitle_translations=>csv_subtitle,
:text_translations=>csv_text,
:postdate=>(Date.parse(row[6]) rescue nil),
:deadline=>(Date.parse(row[7]) rescue nil),
:news_bulletin_category_id=> type[(null_or_val(row[2].to_i))].id,
:view_count => (row[16].to_i rescue 0)
}
news_bulletin = NewsBulletin.new(data.merge({:is_checked=> true,:is_pending=>false,:public=>true}))
# get_file(row[15])
news_bulletin.save
#p bulletin
end
counter+=1
end
NewsBulletin.all.each{|t| t.save}
end
end