{ "info": { "author": "Selwin Ong", "author_email": "selwin.ong@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Internet :: WWW/HTTP", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Python User Agents\n==================\n\n``user_agents`` is a Python library that provides an easy way to\nidentify/detect devices like mobile phones, tablets and their\ncapabilities by parsing (browser/HTTP) user agent strings. The goal is\nto reliably detect whether:\n\n- User agent is a mobile, tablet or PC based device\n- User agent has touch capabilities (has touch screen)\n\n``user_agents`` relies on the excellent\n`ua-parser `_ to do the actual\nparsing of the raw user agent string.\n\nInstallation\n------------\n\n.. figure:: https://secure.travis-ci.org/selwin/python-user-agents.png\n :alt: Build status\n\n Build status\n\n``user-agents`` is hosted on\n`PyPI `__ and can be installed\nas such:\n\n::\n\n pip install pyyaml ua-parser user-agents\n\nAlternatively, you can also get the latest source code from\nGithub_ and install it manually.\n\n.. _Github: https://github.com/selwin/python-user-agents\n\nUsage\n-----\n\nVarious basic information that can help you identify visitors can be\naccessed ``browser``, ``device`` and ``os`` attributes. For example:\n\n.. code:: python\n\n\n from user_agents import parse\n\n # iPhone's user agent string\n 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'\n user_agent = parse(ua_string)\n\n # Accessing user agent's browser attributes\n user_agent.browser # returns Browser(family=u'Mobile Safari', version=(5, 1), version_string='5.1')\n user_agent.browser.family # returns 'Mobile Safari'\n user_agent.browser.version # returns (5, 1)\n user_agent.browser.version_string # returns '5.1'\n\n # Accessing user agent's operating system properties\n user_agent.os # returns OperatingSystem(family=u'iOS', version=(5, 1), version_string='5.1')\n user_agent.os.family # returns 'iOS'\n user_agent.os.version # returns (5, 1)\n user_agent.os.version_string # returns '5.1'\n\n # Accessing user agent's device properties\n user_agent.device # returns Device(family=u'iPhone', brand=u'Apple', model=u'iPhone')\n user_agent.device.family # returns 'iPhone'\n user_agent.device.brand # returns 'Apple'\n user_agent.device.model # returns 'iPhone'\n\n # Viewing a pretty string version\n str(user_agent) # returns \"iPhone / iOS 5.1 / Mobile Safari 5.1\"\n\n``user_agents`` also expose a few other more \"sophisticated\" attributes\nthat are derived from one or more basic attributes defined above. As for\nnow, these attributes should correctly identify popular\nplatforms/devices, pull requests to support smaller ones are always\nwelcome.\n\nCurrently these attributes are supported:\n\n- ``is_mobile``: whether user agent is identified as a mobile phone\n (iPhone, Android phones, Blackberry, Windows Phone devices etc)\n- ``is_tablet``: whether user agent is identified as a tablet device\n (iPad, Kindle Fire, Nexus 7 etc)\n- ``is_pc``: whether user agent is identified to be running a\n traditional \"desktop\" OS (Windows, OS X, Linux)\n- ``is_touch_capable``: whether user agent has touch capabilities\n- ``is_bot``: whether user agent is a search engine crawler/spider\n\nFor example:\n\n.. code:: python\n\n\n from user_agents import parse\n\n # Let's start from an old, non touch Blackberry device\n ua_string = 'BlackBerry9700/5.0.0.862 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/331 UNTRUSTED/1.0 3gpp-gba'\n user_agent = parse(ua_string)\n user_agent.is_mobile # returns True\n user_agent.is_tablet # returns False\n user_agent.is_touch_capable # returns False\n user_agent.is_pc # returns False\n user_agent.is_bot # returns False\n str(user_agent) # returns \"BlackBerry 9700 / BlackBerry OS 5 / BlackBerry 9700\"\n\n # Now a Samsung Galaxy S3\n 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'\n user_agent = parse(ua_string)\n user_agent.is_mobile # returns True\n user_agent.is_tablet # returns False\n user_agent.is_touch_capable # returns True\n user_agent.is_pc # returns False\n user_agent.is_bot # returns False\n str(user_agent) # returns \"Samsung GT-I9300 / Android 4.0.4 / Android 4.0.4\"\n\n # iPad's user agent string\n 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'\n user_agent = parse(ua_string)\n user_agent.is_mobile # returns False\n user_agent.is_tablet # returns True\n user_agent.is_touch_capable # returns True\n user_agent.is_pc # returns False\n user_agent.is_bot # returns False\n str(user_agent) # returns \"iPad / iOS 3.2 / Mobile Safari 4.0.4\"\n\n # Kindle Fire's user agent string\n 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'\n user_agent = parse(ua_string)\n user_agent.is_mobile # returns False\n user_agent.is_tablet # returns True\n user_agent.is_touch_capable # returns True\n user_agent.is_pc # returns False\n user_agent.is_bot # returns False\n str(user_agent) # returns \"Kindle / Android / Amazon Silk 1.1.0-80\"\n\n # Touch capable Windows 8 device\n ua_string = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; Touch)'\n user_agent = parse(ua_string)\n user_agent.is_mobile # returns False\n user_agent.is_tablet # returns False\n user_agent.is_touch_capable # returns True\n user_agent.is_pc # returns True\n user_agent.is_bot # returns False\n str(user_agent) # returns \"PC / Windows 8 / IE 10\"\n\nRunning Tests\n-------------\n\n::\n\n python -m unittest discover\n\nChangelog\n---------\n\nVersion 2.0 (2019-04-07)\n~~~~~~~~~~~~~~~~~~~~~~~~\n\n- ``python-user-agents`` now require ``ua-parser>=0.8.0``. Thanks @IMDagger!\n\nVersion 1.1\n~~~~~~~~~~~~~\n\n- Fixes packaging issue\n\nVersion 1.0\n~~~~~~~~~~~\n\n- Adds compatibility with ``ua-parser`` 0.4.0\n- Access to more device information in ``user_agent.device.brand`` and\n ``user_agent.device.model``\n\n\nVersion 0.3.2\n~~~~~~~~~~~~~\n\n- Better mobile detection\n- Better PC detection\n\nVersion 0.3.1\n~~~~~~~~~~~~~\n\n- user\\_agent.is\\_mobile returns True when mobile spider is detected\n\nVersion 0.3.0\n~~~~~~~~~~~~~\n\n- Added **str**/**unicode** methods for convenience of pretty string\n\nVersion 0.2.0\n~~~~~~~~~~~~~\n\n- Fixed errors when running against newer versions if ua-parser\n- Support for Python 3\n\nVersion 0.1.1\n~~~~~~~~~~~~~\n\n- Added ``is_bot`` property\n- Symbian OS devices are now detected as a mobile device\n\nVersion 0.1\n~~~~~~~~~~~\n\n- Initial release\n\nDeveloped by the cool guys at `Stamps `__.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/selwin/python-user-agents", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "user-agents", "package_url": "https://pypi.org/project/user-agents/", "platform": "", "project_url": "https://pypi.org/project/user-agents/", "project_urls": { "Homepage": "https://github.com/selwin/python-user-agents" }, "release_url": "https://pypi.org/project/user-agents/2.0/", "requires_dist": [ "ua-parser (>=0.8.0)" ], "requires_python": "", "summary": "A library to identify devices (phones, tablets) and their capabilities by parsing (browser/HTTP) user agent strings", "version": "2.0" }, "last_serial": 5109617, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "cbc9799a4933388018aad481dea6d4e4", "sha256": "f12a74e02b4250b825b7add42b4a9c0853c49b4930b7842e0029f87c185fba67" }, "downloads": -1, "filename": "user-agents-0.1.tar.gz", "has_sig": false, "md5_digest": "cbc9799a4933388018aad481dea6d4e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6030, "upload_time": "2013-01-05T09:20:53", "url": "https://files.pythonhosted.org/packages/46/89/c2c539daab7ab73ae270daa632e0c9c31fc386c7798a486325b7b6c9cf24/user-agents-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "d0b958ece60b10d4011cf2986e6118d0", "sha256": "37789b77e800f5961e9d4c6b6769e3e3d2a7295db7ee89de4bb94ac199e5e5b3" }, "downloads": -1, "filename": "user-agents-0.1.1.tar.gz", "has_sig": false, "md5_digest": "d0b958ece60b10d4011cf2986e6118d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6503, "upload_time": "2013-01-07T14:32:00", "url": "https://files.pythonhosted.org/packages/6a/6d/75cca727033a4d2cc79c4357117178c46bb75ee78f461a8f714e06476934/user-agents-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "f400dd89618b60f606af0d40a6cb1f77", "sha256": "17915ead5a934238a2d8808fb755bbe61642e4144595ccfb8231eb3ed3ecbd21" }, "downloads": -1, "filename": "user-agents-0.2.0.tar.gz", "has_sig": false, "md5_digest": "f400dd89618b60f606af0d40a6cb1f77", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6668, "upload_time": "2013-10-13T03:44:05", "url": "https://files.pythonhosted.org/packages/fa/0f/ecec49c22927177f3209a877661e8c51007f1835aef258513e67c62be245/user-agents-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "91aeda24bad8b8f6888dd1239cd12f9a", "sha256": "35df012f4e6d3e900d3c1a8a4ed7bd6e05418ce8acb0f6f0a9cf256d1d33d577" }, "downloads": -1, "filename": "user-agents-0.3.0.tar.gz", "has_sig": false, "md5_digest": "91aeda24bad8b8f6888dd1239cd12f9a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7527, "upload_time": "2014-08-31T10:20:17", "url": "https://files.pythonhosted.org/packages/41/dc/fd47dd5e0f469a65cb36ff8f68a2897531a6ebdd460bc3c84d091ed0bb5f/user-agents-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "3fb0311ca5082d80e39de27c123c913a", "sha256": "55e6bd6d5c9baed95c41635f536471027aaf7d411c2f63ed007e7cf0cce8db5d" }, "downloads": -1, "filename": "user-agents-0.3.1.tar.gz", "has_sig": false, "md5_digest": "3fb0311ca5082d80e39de27c123c913a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6360, "upload_time": "2014-11-28T10:09:22", "url": "https://files.pythonhosted.org/packages/2f/b3/d73ea0534b9c5d4aff12fa9402db87f5395a4984a136ccffd41101e402ef/user-agents-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "35801774d798dd362148da1841dc278e", "sha256": "f6de2eb2fe44a8021b0b76cdcc1ea9c7661366b39f754ae120c805ecd9332815" }, "downloads": -1, "filename": "user-agents-0.3.2.tar.gz", "has_sig": false, "md5_digest": "35801774d798dd362148da1841dc278e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6512, "upload_time": "2015-01-30T06:58:13", "url": "https://files.pythonhosted.org/packages/2c/60/bd87da68c2fd36fe5a627eb1361d12133fbe95df04cfaa9df57f1fb7c304/user-agents-0.3.2.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "aec563da36be6f237436bbe04841d847", "sha256": "254a7ab52d969570c8dae9f81e6b6418a4d28a0fb708659ce3e00aba8134b7fe" }, "downloads": -1, "filename": "user_agents-1.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "aec563da36be6f237436bbe04841d847", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 11097, "upload_time": "2015-09-05T00:03:43", "url": "https://files.pythonhosted.org/packages/17/ec/13a6c84d61e198a3908f0c2b3dcb2f52dc81e4821d2fb1495d33a016b085/user_agents-1.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f53e55d624b4cafa8b67b82612adc5af", "sha256": "6c35d1d440abe1a718b91f0d489ce624615142fbc194296ffbaeaed51153e027" }, "downloads": -1, "filename": "user-agents-1.0.0.tar.gz", "has_sig": false, "md5_digest": "f53e55d624b4cafa8b67b82612adc5af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9737, "upload_time": "2015-09-05T00:03:39", "url": "https://files.pythonhosted.org/packages/f8/08/297e4f6e09ce5b729a302325a8c3b68344c18d314d02fca64301b9f3ba54/user-agents-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "d2f75418adffd138afea6ce49126e58f", "sha256": "26a8ced9dfb660d718b2cc6e6699d59fad69ce1e4d3184730bfcb83b46fe03b1" }, "downloads": -1, "filename": "user_agents-1.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "d2f75418adffd138afea6ce49126e58f", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 12006, "upload_time": "2015-09-05T01:36:54", "url": "https://files.pythonhosted.org/packages/38/51/9e73f03e4d0701b66db485095b9a9b05c30bf7e804567f85b80c41f854f8/user_agents-1.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b00906f8f6673fde40c8c772715fea50", "sha256": "b5976d971e9e55ec8d80f6c6428f6de5de1467844a0d37184b5ee5e40929e939" }, "downloads": -1, "filename": "user-agents-1.0.1.tar.gz", "has_sig": false, "md5_digest": "b00906f8f6673fde40c8c772715fea50", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10544, "upload_time": "2015-09-05T01:36:46", "url": "https://files.pythonhosted.org/packages/38/e8/2d8e8b60b354cf8743f65879f4680d9c1f77ae560a303d322d7fe9c5d248/user-agents-1.0.1.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "6f55e690df0f62506a4033b029b07e3b", "sha256": "0ce5b1b44c8d11b9f3d6152ef9c8a2109409273ef8de600d577f549a3a3cbc6c" }, "downloads": -1, "filename": "user_agents-1.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "6f55e690df0f62506a4033b029b07e3b", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 12625, "upload_time": "2017-02-16T22:47:05", "url": "https://files.pythonhosted.org/packages/1f/70/d16ec8a5c854d4a2c5f8edf5013e733cd18ad945067dea8e21319352ffb0/user_agents-1.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0f18f7edf132605d1d43cc56d4850c31", "sha256": "643d16772280052b546d956971d719989ef6dc9b17d9ff0386aa21391a038039" }, "downloads": -1, "filename": "user-agents-1.1.0.tar.gz", "has_sig": false, "md5_digest": "0f18f7edf132605d1d43cc56d4850c31", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11217, "upload_time": "2017-02-16T22:47:16", "url": "https://files.pythonhosted.org/packages/be/ff/886a1e2570784ee63b1c4b0fd77037b84087ffe7b7b45f9751285418be34/user-agents-1.1.0.tar.gz" } ], "2.0": [ { "comment_text": "", "digests": { "md5": "7a0e2cd215ac3d42cf604a57487477d5", "sha256": "7af7419d61ce8f72ad487cc77ea3b4d1dcaa4cbb7b6df533a7c7aa3ccc44e5b3" }, "downloads": -1, "filename": "user_agents-2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "7a0e2cd215ac3d42cf604a57487477d5", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 12642, "upload_time": "2019-04-07T10:51:25", "url": "https://files.pythonhosted.org/packages/d9/51/8a6cb07b382c7e1edaadd750a695088880a25ca6b0613eaf9aba7c70a01a/user_agents-2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0771ec8ac1e0f998552cd617f3d77e13", "sha256": "792869b990a244f71efea1cb410ecaba99a270a64c5ac37d365bde5d70d6a2fa" }, "downloads": -1, "filename": "user-agents-2.0.tar.gz", "has_sig": false, "md5_digest": "0771ec8ac1e0f998552cd617f3d77e13", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9356, "upload_time": "2019-04-07T10:51:27", "url": "https://files.pythonhosted.org/packages/ef/b4/3ae0f6baeddc7264a3de3ebca9fe381d09ebed4ac14fb8510ac4b3d70197/user-agents-2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7a0e2cd215ac3d42cf604a57487477d5", "sha256": "7af7419d61ce8f72ad487cc77ea3b4d1dcaa4cbb7b6df533a7c7aa3ccc44e5b3" }, "downloads": -1, "filename": "user_agents-2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "7a0e2cd215ac3d42cf604a57487477d5", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 12642, "upload_time": "2019-04-07T10:51:25", "url": "https://files.pythonhosted.org/packages/d9/51/8a6cb07b382c7e1edaadd750a695088880a25ca6b0613eaf9aba7c70a01a/user_agents-2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0771ec8ac1e0f998552cd617f3d77e13", "sha256": "792869b990a244f71efea1cb410ecaba99a270a64c5ac37d365bde5d70d6a2fa" }, "downloads": -1, "filename": "user-agents-2.0.tar.gz", "has_sig": false, "md5_digest": "0771ec8ac1e0f998552cd617f3d77e13", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9356, "upload_time": "2019-04-07T10:51:27", "url": "https://files.pythonhosted.org/packages/ef/b4/3ae0f6baeddc7264a3de3ebca9fe381d09ebed4ac14fb8510ac4b3d70197/user-agents-2.0.tar.gz" } ] }