123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- # coding=utf-8
- from __future__ import unicode_literals
- from datetime import datetime
- from .. import BaseProvider
- class Provider(BaseProvider):
- user_agents = (
- 'chrome', 'firefox', 'internet_explorer', 'opera', 'safari',
- )
- windows_platform_tokens = (
- 'Windows 95', 'Windows 98', 'Windows 98; Win 9x 4.90', 'Windows CE',
- 'Windows NT 4.0', 'Windows NT 5.0', 'Windows NT 5.01',
- 'Windows NT 5.1', 'Windows NT 5.2', 'Windows NT 6.0', 'Windows NT 6.1',
- 'Windows NT 6.2',
- )
- linux_processors = ('i686', 'x86_64',)
- mac_processors = ('Intel', 'PPC', 'U; Intel', 'U; PPC',)
- def mac_processor(self):
- return self.random_element(self.mac_processors)
- def linux_processor(self):
- return self.random_element(self.linux_processors)
- def user_agent(self):
- name = self.random_element(self.user_agents)
- return getattr(self, name)()
- def chrome(self, version_from=13, version_to=63,
- build_from=800, build_to=899):
- saf = str(self.generator.random.randint(531, 536)) + \
- str(self.generator.random.randint(0, 2))
- tmplt = '({0}) AppleWebKit/{1} (KHTML, like Gecko)' \
- ' Chrome/{2}.0.{3}.0 Safari/{4}'
- platforms = (
- tmplt.format(self.linux_platform_token(),
- saf,
- self.generator.random.randint(version_from, version_to),
- self.generator.random.randint(build_from, build_to),
- saf),
- tmplt.format(self.windows_platform_token(),
- saf,
- self.generator.random.randint(version_from, version_to),
- self.generator.random.randint(build_from, build_to),
- saf),
- tmplt.format(self.mac_platform_token(),
- saf,
- self.generator.random.randint(version_from, version_to),
- self.generator.random.randint(build_from, build_to),
- saf),
- )
- return 'Mozilla/5.0 ' + self.random_element(platforms)
- def firefox(self):
- ver = (
- 'Gecko/{0} Firefox/{1}.0'.format(
- self.generator.date_time_between(
- datetime(2011, 1, 1)
- ),
- self.generator.random.randint(4, 15)
- ),
- 'Gecko/{0} Firefox/3.6.{1}'.format(
- self.generator.date_time_between(
- datetime(2010, 1, 1)
- ),
- self.generator.random.randint(1, 20)),
- 'Gecko/{0} Firefox/3.8'.format(
- self.generator.date_time_between(datetime(2010, 1, 1)),
- ),
- )
- tmplt_win = '({0}; {1}; rv:1.9.{2}.20) {3}'
- tmplt_lin = '({0}; rv:1.9.{1}.20) {2}'
- tmplt_mac = '({0}; rv:1.9.{1}.20) {2}'
- platforms = (
- tmplt_win.format(self.windows_platform_token(),
- self.generator.locale().replace('_', '-'),
- self.generator.random.randint(0, 2),
- self.generator.random.choice(ver)),
- tmplt_lin.format(self.linux_platform_token(),
- self.generator.random.randint(5, 7),
- self.generator.random.choice(ver)),
- tmplt_mac.format(self.mac_platform_token(),
- self.generator.random.randint(2, 6),
- self.generator.random.choice(ver)),
- )
- return 'Mozilla/5.0 ' + self.random_element(platforms)
- def safari(self):
- saf = "{0}.{1}.{2}".format(self.generator.random.randint(531, 535),
- self.generator.random.randint(1, 50),
- self.generator.random.randint(1, 7))
- if not self.generator.random.getrandbits(1):
- ver = "{0}.{1}".format(self.generator.random.randint(4, 5),
- self.generator.random.randint(0, 1))
- else:
- ver = "{0}.0.{1}".format(self.generator.random.randint(4, 5),
- self.generator.random.randint(1, 5))
- tmplt_win = '(Windows; U; {0}) AppleWebKit/{1} (KHTML, like Gecko)' \
- ' Version/{2} Safari/{3}'
- tmplt_mac = '({0} rv:{1}.0; {2}) AppleWebKit/{3} (KHTML, like Gecko)' \
- ' Version/{4} Safari/{5}'
- tmplt_ipod = '(iPod; U; CPU iPhone OS {0}_{1} like Mac OS X; {2})' \
- ' AppleWebKit/{3} (KHTML, like Gecko) Version/{4}.0.5' \
- ' Mobile/8B{5} Safari/6{6}'
- locale = self.generator.locale().replace('_', '-')
- platforms = (
- tmplt_win.format(self.windows_platform_token(),
- saf,
- ver,
- saf),
- tmplt_mac.format(self.mac_platform_token(),
- self.generator.random.randint(2, 6),
- locale,
- saf,
- ver,
- saf),
- tmplt_ipod.format(self.generator.random.randint(3, 4),
- self.generator.random.randint(0, 3),
- locale,
- saf,
- self.generator.random.randint(3, 4),
- self.generator.random.randint(111, 119),
- saf),
- )
- return 'Mozilla/5.0 ' + self.random_element(platforms)
- def opera(self):
- platform = '({0}; {1}) Presto/2.9.{2} Version/{3}.00'.format(
- (
- self.linux_platform_token()
- if self.generator.random.getrandbits(1)
- else self.windows_platform_token()
- ),
- self.generator.locale().replace('_', '-'),
- self.generator.random.randint(160, 190),
- self.generator.random.randint(10, 12),
- )
- return 'Opera/{0}.{1}.{2}'.format(
- self.generator.random.randint(8, 9),
- self.generator.random.randint(10, 99),
- platform,
- )
- def internet_explorer(self):
- tmplt = 'Mozilla/5.0 (compatible; MSIE {0}.0; {1}; Trident/{2}.{3})'
- return tmplt.format(self.generator.random.randint(5, 9),
- self.windows_platform_token(),
- self.generator.random.randint(3, 5),
- self.generator.random.randint(0, 1))
- def windows_platform_token(self):
- return self.random_element(self.windows_platform_tokens)
- def linux_platform_token(self):
- return 'X11; Linux {0}'.format(
- self.random_element(self.linux_processors))
- def mac_platform_token(self):
- return 'Macintosh; {0} Mac OS X 10_{1}_{2}'.format(
- self.random_element(self.mac_processors),
- self.generator.random.randint(5, 12),
- self.generator.random.randint(0, 9),
- )
|