Popularity
5.5
Declining
Activity
3.4
-
20
2
5

Programming language: Crystal
License: MIT License
Tags: Framework Components    
Latest version: v0.3.13

device_detector alternatives and similar shards

Based on the "Framework Components" category.
Alternatively, view device_detector alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of device_detector or a related project?

Add another 'Framework Components' Shard

README

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_namebrowser_version camera?camera_vendorcamera_model car_browser?car_browser_vendorcar_browser_model console?console_vendorconsole_model feed_reader?feed_reader_namefeed_reader_version library?library_namelibrary_version mediaplayer?mediaplayer_namemediaplayer_version mobile_app?mobile_app_namemobile_app_version mobile_device?mobile_device_vendormobile_device_typemobile_device_model os?os_nameos_version pim?pim_namepim_version portable_media_player?portable_media_player_vendorportable_media_player_model tv?tv_vendortv_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