Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/toolmantim/user_agent_parser
A simple, comprehensive Ruby gem for parsing user agent strings with the help of BrowserScope's UA database
https://github.com/toolmantim/user_agent_parser
browserscope parse ruby useragent useragentparser
Last synced: about 2 months ago
JSON representation
A simple, comprehensive Ruby gem for parsing user agent strings with the help of BrowserScope's UA database
- Host: GitHub
- URL: https://github.com/toolmantim/user_agent_parser
- Owner: ua-parser
- License: mit
- Created: 2012-05-02T00:59:14.000Z (over 12 years ago)
- Default Branch: main
- Last Pushed: 2024-09-16T20:41:12.000Z (3 months ago)
- Last Synced: 2024-10-29T13:51:07.638Z (about 2 months ago)
- Topics: browserscope, parse, ruby, useragent, useragentparser
- Language: Ruby
- Size: 219 KB
- Stars: 256
- Watchers: 8
- Forks: 44
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: MIT-LICENSE
Awesome Lists containing this project
- awesome-ruby-toolbox - user_agent_parser - A simple, comprehensive Ruby gem for parsing user agent strings with the help of BrowserScope's UA database (Web Apps, Services & Interaction / User Agent Detection)
README
# UserAgentParser [![Build Status](https://github.com/ua-parser/uap-ruby/actions/workflows/ci.yml/badge.svg)](https://github.com/ua-parser/uap-ruby/actions/workflows/ci.yml) [![Coverage Status](https://coveralls.io/repos/github/ua-parser/uap-ruby/badge.svg)](https://coveralls.io/github/ua-parser/uap-ruby)
UserAgentParser is a simple, comprehensive Ruby gem for parsing user agent strings. It uses [BrowserScope](http://www.browserscope.org/)'s [parsing patterns](https://github.com/ua-parser/uap-core).
## Supported Rubies
* Ruby 3.2
* Ruby 3.1
* Ruby 3.0
* JRuby## Installation
```bash
$ gem install user_agent_parser
```## Example usage
```ruby
require 'user_agent_parser'
=> true
user_agent = UserAgentParser.parse 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0;)'
=> #
user_agent.to_s
=> "IE 9.0"
user_agent.family
=> "IE"
user_agent.version.to_s
=> "9.0"
user_agent.version.major
=> "9"
user_agent.version.minor
=> "0"
user_agent.family == "IE" && user_agent.version >= "9"
=> true
operating_system = user_agent.os
=> #
operating_system.to_s
=> "Windows Vista"# Device information can also be determined from some devices
user_agent = UserAgentParser.parse "Mozilla/5.0 (Linux; Android 7.0; SAMSUNG SM-G930T Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/5.0 Chrome/51.0.2704.106 Mobile Safari/537.36"
=> #
user_agent.device.family
=> "Samsung SM-G930T"
user_agent.device.brand
=> "Samsung"
user_agent.device.model
=> "SM-G930T"user_agent = UserAgentParser.parse "Mozilla/5.0 (iPad; CPU OS 10_2_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) GSA/23.1.148956103 Mobile/14D27 Safari/600.1.4"
=> #
irb(main):026:0> user_agent.device.family
=> "iPad"
irb(main):027:0> user_agent.device.brand
=> "Apple"
irb(main):028:0> user_agent.device.model
=> "iPad"# The parser database will be loaded and parsed on every call to
# UserAgentParser.parse. To avoid this, instantiate your own Parser instance.
parser = UserAgentParser::Parser.new
parser.parse 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0;)'
=> #
parser.parse 'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.5.24 Version/10.53'
=> #
```In a larger application, you could store a parser in a global to avoid repeat pattern loading:
```ruby
module MyApplication# Instantiate the parser on load as it's quite expensive
USER_AGENT_PARSER = UserAgentParser::Parser.newdef self.user_agent_parser
USER_AGENT_PARSER
endend
```## The pattern database
The [ua-parser database](https://github.com/ua-parser/uap-core/blob/master/regexes.yaml) is included via a [git submodule](http://help.github.com/submodules/). To update the database the submodule needs to be updated and the gem re-released (pull requests for this are very welcome!).
You can also specify the path to your own, updated and/or customised `regexes.yaml` file as a second argument to `UserAgentParser.parse`:
```ruby
UserAgentParser.parse(ua_string, patterns_path: '/some/path/to/regexes.yaml')
```or when instantiating a `UserAgentParser::Parser`:
```ruby
UserAgentParser::Parser.new(patterns_path: '/some/path/to/regexes.yaml').parse(ua_string)
```Extending the standard database is possible by providing multiple files in `patterns_paths` (plural) array argument:
```ruby
UserAgentParser::Parser.new(patterns_paths: [UserAgentParser::DefaultPatternsPath, '/some/path/to/regexes.yaml'])
```## Command line tool
The gem incldes a `user_agent_parser` bin command which will read from
standard input, parse each line and print the result, for example:```bash
$ cat > SOME-FILE-WITH-USER-AGENTS.txt
USER_AGENT_1
USER_AGENT_2
...
$ cat SOME-FILE-WITH-USER-AGENTS.txt | user_agent_parser --format '%f %M' | distribution
```See `user_agent_parser -h` for more information.
## Contributing
1. Fork
2. Hack
3. `rake test`
4. Send a pull requestAll accepted pull requests will earn you commit and release rights.
## Releasing a new version
1. Update the version in `user_agent_parser.gemspec`
2. `git commit user_agent_parser.gemspec` with the following message format:Version x.x.x
Changelog:
* Some new feature
* Some new bug fix
3. `rake release`
4. Create a [new Github release](https://github.com/ua-parser/uap-ruby/releases/new)## License
MIT