groovehq icon indicating copy to clipboard operation
groovehq copied to clipboard

I want to export my GrooveHQ data NOW ... actually a quick solution

Open jayjlawrence opened this issue 6 years ago • 2 comments

Now not really an issue ... here's a quick solution to getting your GrooveHQ data out of the system asap. I wrote it up here so you may consider incorporating into the gem.

In a file called groovehq_private_token put the value for Private Token in API Settings:

settings

I put this in my Gemfile

source 'https://rubygems.org'
gem 'groovehq', path: 'groovehq'

And this in my dump_groovehq.rb file

require 'groovehq'
require 'pp'

export_dir = "groovehq_dump"
export_all = true # false exports just tickets and skips config
export_attachments = true # false skips exporting any attachment info
collapse_single_message = true # If just on message on ticket put everything in the ticket directory

client = GrooveHQ::Client.new(File.read('groovehq_private_token').chomp)

Dir.mkdir export_dir unless Dir.exist? export_dir

if export_all

  subdir = "#{export_dir}/config"
  Dir.mkdir subdir unless Dir.exist? subdir

  client.agents.each {|agent|
    File.open("#{subdir}/agent-#{agent.id}.yml", "w") {|f| f.puts agent.to_yaml}
  }

  client.customers.each {|customer|
    File.open("#{subdir}/customer-#{customer.id}.yml", "w") {|f| f.puts customer.to_yaml}
  }

  client.folders.each {|folder|
    File.open("#{subdir}/folder-#{folder.id}.yml", "w") {|f| f.puts folder.to_yaml}
  }

  client.groups.each {|group|
    File.open("#{subdir}/group-#{group.id}.yml", "w") {|f| f.puts group.to_yaml}
  }

  client.mailboxes.each {|mailbox|
    File.open("#{subdir}/mailbox-#{mailbox.id}.yml", "w") {|f| f.puts mailbox.to_yaml}
  }
end

client.tickets(per_page: 50).each {|ticket|

  puts "Exporting ticket #{ticket.number}"
  ticketdir = "#{export_dir}/ticket-#{ticket.number}"
  Dir.mkdir ticketdir unless Dir.exist? ticketdir

  File.open("#{ticketdir}/ticket.yml", "w") {|f| f.puts ticket.to_yaml}

  ticket.rels[:messages] && ticket.rels[:messages].get.each_with_index {|message, message_index|

    msgdir = collapse_single_message && ticket.message_count==1 ? ticketdir : "#{ticketdir}/#{message_index}"
    Dir.mkdir msgdir unless Dir.exist? msgdir

    File.open("#{msgdir}/message.yml", "w") {|f| f.puts message.to_yaml}
    File.open("#{msgdir}/message.txt", "w") {|f| f.puts message.plain_text_body}
    File.open("#{msgdir}/message.html", "w") {|f| f.puts message.body} if message.body != message.plain_text_body || message.body.strip.squeeze.downcase != message.plain_text_body.strip.squeeze.downcase

    export_attachments && message.rels[:attachments] && message.rels[:attachments].get.each {|attachment|
      File.open("#{msgdir}/attachment.yml", "w") {|f| f.puts attachment.to_yaml}
      File.open("#{msgdir}/#{attachment.filename}", "w") {|f|
        begin
          response = HTTParty.get(attachment.url)
        rescue
          STDERR.puts "Issue fetching attachment #{msgdir}/#{attachment.filename} - skipping"
          next
        end
        f.binmode
        f.write response.body
      }
    }
  }

}

download dump_groovehq.rb.txt Forced to use .txt extension

If you're fairly new to Ruby you will want to know:

  • create the 3 files in the same directory
  • run the command bundle install
    • permissions problem? run sudo bundle install
  • adjust the export options at top of script
  • run the script with the command bundle exec ruby dump_groovehq.rb
  • go have coffee

jayjlawrence avatar Jun 07 '18 15:06 jayjlawrence

Thanks nice! Mind creating a PR? Am 7. Juni 2018, 17:25 +0200 schrieb jayjlawrence [email protected]:

Now not really an issue ... here's a quick solution to getting your GrooveHQ data out of the system asap. I wrote it up here so you may consider incorporating into the gem. In a file called groovehq_private_token put the value for Private Token in API Settings: I put this in my Gemfile source 'https://rubygems.org' gem 'groovehq', path: 'groovehq' And this in my dump_groovehq.rb file require 'groovehq' require 'pp'

export_dir = "groovehq_dump" export_all = true # false exports just tickets and skips config export_attachments = true # false skips exporting any attachment info collapse_single_message = true # If just on message on ticket put everything in the ticket directory

client = GrooveHQ::Client.new(File.read('groovehq_private_token').chomp)

Dir.mkdir export_dir unless Dir.exist? export_dir

if export_all

subdir = "#{export_dir}/config" Dir.mkdir subdir unless Dir.exist? subdir

client.agents.each {|agent| File.open("#{subdir}/agent-#{agent.id}.yml", "w") {|f| f.puts agent.to_yaml} }

client.customers.each {|customer| File.open("#{subdir}/customer-#{customer.id}.yml", "w") {|f| f.puts customer.to_yaml} }

client.folders.each {|folder| File.open("#{subdir}/folder-#{folder.id}.yml", "w") {|f| f.puts folder.to_yaml} }

client.groups.each {|group| File.open("#{subdir}/group-#{group.id}.yml", "w") {|f| f.puts group.to_yaml} }

client.mailboxes.each {|mailbox| File.open("#{subdir}/mailbox-#{mailbox.id}.yml", "w") {|f| f.puts mailbox.to_yaml} } end

client.tickets(per_page: 50).each {|ticket|

puts "Exporting ticket #{ticket.number}" ticketdir = "#{export_dir}/ticket-#{ticket.number}" Dir.mkdir ticketdir unless Dir.exist? ticketdir

File.open("#{ticketdir}/ticket.yml", "w") {|f| f.puts ticket.to_yaml}

ticket.rels[:messages] && ticket.rels[:messages].get.each_with_index {|message, message_index|

msgdir = collapse_single_message && ticket.message_count==1 ? ticketdir : "#{ticketdir}/#{message_index}" Dir.mkdir msgdir unless Dir.exist? msgdir

File.open("#{msgdir}/message.yml", "w") {|f| f.puts message.to_yaml} File.open("#{msgdir}/message.txt", "w") {|f| f.puts message.plain_text_body} File.open("#{msgdir}/message.html", "w") {|f| f.puts message.body} if message.body != message.plain_text_body || message.body.strip.squeeze.downcase != message.plain_text_body.strip.squeeze.downcase

export_attachments && message.rels[:attachments] && message.rels[:attachments].get.each {|attachment| File.open("#{msgdir}/attachment.yml", "w") {|f| f.puts attachment.to_yaml} File.open("#{msgdir}/#{attachment.filename}", "w") {|f| begin response = HTTParty.get(attachment.url) rescue STDERR.puts "Issue fetching attachment #{msgdir}/#{attachment.filename} - skipping" next end f.binmode f.write response.body } } }

} download dump_groovehq.rb.txt Forced to use .txt extension If you're fairly new to Ruby you will want to know:

• create the 3 files in the same directory • run the command bundle install

• permissions problem? run sudo bundle install

• adjust the export options at top of script • run the script with the command bundle exec ruby dump_groovehq.rb • go have coffee

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

Fodoj avatar Jun 07 '18 15:06 Fodoj

Hi! Just a reminder - would you have time to commit it as part of readme or examples/ dir? :)

Fodoj avatar Nov 28 '18 05:11 Fodoj