device_detector~confact
Device Detector
The library for parsing User Agent and browser, operating system, device used (desktop, tablet, mobile, tv, cars, console, etc.), vendor and model detection. Currently it is an alpha-version and haven't been tested on production yet. The Library uses regexes from matomo-org/device-detector.
Installation
Add this to your application's shard.yml
:
dependencies:
device_detector:
github: creadone/device_detector
Then run shards
Usage
require "device_detector"
user_agent = "Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 Edge/12.0"
response = DeviceDetector::Detector.new(user_agent).call # For use all parsers
response = DeviceDetector::Detector.new(user_agent).lite # For use only bot and mobile
# Check if browser detected
response.browser? #=> true
# browser name
response.browser_name #=> Microsoft Edge
# browser version
response.browser_version #=> 12.0
# get raw response with
pp response.raw
[{
"bot" => {
"name" => ""
}
},
{
"browser" => {
"name" => "", "version" => ""
}
},
{
"browser_engine" => {
"name" => ""
}
},
{
"camera" => {
"vendor" => "", "model" => "", "device" => ""
}
},
{
"car_browser" => {
"vendor" => "", "device" => "", "model" => ""
}
},
{
"console" => {
"vendor" => "", "model" => ""
}
},
{
"feed_reader" => {
"name" => "", "version" => ""
}
},
{
"library" => {
"name" => "", "version" => ""
}
},
{
"mediaplayer" => {
"name" => "", "version" => ""
}
},
{
"mobile_app" => {
"name" => "", "version" => ""
}
},
{
"mobile" => {
"device" => "", "vendor" => "", "type" => ""
}
},
{
"oss" => {
"name" => "", "version" => ""
}
},
{
"pim" => {
"name" => "", "version" => ""
}
},
{
"portable_media_player" => {
"vendor" => "", "model" => ""
}
},
{
"tv" => {
"model" => "", "vendor" => ""
}
},
{
"vendorfragment" => {
"vendor" => ""
}
}
]
Available methods:
bot? bot_name |
browser_engine? browser_engine_name |
browser? browser_name browser_version |
camera? camera_vendor camera_model |
car_browser? car_browser_vendor car_browser_model |
console? console_vendor console_model |
feed_reader? feed_reader_name feed_reader_version |
library? library_name library_version |
mediaplayer? mediaplayer_name mediaplayer_version |
mobile_app? mobile_app_name mobile_app_version |
mobile_device? mobile_device_vendor mobile_device_type mobile_device_model |
os? os_name os_version |
pim? pim_name pim_version |
portable_media_player? portable_media_player_vendor portable_media_player_model |
tv? tv_vendor tv_model |
vendorfragment? vendorfragment_vendor |
Benchmarks
Recent benchmarking of parsing 1000 user-agent strings on a MacBook Air with Intel Core i5 dual core (0.8 Ghz per core):
bench/raw_response.cr --release
user system total real
full: 6.770000 0.100000 6.870000 ( 6.805766)
lite: 5.370000 0.080000 5.450000 ( 5.378346)
It's mean that device_detector
can work with 1000 / 6.8 ~ 147 QPS.
Testing
crystal spec
Contributing
- Fork it ( https://github.com/creadone/device_detector/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request