orbit-4-2/lib/remote_announcement.rb

181 lines
6.4 KiB
Ruby

require 'mongo'
require 'open-uri'
require 'json'
require 'date'
@db = Mongo::Connection.new("localhost", 27017).db("fgu_new")
@coll_bulletin = @db["bulletins"]
@bulletin_links = @db["bulletin_links"]
@coll_cat = @db["categories"]
@updated_bulletins = Array.new
bulletin_module_id = @db["module_apps"].find(key: "announcement").first
coll_bulletin = @db["bulletins"]
@coll_buffer_cat = @db["buffer_categories"]
coll_cat = @db["categories"]
coll_bulletin_cat = @db["categories"].find(module_app_id: bulletin_module_id["_id"])
@categories = coll_bulletin_cat.find().to_a.inject({}) do |categories, category|
categories[category['key']] = category['_id']
categories
end
# @categories = @coll_cat.find().to_a.inject({}) do |categories, category|
# categories[category['key']] = category['_id']
# categories
# end
def save_bulletin_links bulletin_id, title, url, c_time
title = "Link" if title == ''
bulletin_link = {
title: {"zh_tw" => title, "en" => title },
url: url,
bulletin_id: bulletin_id,
created_at: c_time,
updated_at: c_time
}
@bulletin_links.save(bulletin_link)
end
def get_remote_bulletins_json(url)
data = ""
open(url){|f| f.each_line {|line| data << line} }
bulletins = JSON.parse data
bulletins.each do |b|
lang = b[1]=='zh-tw' ? "zh_tw".to_sym : "en".to_sym
next if b[2]==""
next if @categories["#{b[7]}"].nil?
if b[5]=="" and b[4]!=""
b[5]=b[4]
b[4]=""
end
bulletin = { _type: "Bulletin",
postdate: Time.parse(b[8]),
created_at: Time.parse(b[8]),
updated_at: Time.parse(b[8]),
is_checked: true,
is_pending: false,
is_rejected: false,
category_id: @categories["#{b[7]}"],
title: {lang => b[2]},
subtitle: {lang => b[4]},
text: {lang => b[5]},
available_for_zh_tw: true,
available_for_en: true,
create_user_id: "",
public: true,
sn: b[0],
site: b[9],
site_id: b[10],
is_top: false,
is_hot: false,
is_hidden: false }
this_bulletin = @coll_bulletin.find_one(:$and => [{ :sn => bulletin[:sn]},{ :site => bulletin[:site]}])
@updated_bulletins.push({:sn => bulletin[:sn],:site => bulletin[:site] })
# p bulletin
unless this_bulletin
bs = @coll_bulletin.save(bulletin)
buffer_cat = { _type: "BufferCategory",
category_id: @categories["#{b[7]}"],
categorizable_type: "Bulletin",
categorizable_id: bs }
@coll_buffer_cat.save(buffer_cat)
#files
(10..14).each do |i|
ta = i + 5
save_bulletin_links( bulletin[:_id], b[ta], b[i], bulletin[:created_at] ) if b[i] != ''
end
#url
save_bulletin_links( bulletin[:_id], '', b[20], bulletin[:created_at] ) if b[20] != ''
# puts "Inserted "+lang.to_s+" "+bulletin[:title][lang]
# p bulletin
else
@coll_bulletin.update(
{"_id"=>this_bulletin["_id"]},
{
:_type => "Bulletin",
:postdate => bulletin[:postdate],
:created_at => bulletin[:created_at],
:updated_at => bulletin[:updated_at],
:is_checked => this_bulletin["is_checked"],
:is_pending => this_bulletin["is_pending"],
:is_rejected => this_bulletin["is_rejected"],
:category_id => bulletin[:category_id],
:title => bulletin[:title],
:subtitle => bulletin[:subtitle],
:text => bulletin[:text],
:available_for_zh_tw => this_bulletin["available_for_zh_tw"],
:available_for_en => this_bulletin["available_for_en"],
:create_user_id => "",
:public => this_bulletin["public"],
:sn => bulletin[:sn],
:site => bulletin[:site],
:site_id => bulletin[:site_id],
:is_top => this_bulletin["is_top"],
:is_hot => this_bulletin["is_hot"],
:is_hidden => this_bulletin["is_hidden"]
})
@coll_buffer_cat.remove(categorizable_id: BSON::ObjectId(this_bulletin["_id"].to_s) )
buffer_cat = { _type: "BufferCategory",
category_id: bulletin[:category_id],
categorizable_type: "Bulletin",
categorizable_id: this_bulletin["_id"] }
@coll_buffer_cat.save(buffer_cat)
@bulletin_links.remove(bulletin_id: BSON::ObjectId(this_bulletin["_id"].to_s) )
#files
(10..14).each do |i|
ta = i + 5
save_bulletin_links( this_bulletin["_id"], b[ta], b[i], this_bulletin["created_at"] ) if b[i] != ''
end
#url
save_bulletin_links( this_bulletin["_id"], '', b[20], bulletin[:created_at] ) if b[20] != ''
# puts "Updated "+lang.to_s+" "+bulletin[:title][lang]
# p this_bulletin["_id"]
end
end
end
get_remote_bulletins_json("http://president.fgu.edu.tw/remote_annoucement/get_news2.php")
get_remote_bulletins_json("http://car.fgu.edu.tw/remote_annoucement/get_news2.php")
# Delete bulletins that had been removed form remote sites
# Find all remote bulletins on server
local_bulletins = @coll_bulletin.find({ site: { :$exists => true } })
# Check if each remote bulletins on server exist in the updated bulletins
local_bulletins.each do |local_bulletin|
result = @updated_bulletins.select {|remote_bulletin| remote_bulletin[:sn] == local_bulletin["sn"] and remote_bulletin[:site] == local_bulletin["site"]}
if result.length == 0
@coll_bulletin.remove(:$and => [{ :sn => local_bulletin["sn"]},{ :site => local_bulletin["site"]}])
p "Delete: "+local_bulletin["site"]+"-"+local_bulletin["sn"]
end
end