Проверьте, доступны ли определенные ключевые слова в электронной почте пользователей, используя gmail api в ruby ​​on rails - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь проверить / отфильтровать входящие электронные письма пользователей и проверить ключевые слова "предложение" и "письмо"

при вызове сообщений в gmail api возвращает идентификатор сообщения и потоки, которые можно использовать для получения содержимого сообщения, которое я добавил в массив из моего примера ниже

def keyword_check
  client = Signet::OAuth2::Client.new(access_token: session[:access_token])
  service = Google::Apis::GmailV1::GmailService.new
  service.authorization = client
  messages = service.list_user_messages('me')
  @messages_json = []
  messages.messages.each do |m|
    response = HTTParty.get("https://www.googleapis.com/gmail/v1/users/me/messages/#{m.id}?access_token=#{session[:access_token]}")
    res = JSON.parse(response.body)
    @messages_json << res
  end 

  filter = HTTParty.get("https://www.googleapis.com/gmail/v1/users/me/messages?q=offer?access_token=#{session[:access_token]}")
  mes = JSON.parse(filter.body)

  render json: @messages_json.to_json
end

это возвращает все сообщения в массиве, но мне трудно фильтровать массив и проверять конкретные ключевые слова и возвращать как логическое значение true или false, так и само сообщение в массиве отдельно?

1 Ответ

0 голосов
/ 20 июня 2019

Я думаю, вам следует проверить, присутствуют ли ключевые слова в response.body, прежде чем добавлять их в массив:

def keyword_check
  client = Signet::OAuth2::Client.new(access_token: session[:access_token])
  service = Google::Apis::GmailV1::GmailService.new
  service.authorization = client
  messages = service.list_user_messages('me')
  @messages_json = []
  messages.messages.each do |m|
    response = HTTParty.get("https://www.googleapis.com/gmail/v1/users/me/messages/#{m.id}?access_token=#{session[:access_token]}")
    res = JSON.parse(response.body)
    @messages_json << res if matches_keywords(response.body)
  end 

  filter = HTTParty.get("https://www.googleapis.com/gmail/v1/users/me/messages?q=offer?access_token=#{session[:access_token]}")
  mes = JSON.parse(filter.body)

  render json: @messages_json.to_json
end

def matches_keywords content
   return true if content.include?('offer')
   return true if content.include?('letter')
   return false
end

Редактировать: Имейте в виду, что тело, вероятно, содержит все форматирование HTML, код CSS и так далее ... предположим, например, что есть правило CSS с 'letter-spacing', новая функция всегда будет возвращать true, поэтому, пожалуйста, проверьте, вместо этого вы можете получить текстовый контент. Для этого ознакомьтесь с документацией по API Gmail.

Другой подход может заключаться в том, чтобы использовать Kaminara (или его эквивалент), чтобы действительно погрузиться в структуру HTML, и проверять только ту часть, которая содержит фактический текст (или некоторый конкретный или что-то)

...