Skip to content

Instantly share code, notes, and snippets.

@jasmosez
Last active January 28, 2020 20:14
Show Gist options
  • Save jasmosez/02a538fe725a5404df8e2c3cb00ea6d9 to your computer and use it in GitHub Desktop.
Save jasmosez/02a538fe725a5404df8e2c3cb00ea6d9 to your computer and use it in GitHub Desktop.
def get_messages(daysago = 30, max_results = 500)
puts "here we go"
t1 = Time.now
after_date = daysago(daysago)
# Initialize the API
service = Google::Apis::GmailV1::GmailService.new
# service.client_options.application_name = APPLICATION_NAME
service.authorization = self.fresh_token
user_id = "me"
next_page = nil
error_counter = 0
result_counter = 0
error_ids = []
messages_array = []
message_hashes = []
begin
puts "Fetching page of emails"
result = service.list_user_messages(user_id, max_results: max_results, page_token: next_page, q: "after:#{after_date}")
# gather ID's for a batch
ids = result.messages.map do |message|
message.id
end
service.batch do |service|
puts "batching ids"
ids.each do |id|
service.get_user_message(user_id, id, format: 'metadata') do |res, err|
if err
# Handle error
# puts "Error"
error_ids << id
error_counter += 1
else
# call to get messages. 100 per page
messages_array << res
result_counter += 1
end
end
end
end # service.batch
next_page = result.next_page_token
end while next_page
t2 = Time.now
delta = t2 - t1
puts error_ids
puts "#{error_counter} errors"
puts "#{result_counter} results"
puts "#{delta} sec"
puts "BATCHING COMPLETE"
puts "---------------------------------"
return_array = messages_array.map do |message|
Message.new(Message.make_message_hash(message, self))
end
t3 = Time.now
delta2 = t3 - t2
delta_total = t3 - t1
puts "MESSAGE INITIALIZING COMPLETE"
puts "#{delta2} sec"
puts "---------------------------------"
puts "TOTAL FETCH: #{delta_total} sec"
puts "---------------------------------"
return_array
end # def get_messages
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment