Я думаю, вам следует проверить, присутствуют ли ключевые слова в 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, и проверять только ту часть, которая содержит фактический текст (или некоторый конкретный или что-то)