mirror of
https://github.com/discourse/discourse.git
synced 2024-12-25 03:16:19 +08:00
59 lines
1.3 KiB
Ruby
59 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "yaml"
|
|
require "fileutils"
|
|
require_relative "socialcast_api"
|
|
|
|
def load_config(file)
|
|
config = YAML.load_file(File.join(__dir__, file))
|
|
@domain = config["domain"]
|
|
@username = config["username"]
|
|
@password = config["password"]
|
|
end
|
|
|
|
def export
|
|
@api = SocialcastApi.new @domain, @username, @password
|
|
create_dir("output/users")
|
|
create_dir("output/messages")
|
|
export_users
|
|
export_messages
|
|
end
|
|
|
|
def export_users(page = 1)
|
|
users = @api.list_users(page: page)
|
|
return if users.empty?
|
|
users.each do |user|
|
|
File.open("output/users/#{user["id"]}.json", "w") do |f|
|
|
puts user["contact_info"]["email"]
|
|
f.write user.to_json
|
|
f.close
|
|
end
|
|
end
|
|
export_users page + 1
|
|
end
|
|
|
|
def export_messages(page = 1)
|
|
messages = @api.list_messages(page: page)
|
|
return if messages.empty?
|
|
messages.each do |message|
|
|
File.open("output/messages/#{message["id"]}.json", "w") do |f|
|
|
title = message["title"]
|
|
title = message["body"] if title.empty?
|
|
title = title.split('\n')[0][0..50] unless title.empty?
|
|
|
|
puts "#{message["id"]}: #{title}"
|
|
f.write message.to_json
|
|
f.close
|
|
end
|
|
end
|
|
export_messages page + 1
|
|
end
|
|
|
|
def create_dir(path)
|
|
path = File.join(__dir__, path)
|
|
FileUtils.mkdir_p(path) unless File.directory?(path)
|
|
end
|
|
|
|
load_config ARGV.shift
|
|
export
|