Import Announcement from RSS2

This commit is contained in:
manson 2014-05-30 19:32:51 +08:00
parent b412239f3c
commit f98dc053f0
3 changed files with 129 additions and 1 deletions

View File

@ -0,0 +1,126 @@
# encoding: utf-8
require "net/http"
require "uri"
require 'json'
class Admin::ImportController < OrbitAdminController
def rss2_news
@url = params['url']
uri = URI.parse(@url)
@host = uri.host
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
data = response.body
data = JSON.parse(data)
@categories = data['categories']
@data = data['data']
@xxx = []
@new_category_ids = {}
l = I18n.locale
I18n.locale = :zh_tw
module_id = ModuleApp.where(:key=>"announcement").first.id
@categories.each do |category|
x = Category.where(:title => category["zh_tw"]).first
if x.nil?
@xxx << category
cat = Category.new
titles = {}
@site_valid_locales.each do |locale|
titles[locale] = category[locale.to_s]
end
cat.title_translations = titles
cat.module_app_id = module_id
cat.save!
@new_category_ids[category["id"]] = cat.id
else
@new_category_ids[category["id"]] = x.id
end
end
@user = User.where(:user_name => "rulingcom").first
num = 0
@data.each do |row|
bulletin = Bulletin.new
bulletin.update_user = @user
bulletin.title_translations = row['Title']
bulletin.subtitle_translations = row['Summary']
next if row['Title']==[] and row['Summary']==[] and row['Content']==[]
@site_valid_locales.each do |locale|
locale = locale.to_s
if row['Content'][locale]=="" and row['Summary'][locale]!=""
row['Content'][locale] = row['Summary'][locale]
row['Summary'][locale] = " "
end
temp = row['Content'][locale]
urls = Nokogiri::HTML(temp).css("img").map do |link|
if URI.parse(link.attr("src")).host == @host
link.attr("src")
end
end
urls.each do |url|
next if url.nil?
a = Asset.new
a.remote_data_url = url
a.title_translations = {"en" => a.data.filename, "zh_tw" => a.data.filename}
a.save!
@user.assets << a
temp.gsub!(CGI::escapeHTML(url), a.data.to_s)
end
row['Content'][locale] = temp
end
bulletin.text_translations = row['Content']
bulletin.category = Category.find(@new_category_ids[row["Category"]])
bulletin.view_count = row["Visits"].blank? ? 0 : row["Visits"]
bulletin.postdate = row["PostDate"]
bulletin.deadline = row['Deadline']
bulletin.remote_image_url = row["Pic"] if row["Pic"]
if row["URL"] && row['URL'] != ""
bl = BulletinLink.new
bl.url = row["URL"]
bl.title_translations = {"en" => "Link", "zh_tw" => "Link"}
bl.save!
bulletin.bulletin_links << bl
end
row['files'].each do |f|
bf = BulletinFile.new
if f['url'].split('title=').size == 1
f['url'] = f['url']+"檔案下載"
end
f['title'] = "檔案下載" if f['title'].blank?
bf.remote_file_url = f['url']
bf.title_translations = {"en" => f['title'], "zh_tw" => f['title']}
bf.save!
# Rename uploaded file
file_ext = File.extname(f['url'].split('&')[0])
file = File.new("tmp/uploads/#{bf.title}#{file_ext}","w+b")
file.write(bf.file.read)
bf.file.cache!(file)
bf.save!
bulletin.bulletin_files << bf
File.delete(file)
end
bulletin.save!
end
I18n.locale = l
redirect_to('/admin/announcements')
end
end

View File

@ -12,7 +12,7 @@
end
def to_param
(self.slug_title.gsub(/[ "'*@#$%^&()+=;:.,?>|\\<~_!:,、。!?;「」〈〉【】/]/,'-')+"-"+self.uid).gsub(/-{2,}/,'-') rescue "-"+self.uid
(self.slug_title.gsub(/[ "'*@#$%^&()+=;:.,?>|\\\/<~_!:,、。!?;「」〈〉【】/]/,'-')+"-"+self.uid).gsub(/-{2,}/,'-') rescue "-"+self.uid
end
private

View File

@ -195,6 +195,8 @@ Orbit::Application.routes.draw do
end
get 'design_list' => 'designs#design_list'
get 'module_store' => 'module_store#index'
get "import/rss2_news" => "import#rss2_news"
end
get 'mobile', to: 'pages#home'