Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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: about 1 month ago
JSON representation

Crystal shard for device detection by User-Agent string

Awesome Lists containing this project

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