Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/creadone/device_detector
Crystal shard for device detection by User-Agent string
https://github.com/creadone/device_detector
crystal device-detection shards user-agent-analysis user-agent-parser
Last synced: 9 days ago
JSON representation
Crystal shard for device detection by User-Agent string
- Host: GitHub
- URL: https://github.com/creadone/device_detector
- Owner: creadone
- License: mit
- Created: 2018-06-06T19:54:24.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-04-22T18:45:35.000Z (7 months ago)
- Last Synced: 2024-08-01T17:34:26.675Z (3 months ago)
- Topics: crystal, device-detection, shards, user-agent-analysis, user-agent-parser
- Language: Crystal
- Homepage:
- Size: 682 KB
- Stars: 22
- Watchers: 3
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-crystal - device_detector - Shard for detect device by user agent string (Framework Components)
- awesome-crystal - device_detector - Shard for detect device by user agent string (Framework Components)
- awesome-crystal - device_detector - Shard for detect device by user agent string (Framework Components)
README
# Device Detector
[![Build Status](https://travis-ci.org/creadone/device_detector.svg?branch=master)](https://travis-ci.org/creadone/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.
* Support latest Crystal version and update script for private use or immediately updates.
* Currently it is production version and works fine more that 2 years.
* The Library uses regexes from [matomo-org/device-detector](https://github.com/matomo-org/device-detector).## Installation
Add this to your application's `shard.yml`:
```yaml
dependencies:
device_detector:
github: creadone/device_detector
```Then run `shards install`
## Usage
```Crystal
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 # All parsers
response = DeviceDetector::Detector.new(user_agent).lite # Only for 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" => ""
}
},{...},
{
"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):
Crystal 0.30.1 (2019-08-13)
LLVM: 8.0.1
Default target: x86_64-apple-macosx```
bench/raw_response.cr --release
user system total real
full: 5.880000 0.060000 5.940000 ( 5.940340)
lite: 3.880000 0.040000 3.920000 ( 3.953958)
```It's mean that `device_detector` can work with 1000 / 5.9 ~ 169 QPS.
## Testing
```
crystal spec
```## Update regexes
```
crystal scripts/update_regexes.cr
```## ToDo
* Support [overloading of base rules](https://github.com/matomo-org/device-detector/issues/5962)
* CLI & HTTP version
* More lighter and faster the `lite` version
* Reload regexes on the fly (may be)## Contributing
1. Fork it ( https://github.com/creadone/device_detector/fork )
2. Create your feature branch (git checkout -b my-new-feature)
3. Commit your changes (git commit -am 'Add some feature')
4. Push to the branch (git push origin my-new-feature)
5. Create a new Pull Request## Contributors
- [@creadone](https://github.com/creadone) Sergey Fedorov - creator, maintainer
- [@delef](https://github.com/delef) Ivan Palamarchuk - new api, code optimization
- [@zaycker](https://github.com/zaycker) Yuriy Zaitsev - fix check order