Skip to content

Instantly share code, notes, and snippets.

@joslynesser
Created November 16, 2011 01:55
Show Gist options
  • Save joslynesser/1369017 to your computer and use it in GitHub Desktop.
Save joslynesser/1369017 to your computer and use it in GitHub Desktop.
Basic Assistly API Case Export
# Ruby example for exporting Cases to CSV
# requires ruby version 1.9.2
# requires oauth and json gems (gem install oauth json)
require "rubygems"
require "oauth"
require "json"
require "csv"
ASSISTLY_DOMAIN = "domain.assistly.com"
CONSUMER_TOKEN = "aMu4u9pLRfDrxhPVK5yn"
CONSUMER_SECRET = "aLr9MjzowzVwbvREpWhIVQMJQI0G7Pin6KHCoXak"
ACCESS_TOKEN = "avouGxpsJbyIU5viPKOO"
ACCESS_TOKEN_SECRET = "agQY0L2bcbwonZTC4kG5ulZxTMTDW0K0zIyceSuF"
# Perform request, retrying on errors
def request(method, uri)
puts "* requesting #{method.upcase} #{uri}"
response = @access_token.send(method, uri)
json = JSON.parse(response.body)
while response.code.to_s !~ /^2/
puts "* waiting 60 seconds due to an error: #{json['error']}"
sleep(60)
puts "* retrying #{method.upcase} #{uri}"
response = @access_token.send(method, uri)
json = JSON.parse(response.body)
end
json
end
# Build OAuth Consumer/Token for making signed requests
@consumer = OAuth::Consumer.new(
CONSUMER_TOKEN,
CONSUMER_SECRET,
:site => "https://#{ASSISTLY_DOMAIN}",
:scheme => :header
)
@access_token = OAuth::AccessToken.from_hash(
@consumer,
:oauth_token => ACCESS_TOKEN,
:oauth_token_secret => ACCESS_TOKEN_SECRET
)
# Fetch first 100 cases
json = request(:get, "/api/v1/cases.json?count=100")
current_page = json['page']
cases = json['results']
# Open a CSV for writing cases
CSV.open("cases.csv", "wb") do |csv|
while cases && cases.any?
# Write cases to CSV
cases.each do |json|
csv << [json['case']['id'], json['case']['subject']]
end
# Fetch next 100 cases
response = request(:get, "/api/v1/cases.json?count=100&page=#{current_page + 1}")
current_page = response['page']
cases = response['results']
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment