• Stars
    star
    22
  • Rank 1,048,934 (Top 21 %)
  • Language
    Crystal
  • License
    MIT License
  • Created over 6 years ago
  • Updated about 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Crystal shard for device detection by User-Agent string

Device Detector

Build Status

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.

Installation

Add this to your application's shard.yml:

dependencies:
  device_detector:
    github: creadone/device_detector

Then run shards install

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  # 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
  • 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 Sergey Fedorov - creator, maintainer
  • @delef Ivan Palamarchuk - new api, code optimization
  • @zaycker Yuriy Zaitsev - fix check order

More Repositories

1

php_mobile_user_auth

User authentication with Flight framework (flightphp.com) for mobile devices
PHP
4
star
2

dl

Utility for download files by URLs from list
Crystal
4
star
3

zerossl

Ruby client for ZeroSSL
Ruby
4
star
4

cocoon

Wrapper for IO such as third-party API calls to prevent sudden blow up the main program
Crystal
3
star
5

cord

Crystal shard for Tarantool with auto reconnect and connections pool
Crystal
3
star
6

warning-list

Список компаний с выявленными признаками нелегальной деятельности на финансовом рынке
Ruby
3
star
7

cbloom

Sharded Bloom Filter
Crystal
2
star
8

baked_file_system

Crystal
2
star
9

brds

Backup and recovery directories structure
Crystal
2
star
10

OperCodes

Микро-сервис для определения оператора по номеру телефона
Ruby
2
star
11

karma

Key-counter database
Crystal
1
star
12

datapack

1
star
13

redraw

Prototyping tool for charts with c3js and Rails
Ruby
1
star
14

sparkline

Svelte
1
star
15

echarts_rollup_bundle

JavaScript
1
star
16

HLS-streams-checker

Ruby
1
star
17

garant

Helper for generate only unique hashes
Ruby
1
star
18

ngx

NGINX access log parser and filter by fields or values with output to JSON or plain text
Crystal
1
star
19

ru_geo_fix

1
star
20

epub2jpg

epub to jpg converter
Ruby
1
star
21

iptool

Calculate subnet by IPv4 range
Crystal
1
star
22

empty

1
star
23

frame_tree

Ruby
1
star
24

compliance

Ruby
1
star
25

dashamail

Гем для работы с транзакционным API российского сервиса https://dashamail.ru
Ruby
1
star