A library to identify devices (phones, tablets) and their capabilities by parsing browser user agent strings.
Project description
Python User Agents
user_agents
is a Python library that provides an easy way to identify/detect devices like mobile phones, tablets and their capabilities by parsing (browser/HTTP) user agent strings. The goal is to reliably detect whether:
- User agent is a mobile, tablet or PC based device
- User agent has touch capabilities (has touch screen)
user_agents
relies on the excellent ua-parser to do the actual parsing of the raw user agent string.
Installation
user-agents
is hosted on PyPI and can be installed as such:
pip install pyyaml ua-parser user-agents
Alternatively, you can also get the latest source code from Github and install it manually.
Usage
Various basic information that can help you identify visitors can be accessed browser
, device
and os
attributes. For example:
from user_agents import parse
# iPhone's user agent string
ua_string = 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3'
user_agent = parse(ua_string)
# Accessing user agent's browser attributes
user_agent.browser # returns Browser(family=u'Mobile Safari', version=(5, 1), version_string='5.1')
user_agent.browser.family # returns 'Mobile Safari'
user_agent.browser.version # returns (5, 1)
user_agent.browser.version_string # returns '5.1'
# Accessing user agent's operating system properties
user_agent.os # returns OperatingSystem(family=u'iOS', version=(5, 1), version_string='5.1')
user_agent.os.family # returns 'iOS'
user_agent.os.version # returns (5, 1)
user_agent.os.version_string # returns '5.1'
# Accessing user agent's device properties
user_agent.device # returns Device(family=u'iPhone', brand=u'Apple', model=u'iPhone')
user_agent.device.family # returns 'iPhone'
user_agent.device.brand # returns 'Apple'
user_agent.device.model # returns 'iPhone'
# Viewing a pretty string version
str(user_agent) # returns "iPhone / iOS 5.1 / Mobile Safari 5.1"
user_agents
also expose a few other more "sophisticated" attributes that are derived from one or more basic attributes defined above. As for now, these attributes should correctly identify popular platforms/devices, pull requests to support smaller ones are always welcome.
Currently these attributes are supported:
is_mobile
: whether user agent is identified as a mobile phone (iPhone, Android phones, Blackberry, Windows Phone devices etc)is_tablet
: whether user agent is identified as a tablet device (iPad, Kindle Fire, Nexus 7 etc)is_pc
: whether user agent is identified to be running a traditional "desktop" OS (Windows, OS X, Linux)is_touch_capable
: whether user agent has touch capabilitiesis_bot
: whether user agent is a search engine crawler/spider
For example:
from user_agents import parse
# Let's start from an old, non touch Blackberry device
ua_string = 'BlackBerry9700/5.0.0.862 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/331 UNTRUSTED/1.0 3gpp-gba'
user_agent = parse(ua_string)
user_agent.is_mobile # returns True
user_agent.is_tablet # returns False
user_agent.is_touch_capable # returns False
user_agent.is_pc # returns False
user_agent.is_bot # returns False
str(user_agent) # returns "BlackBerry 9700 / BlackBerry OS 5 / BlackBerry 9700"
# Now a Samsung Galaxy S3
ua_string = 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'
user_agent = parse(ua_string)
user_agent.is_mobile # returns True
user_agent.is_tablet # returns False
user_agent.is_touch_capable # returns True
user_agent.is_pc # returns False
user_agent.is_bot # returns False
str(user_agent) # returns "Samsung GT-I9300 / Android 4.0.4 / Android 4.0.4"
# iPad's user agent string
ua_string = 'Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10'
user_agent = parse(ua_string)
user_agent.is_mobile # returns False
user_agent.is_tablet # returns True
user_agent.is_touch_capable # returns True
user_agent.is_pc # returns False
user_agent.is_bot # returns False
str(user_agent) # returns "iPad / iOS 3.2 / Mobile Safari 4.0.4"
# Kindle Fire's user agent string
ua_string = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-80) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true'
user_agent = parse(ua_string)
user_agent.is_mobile # returns False
user_agent.is_tablet # returns True
user_agent.is_touch_capable # returns True
user_agent.is_pc # returns False
user_agent.is_bot # returns False
str(user_agent) # returns "Kindle / Android / Amazon Silk 1.1.0-80"
# Touch capable Windows 8 device
ua_string = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; Touch)'
user_agent = parse(ua_string)
user_agent.is_mobile # returns False
user_agent.is_tablet # returns False
user_agent.is_touch_capable # returns True
user_agent.is_pc # returns True
user_agent.is_bot # returns False
str(user_agent) # returns "PC / Windows 8 / IE 10"
Running Tests
python -m unittest discover
Changelog
Version 2.2.0 (2020-08-23)
ua-parser
>= 0.10.0 is required. Thanks @jnozsc!- Added
get_device()
,get_os()
andget_browser()
instance methods toUserAgent
. Thanks @rodrigondec!
Version 2.1 (2020-02-08)
python-user-agents
now requireua-parser>=0.9.0
. Thanks @jnozsc!- Properly detect Chrome Mobile browser families. Thanks @jnozsc!
Version 2.0 (2019-04-07)
python-user-agents
now requireua-parser>=0.8.0
. Thanks @IMDagger!
Version 1.1
- Fixes packaging issue
Version 1.0
- Adds compatibility with
ua-parser
0.4.0 - Access to more device information in
user_agent.device.brand
anduser_agent.device.model
Version 0.3.2
- Better mobile detection
- Better PC detection
Version 0.3.1
- user_agent.is_mobile returns True when mobile spider is detected
Version 0.3.0
- Added str/unicode methods for convenience of pretty string
Version 0.2.0
- Fixed errors when running against newer versions if ua-parser
- Support for Python 3
Version 0.1.1
- Added
is_bot
property - Symbian OS devices are now detected as a mobile device
Version 0.1
- Initial release
Developed by the cool guys at Stamps.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file user-agents-2.2.0.tar.gz
.
File metadata
- Download URL: user-agents-2.2.0.tar.gz
- Upload date:
- Size: 9.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d36d25178db65308d1458c5fa4ab39c9b2619377010130329f3955e7626ead26 |
|
MD5 | e24d5fa345285269333637e396d9beda |
|
BLAKE2b-256 | e3e163c5bfb485a945010c8cbc7a52f85573561737648d36b30394248730a7bc |
File details
Details for the file user_agents-2.2.0-py3-none-any.whl
.
File metadata
- Download URL: user_agents-2.2.0-py3-none-any.whl
- Upload date:
- Size: 9.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a98c4dc72ecbc64812c4534108806fb0a0b3a11ec3fd1eafe807cee5b0a942e7 |
|
MD5 | a6257a4dbf7ba32d6451aa5a10df317c |
|
BLAKE2b-256 | 8f1c20bb3d7b2bad56d881e3704131ddedbb16eb787101306887dff349064662 |