forgeplus/app/tasks/sync_forums_rake.rb

57 lines
1.9 KiB
Ruby

require 'uri'
require 'net/http'
class SyncForumsRake
# 运行示例: bundle exec rails runner "SyncForumsRake.new.call()"
def call
SyncLog.sync_log("==========begin_to_sync_forums=============")
begin
# url = "https://www.trustie.net/sync_forges/get_forums" #trustie上的相关路由
main_url = "https://www.trustie.net"
url = "#{main_url}/sync_forges/get_forums"
uri = URI.parse(url)
http = Net::HTTP.new(uri.hostname, uri.port)
http.use_ssl = main_url.include?("https")
headers = { "Content-Type" => "application/json" }
response = http.get(uri.path, headers)
# response = http.send_request('GET', uri.path,{'Content-Type' => 'application/json'})
if response.code == '200'
target_jsons = eval(response.body)
create_target(target_jsons[:all_forums], main_url)
else
SyncLog.sync_log("==========sync_forums_to_forge_failed============")
end
rescue => e
SyncLog.sync_log("==========sync_forums_to_forge_failed============errors:#{e}")
end
end
def create_target(targets, main_url)
curreunt_sections = ForumSection.all
positions = curreunt_sections.pluck(:position).select { |a| a.is_a? Integer }
positions = positions.max.to_i
targets.each_with_index do |t, index|
section_params = {
id: t[:id],
title: t[:name],
position: positions + index + 1,
description: t[:description],
user_id: t[:creator_id]
}
if curreunt_sections.exists?(t[:id])
current_section = curreunt_sections.where(id: t[:id]).first
if current_section.update_attributes(section_params)
SyncMemosJob.perform_later(t[:id], main_url)
end
else
section = ForumSection.new(section_params)
if section.save!
SyncMemosJob.perform_later(section.id, main_url)
end
end
end
end
end