class Udger::UaParser
Attributes
db[RW]
object[RW]
ua_string[RW]
Public Class Methods
new(db, ua_string, crawler: true, client: true, os: true, device: true, device_market: true)
click to toggle source
Calls superclass method
Udger::BaseParser::new
# File lib/udger/ua_parser.rb, line 5 def initialize(db, ua_string, crawler: true, client: true, os: true, device: true, device_market: true) super(db) @match_crawler = crawler @match_client = client @match_os = os @match_device = device @match_device_market = device_market @ua_string = ua_string @object = UserAgent.new @os_id = 0 @client_id = 0 @client_class_id = -1 @deviceclass_id = 0 end
Public Instance Methods
parse()
click to toggle source
# File lib/udger/ua_parser.rb, line 22 def parse return unless ua_string object.ua_string = ua_string crawler_data = @match_crawler ? parse_crawler : [] if !crawler_data.empty? format_crawler_data crawler_data[0] else parse_client if @match_client if @match_os || @match_device_market parse_os parse_client_os end parse_device if @match_device devise_market_name if @match_device_market end end
Private Instance Methods
devise_market_name()
click to toggle source
# File lib/udger/ua_parser.rb, line 192 def devise_market_name return unless object.os_family_code # TODO: santize code query = "SELECT id,regstring FROM udger_devicename_regex WHERE ((os_family_code='" + object.os_family_code + "' AND os_code='-all-') OR (os_family_code='" + object.os_family_code + "' AND os_code='" + object.os_code + "')) ORDER BY sequence" regexp_parse(query, false) do |match, result| sub_query = "SELECT marketname,brand_code,brand,brand_url,icon,icon_big FROM udger_devicename_list JOIN udger_devicename_brand ON udger_devicename_brand.id=udger_devicename_list.brand_id WHERE regex_id=? and code = ? COLLATE NOCASE" qc = db.execute(sub_query, result['id'], match[0]) unless qc.empty? res = qc[0] object.device_marketname = res['marketname'] object.device_brand = res['brand'] object.device_brand_code = res['brand_code'] object.device_brand_homepage = res['brand_url'] object.device_brand_icon = res['icon'] object.device_brand_icon_big = res['icon_big'] object.device_brand_info_url = 'https://udger.com/resources/ua-list/devices-brand-detail?brand=' + res['brand_code'] break end end end
format_crawler_data(result)
click to toggle source
# File lib/udger/ua_parser.rb, line 50 def format_crawler_data(result) @client_class_id = 99 @object.ua_class = 'Crawler' @object.ua_class_code = 'crawler' @object.ua = result['name'] @object.ua_version = result['ver'] @object.ua_version_major = result['ver_major'] @object.ua_family = result['family'] @object.ua_family_code = result['family_code'] @object.ua_family_homepage = result['family_homepage'] @object.ua_family_vendor = result['vendor'] @object.ua_family_vendor_code = result['vendor_code'] @object.ua_family_vendor_homepage = result['vendor_homepage'] @object.ua_family_icon = result['family_icon'] @object.ua_family_info_url = "https://udger.com/resources/ua-list/bot-detail?bot=#{result['family']}#id#{result['botid']}" @object.crawler_last_seen = result['last_seen'] @object.crawler_category = result['crawler_classification'] @object.crawler_category_code = result['crawler_classification_code'] @object.crawler_respect_robotstxt = result['respect_robotstxt'] end
parse_client()
click to toggle source
# File lib/udger/ua_parser.rb, line 71 def parse_client query = "SELECT class_id,client_id,regstring,name,name_code,homepage,icon,icon_big,engine,vendor,vendor_code,vendor_homepage,uptodate_current_version,client_classification,client_classification_code FROM udger_client_regex JOIN udger_client_list ON udger_client_list.id=udger_client_regex.client_id JOIN udger_client_class ON udger_client_class.id=udger_client_list.class_id ORDER BY sequence ASC" regexp_parse(query) do |match, result| @client_id = result['client_id'] @client_class_id = result['class_id'] object.ua_class = result['client_classification'] object.ua_class_code = result['client_classification_code'] if match[0].is_a? Array string = match[0][0] object.ua = "#{result['name']} #{string}" object.ua_version = string object.ua_version_major = string.split('.')[0] else object.ua = result['name'] end object.ua_uptodate_current_version = result['uptodate_current_version'] object.ua_family = result['name'] object.ua_family_code = result['name_code'] object.ua_family_homepage = result['homepage'] object.ua_family_vendor = result['vendor'] object.ua_family_vendor_code = result['vendor_code'] object.ua_family_vendor_homepage = result['vendor_homepage'] object.ua_family_icon = result['icon'] object.ua_family_icon_big = result['icon_big'] object.ua_family_info_url = 'https://udger.com/resources/ua-list/browser-detail?browser=' + result['name'] object.ua_engine = result['engine'] end end
parse_client_os()
click to toggle source
# File lib/udger/ua_parser.rb, line 128 def parse_client_os return if !@os_id.zero? || @client_id.zero? query = 'SELECT os_id,family,family_code,name,name_code,homepage,icon,icon_big,vendor,vendor_code,vendor_homepage FROM udger_client_os_relation JOIN udger_os_list ON udger_os_list.id=udger_client_os_relation.os_id WHERE client_id=?' data = db.execute(query, @client_id) return if data.empty? result = data[0] @os_id = result['os_id'] object.os = result['name'] object.os_code = result['name_code'] object.os_homepage = result['homepage'] object.os_icon = result['icon'] object.os_icon_big = result['icon_big'] object.os_info_url = "https://udger.com/resources/ua-list/os-detail?os=#{result['name']}" object.os_family = result['family'] object.os_family_code = result['family_code'] object.os_family_vendor = result['vendor'] object.os_family_vendor_code = result['vendor_code'] object.os_family_vendor_homepage = result['vendor_homepage'] end
parse_crawler()
click to toggle source
# File lib/udger/ua_parser.rb, line 42 def parse_crawler query = "SELECT udger_crawler_list.id as botid,name,ver,ver_major,last_seen,respect_robotstxt,family,family_code,family_homepage,family_icon,vendor,vendor_code,vendor_homepage,crawler_classification,crawler_classification_code FROM udger_crawler_list LEFT JOIN udger_crawler_class ON udger_crawler_class.id=udger_crawler_list.class_id WHERE ua_string=?" db.execute(query, ua_string) end
parse_device()
click to toggle source
# File lib/udger/ua_parser.rb, line 153 def parse_device query = 'SELECT deviceclass_id,regstring,name,name_code,icon,icon_big FROM udger_deviceclass_regex JOIN udger_deviceclass_list ON udger_deviceclass_list.id=udger_deviceclass_regex.deviceclass_id ORDER BY sequence ASC' regexp_parse(query) do |_match, result| @deviceclass_id = result['deviceclass_id'] object.device_class = result['name'] object.device_class_code = result['name_code'] object.device_class_icon = result['icon'] object.device_class_icon_big = result['icon_big'] object.device_class_info_url = "https://udger.com/resources/ua-list/device-detail?device=#{result['name']}" end # If there is no @client_class_id and @match_client is not enabled if @client_class_id == -1 && !@match_client parse_client end if @deviceclass_id.zero? && @client_class_id != -1 query = 'SELECT deviceclass_id,name,name_code,icon,icon_big FROM udger_deviceclass_list JOIN udger_client_class ON udger_client_class.deviceclass_id=udger_deviceclass_list.id WHERE udger_client_class.id=?' data = db.execute(query, @client_class_id) unless data.empty? result = data[0] @deviceclass_id = result['deviceclass_id'] object.device_class = result['name'] object.device_class_code = result['name_code'] object.device_class_icon = result['icon'] object.device_class_icon_big = result['icon_big'] object.device_class_info_url = "https://udger.com/resources/ua-list/device-detail?device=#{result['name']}" end end end
parse_os()
click to toggle source
# File lib/udger/ua_parser.rb, line 106 def parse_os query = "SELECT os_id,regstring,family,family_code,name,name_code,homepage,icon,icon_big,vendor,vendor_code,vendor_homepage FROM udger_os_regex JOIN udger_os_list ON udger_os_list.id=udger_os_regex.os_id ORDER BY sequence ASC" regexp_parse(query) do |_match, result| @os_id = result['os_id'] object.os = result['name'] object.os_code = result['name_code'] object.os_homepage = result['homepage'] object.os_icon = result['icon'] object.os_icon_big = result['icon_big'] object.os_info_url = 'https://udger.com/resources/ua-list/os-detail?os=' + result['name'] object.os_family = result['family'] object.os_family_code = result['family_code'] object.os_family_vendor = result['vendor'] object.os_family_vendor_code = result['vendor_code'] object.os_family_vendor_homepage = result['vendor_homepage'] end end