[Rails] Check request is_bot or not

def is_bot?(request)
 agent = request.env["HTTP_USER_AGENT"]
 # agent = request.user_agent
 matches = nil
 matches = agent.match(/(facebook|postrank|voyager|twitterbot|googlebot|slurp|butterfly|pycurl|tweetmemebot|metauri|evrinid|reddit|digg)/mi) if agent
 if ( agent.nil? or matches)
   return true
 else
   return false
 end
end

Another code:

def is_bot?
  http_user_agent = request.env["HTTP_USER_AGENT"] || ""

  begin
    ua = ""
    ua = URI.decode(http_user_agent)
  rescue
  end

  browser = Browser.new(ua: ua)
  return browser.bot?
end

Example:

1 example Googlebot smartphone user-agent

Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) 
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 
Mobile Safari/537.36 (compatible; Googlebot/2.1; +
http://www.google.com/bot.html)

We use agent.match(/(facebook|twitterbot|googlebot)/mi), it will search in user-agent string, find text match googlebot. 

/mi: search downcase and upcase

without /mi: search exactly with googlebot (Googlebot is not match)

Advertisements