Skip to content
This repository has been archived by the owner on Jul 24, 2019. It is now read-only.

Latest commit

 

History

History
81 lines (66 loc) · 2.83 KB

README.md

File metadata and controls

81 lines (66 loc) · 2.83 KB

useragent

Useragent is a minimalist port of the Java user-agent-utils in Erlang. It implements the basic features to figure out the OS and browser information, but will not look for accurate version numbers.

Build

make

Test

make test

Usage

The function useragent:parse/1 can take an iolist or binary UserAgent and will return desired details:

1> useragent:parse("Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.8) PPC; 240x320; HTC_TyTN/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1").
[{browser,[{name,<<"IE Mobile 6">>},
           {family,ie},
           {type,mobile},
           {manufacturer,microsoft},
           {engine,trident}]},
 {os,[{name,<<"Windows Mobile">>},
      {family,windows},
      {type,mobile},
      {manufacturer,microsoft}]},
 {string,<<"Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.8) PPC; 240x320; HTC_TyTN/1.0 Profile/"...>>}]
2> useragent:parse(<<"Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.7d">>).
[{browser,[{name,<<"Lynx">>},
           {family,lynx},
           {type,text},
           {manufacturer,undefined},
           {engine,undefined}]},
 {os,[{name,undefined},
      {family,undefined},
      {type,undefined},
      {manufacturer,undefined}]},
 {string,<<"Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.7d">>}]

Available information will be returned. All values that are not names are going to be atoms. Unavailable information will have the atom undefined. Note that the search uses lowercase versions of UA strings.

The downside is that Erlang/OTP only supports lowercasing for latin1 strings. Because user agent strings are usually bit strings, there shouldn't be much of a need to change things, but you can optionally pass in the original encoding so that things get done right:

3> useragent:parse(<<"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; da-dk) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1">>, utf8).
[{browser,[{name,<<"Safari 5">>},
           {family,safari},
           {type,web},
           {manufacturer,apple},
           {engine,webkit}]},
 {os,[{name,<<"Mac OS X">>},
      {family,mac_osx},
      {type,computer},
      {manufacturer,apple}]},
 {string,<<"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; da-dk) AppleWebKit/533.21.1 (KHTML, like Gecko"...>>}]

Extending

Send pull requests, make sure tests are not broken, add more if you can. Tests were taken from the original Java project, too.

Changelog

  • 0.1.3: Adding support for Firefox versions 21-22.
  • 0.1.2: Adding support for Firefox versions 14 to 20, better binary handling
  • 0.1.1: Adding support for Windows 8 user agents
  • 0.1.0: Initial Commit