diff --git a/device_detector/parser/device/base.py b/device_detector/parser/device/base.py index 0c003d9..94eec2a 100644 --- a/device_detector/parser/device/base.py +++ b/device_detector/parser/device/base.py @@ -73,9 +73,12 @@ 'AP': 'Apple', 'AR': 'Archos', 'AS': 'ARRIS', + 'AB': 'Arian Space', 'AT': 'Airties', 'A6': 'Ark', 'A4': 'Ask', + 'A0': 'ANS', + 'A8': 'Assistant', 'AU': 'Asus', 'AH': 'AVH', 'AV': 'Avvio', @@ -91,6 +94,7 @@ 'BL': 'Beetel', 'BP': 'Blaupunkt', 'B3': 'Bluboo', + 'BF': 'Black Fox', 'BM': 'Bmobile', 'BN': 'Barnes & Noble', 'BO': 'BangOlufsen', @@ -144,6 +148,7 @@ 'DC': 'DoCoMo', 'DG': 'Dialog', 'DI': 'Dicam', + 'D4': 'Digi', 'D3': 'Digicel', 'DD': 'Digiland', 'D2': 'Digma', @@ -158,6 +163,7 @@ 'EB': 'E-Boda', 'EA': 'EBEST', 'EC': 'Ericsson', + 'E7': 'Ergo', 'ED': 'Energizer', 'E4': 'Echo Mobiles', 'ES': 'ECS', @@ -165,6 +171,7 @@ 'EI': 'Ezio', 'EM': 'Eks Mobility', 'EL': 'Elephone', + 'EG': 'Elenberg', 'EP': 'Easypix', 'EK': 'EKO', 'E1': 'Energy Sistem', @@ -172,11 +179,13 @@ 'EE': 'Essential', 'EN': 'Eton', 'E2': 'Essentielb', + '1E': 'Etuline', 'ET': 'eTouch', 'EV': 'Evertek', 'E3': 'Evolio', 'EO': 'Evolveo', 'EX': 'Explay', + 'E0': 'EvroMedia', 'E5': 'Extrem', 'EZ': 'Ezze', 'E8': 'E-tel', @@ -184,11 +193,13 @@ 'FA': 'Fairphone', 'FI': 'FiGO', 'FL': 'Fly', + 'F1': 'FinePower', 'FT': 'Freetel', 'FR': 'Forstar', 'FO': 'Foxconn', 'FN': 'FNB', 'FU': 'Fujitsu', + 'FD': 'Fondi', 'GT': 'G-TiDE', 'GM': 'Garmin-Asus', 'GA': 'Gateway', @@ -198,6 +209,7 @@ 'GI': 'Gionee', 'GG': 'Gigabyte', 'GS': 'Gigaset', + 'GZ': 'Ginzzu', 'GC': 'GOCLEVER', 'GL': 'Goly', 'GO': 'Google', @@ -211,8 +223,10 @@ 'HE': 'HannSpree', 'HI': 'Hisense', 'HL': 'Hi-Level', + 'H1': 'Hoffmann', 'HM': 'Homtom', 'HO': 'Hosin', + 'HZ': 'Hoozo', 'HP': 'HP', 'HT': 'HTC', 'HU': 'Huawei', @@ -230,6 +244,7 @@ 'I1': 'iOcean', 'I2': 'IconBIT', 'IL': 'IMO Mobile', + 'I7': 'iLA', 'IW': 'iNew', 'IP': 'iPro', 'IF': 'Infinix', @@ -237,6 +252,8 @@ 'I5': 'InnJoo', 'IN': 'Innostream', 'I4': 'Inoi', + 'IR': 'iRola', + 'I6': 'Irbis', 'II': 'Inkti', 'IX': 'Intex', 'IO': 'i-mobile', @@ -248,7 +265,9 @@ 'JA': 'JAY-Tech', 'JI': 'Jiayu', 'JO': 'Jolla', + 'J5': 'Just5', 'KL': 'Kalley', + 'K4': 'Kaan', 'KA': 'Karbonn', 'KD': 'KDDI', 'K1': 'Kiano', @@ -266,14 +285,17 @@ 'KR': 'Koridy', 'K2': 'KRONO', 'KS': 'Kempler & Strauss', + 'K3': 'Keneksi', 'KU': 'Kumai', 'KY': 'Kyocera', 'KZ': 'Kazam', 'KE': 'Krüger&Matz', 'LQ': 'LAIQ', 'L2': 'Landvo', + 'L6': 'Land Rover', 'LV': 'Lava', 'LA': 'Lanix', + 'LK': 'Lark', 'LC': 'LCT', 'L5': 'Leagoo', 'LD': 'Ledstar', @@ -282,6 +304,7 @@ 'LE': 'Lenovo', 'LN': 'Lenco', 'LT': 'Leotec', + 'L7': 'Lephone', 'LP': 'Le Pan', 'LG': 'LG', 'LI': 'Lingwin', @@ -290,11 +313,14 @@ 'L3': 'Lexand', 'LX': 'Lexibook', 'LY': 'LYF', + 'LU': 'Lumus', 'MN': 'M4tel', 'MJ': 'Majestic', 'MA': 'Manta Multimedia', 'MW': 'Maxwest', + 'M0': 'Maze', 'MB': 'Mobistel', + '0M': 'Mecool', 'M3': 'Mecer', 'MD': 'Medion', 'M2': 'MEEG', @@ -303,6 +329,7 @@ 'MX': 'MEU', 'MI': 'MicroMax', 'M5': 'MIXC', + 'MH': 'Mobiola', 'M6': 'Mobiistar', 'MC': 'Mediacom', 'MK': 'MediaTek', @@ -368,7 +395,9 @@ 'PG': 'Pentagram', 'PH': 'Philips', 'PI': 'Pioneer', + 'PX': 'Pixus', 'PL': 'Polaroid', + 'P5': 'Polytron', 'P9': 'Primepad', 'PM': 'Palm', 'PO': 'phoneOne', @@ -385,6 +414,7 @@ 'PU': 'PULID', 'QI': 'Qilive', 'QT': 'Qtek', + 'QH': 'Q-Touch', 'QM': 'QMobile', 'QA': 'Quantum', 'QU': 'Quechua', @@ -397,7 +427,9 @@ 'RK': 'Roku', 'RO': 'Rover', 'R1': 'Rokit', + 'R3': 'Rombica', 'RT': 'RT Project', + 'R2': 'R-TV', 'SQ': 'Santin BiTBiZ', 'SA': 'Samsung', 'S0': 'Sanei', @@ -409,8 +441,10 @@ 'SX': 'SFR', 'SG': 'Sagem', 'SH': 'Sharp', + '3S': 'Shuttle', 'SI': 'Siemens', 'SJ': 'Silent Circle', + '1S': 'Sigma', 'SN': 'Sendo', 'S6': 'Senseit', 'EW': 'Senwa', @@ -425,17 +459,20 @@ 'SV': 'Selevision', 'SY': 'Sanyo', 'SM': 'Symphony', + '4S': 'Syrox', 'SR': 'Smart', 'S7': 'Smartisan', 'S4': 'Star', 'SB': 'STF Mobile', 'S8': 'STK', 'S9': 'Savio', + '2S': 'Starway', 'ST': 'Storex', 'S2': 'Stonex', 'S3': 'SunVan', 'SZ': 'Sumvision', 'SS': 'SWISSMOBILITY', + '10': 'Simbans', 'X1': 'Safaricom', 'TA': 'Tesla', 'T5': 'TB Touch', @@ -464,6 +501,7 @@ 'T3': 'Trevi', 'TU': 'Tunisie Telecom', 'TR': 'Turbo-X', + '11': 'True', 'TV': 'TVC', 'TX': 'TechniSat', 'TZ': 'teXet', @@ -485,6 +523,7 @@ 'VS': 'ViewSonic', 'VT': 'Vestel', 'VR': 'Vernee', + 'V4': 'Verizon', 'VL': 'Verykool', 'VV': 'Vivo', 'VX': 'Vertex', @@ -511,6 +550,7 @@ 'WX': 'Woxter', 'XV': 'X-View', 'XI': 'Xiaomi', + 'XL': 'Xiaolajiao', 'XN': 'Xion', 'XO': 'Xolo', 'YA': 'Yarvik', @@ -528,9 +568,11 @@ 'ZU': 'Zuum', 'ZN': 'Zen', 'ZY': 'Zync', + 'ZQ': 'ZYQ', + 'XT': 'X-TIGI', + 'XB': 'NEXBOX', # legacy brands, might be removed in future versions 'WB': 'Web TV', - 'XT': 'X-TIGI', 'XX': 'Unknown', } diff --git a/device_detector/parser/settings.py b/device_detector/parser/settings.py index b171297..c5071a8 100644 --- a/device_detector/parser/settings.py +++ b/device_detector/parser/settings.py @@ -1,4 +1,3 @@ - AVAILABLE_ENGINES = { 'WebKit', 'Blink', @@ -17,6 +16,7 @@ AVAILABLE_ENGINES_LOWER_CASE = {engine.lower(): engine for engine in AVAILABLE_ENGINES} AVAILABLE_BROWSERS = { + '2B': '2345 Browser', '36': '360 Phone Browser', '3B': '360 Browser', 'AA': 'Avant Browser', @@ -47,6 +47,7 @@ 'CA': 'Camino', 'CC': 'Coc Coc', 'CD': 'Comodo Dragon', + 'CE': 'CM Browser', 'C1': 'Coast', 'CX': 'Charon', 'CF': 'Chrome Frame', @@ -62,22 +63,26 @@ 'CY': 'Cyberfox', 'CS': 'Cheshire', 'CU': 'Cunaguaro', + 'CV': 'Chrome Webview', 'DB': 'dbrowser', 'DE': 'Deepnet Explorer', 'DF': 'Dolphin', 'DO': 'Dorado', 'DL': 'Dooble', 'DI': 'Dillo', + 'EC': 'Ecosia', 'EI': 'Epic', 'EL': 'Elinks', 'EB': 'Element Browser', 'EP': 'GNOME Web', 'ES': 'Espial TV Browser', + 'F1': 'Firefox Mobile iOS', 'FB': 'Firebird', 'FD': 'Fluid', 'FE': 'Fennec', 'FF': 'Firefox', 'FK': 'Firefox Focus', + 'FR': 'Firefox Rocket', 'FL': 'Flock', 'FM': 'Firefox Mobile', 'FW': 'Fireweb', @@ -85,11 +90,12 @@ 'GA': 'Galeon', 'GE': 'Google Earth', 'HJ': 'HotJava', - 'IA': 'Iceape', 'IB': 'IBrowse', 'IC': 'iCab', 'I2': 'iCab Mobile', 'I1': 'Iridium', + 'I3': 'Iron Mobile', + 'I4': 'IceCat', 'ID': 'IceDragon', 'IV': 'Isivioo', 'IW': 'Iceweasel', @@ -102,9 +108,11 @@ 'KM': 'K-meleon', 'KO': 'Konqueror', 'KP': 'Kapiko', + 'KW': 'Kiwi', 'KY': 'Kylo', 'KZ': 'Kazehakase', 'LB': 'Liebao', + 'LF': 'LieBaoFast', 'LG': 'LG Browser', 'LI': 'Links', 'LU': 'LuaKit', @@ -115,8 +123,10 @@ 'ME': 'Mercury', 'MF': 'Mobile Safari', 'MI': 'Midori', + 'MO': 'Mobicip', 'MU': 'MIUI Browser', 'MS': 'Mobile Silk', + 'MT': 'Mint Browser', 'MX': 'Maxthon', 'NB': 'Nokia Browser', 'NO': 'Nokia OSS Browser', @@ -127,10 +137,13 @@ 'NP': 'NetPositive', 'NS': 'Netscape', 'NT': 'NTENT Browser', + 'O1': 'Opera Mini iOS', 'OB': 'Obigo', 'OD': 'Odyssey Web Browser', 'OF': 'Off By One', 'OE': 'ONE Browser', + 'OG': 'Opera Neon', + 'OH': 'Opera Devices', 'OI': 'Opera Mini', 'OM': 'Opera Mobile', 'OP': 'Opera', @@ -151,10 +164,12 @@ 'PO': 'Polaris', 'PT': 'Polarity', 'PS': 'Microsoft Edge', + 'Q1': 'QQ Browser Mini', 'QQ': 'QQ Browser', 'QT': 'Qutebrowser', 'QZ': 'QupZilla', 'QM': 'Qwant Mobile', + 'QW': 'QtWebEngine', 'RK': 'Rekonq', 'RM': 'RockMelt', 'SB': 'Samsung Browser', @@ -166,21 +181,25 @@ 'SK': 'Skyfire', 'SS': 'Seraphic Sraf', 'SL': 'Sleipnir', - 'SM': 'SeaMonkey', 'SN': 'Snowshoe', + 'SO': 'Sogou Mobile Browser', 'SR': 'Sunrise', 'SP': 'SuperBird', 'ST': 'Streamy', 'SX': 'Swiftfox', + 'SZ': 'Seznam Browser', 'TF': 'TenFourFox', 'TB': 'Tenta Browser', 'TZ': 'Tizen Browser', 'TS': 'TweakStyle', 'UC': 'UC Browser', + 'UM': 'UC Browser Mini', 'VI': 'Vivaldi', 'VB': 'Vision Mobile Browser', + 'WP': 'Web Explorer', 'WE': 'WebPositive', 'WF': 'Waterfox', + 'WH': 'Whale Browser', 'WO': 'wOSBrowser', 'WT': 'WeTab Browser', 'YA': 'Yandex Browser', @@ -217,6 +236,20 @@ 'VI', 'PT', 'AD', + 'SB', + 'WP', + 'I3', + 'CV', + 'WH', + 'SZ', + 'QW', + 'LF', + 'KW', + '2B', + 'CE', + 'EC', + 'MT', + 'MS', ), 'Firefox': ( 'FF', @@ -231,14 +264,19 @@ 'CU', 'TF', 'QM', + 'FR', + 'I4', + 'GZ', + 'MO', + 'F1', ), 'Internet Explorer': ('IE', 'IM', 'PS'), 'Konqueror': ('KO',), 'NetFront': ('NF',), 'NetSurf': ('NE',), 'Nokia Browser': ('NB', 'NO', 'NV', 'DO'), - 'Opera': ('OP', 'OM', 'OI', 'ON'), - 'Safari': ('SF', 'MF'), + 'Opera': ('OP', 'OM', 'OI', 'ON', 'OO', 'OG', 'OH', 'O1'), + 'Safari': ('SF', 'MF', 'SO'), 'Sailfish Browser': ('SA',), } @@ -257,6 +295,9 @@ 'C1', 'AL', 'SA', + 'SB', + 'FR', + 'WP', } # Fast membership testing @@ -319,11 +360,13 @@ 'wfexperience', } - # When parsing UA strings generically, multiple name/version pairs may be found. # Ignore the uninteresting ones # Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaN8-00/014.002; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.6.4 3gpp-gba -SKIP_PREFIXES = set(AVAILABLE_ENGINES_LOWER_CASE.keys()) | BROWSER_FAMILIES_LOWER | CRUFT_NAMES | set(BROWSER_TO_ABBREV.keys()) +SKIP_PREFIXES = set(AVAILABLE_ENGINES_LOWER_CASE.keys()) | \ + BROWSER_FAMILIES_LOWER | \ + CRUFT_NAMES | \ + set(BROWSER_TO_ABBREV.keys()) CHECK_PAIRS = { 'Android Browser', @@ -332,7 +375,6 @@ 'Chrome', } - __all__ = ( 'AVAILABLE_ENGINES', 'AVAILABLE_BROWSERS', diff --git a/device_detector/regexes/upstream/bots.yml b/device_detector/regexes/upstream/bots.yml index 99ff357..f0c8e13 100644 --- a/device_detector/regexes/upstream/bots.yml +++ b/device_detector/regexes/upstream/bots.yml @@ -61,6 +61,13 @@ name: 'Alexa Internet' url: 'http://www.alexa.com' +- regex: 'Amazon[ -]Route ?53[ -]Health[ -]Check[ -]Service' + name: 'Amazon Route53 Health Check' + category: 'Service Agent' + producer: + name: 'Amazon Web Services' + url: 'https://aws.amazon.com/' + - regex: 'AmorankSpider' name: 'Amorank Spider' category: 'Crawler' @@ -1719,6 +1726,9 @@ - regex: 'Server Density Service Monitoring.*' name: 'Server Density' +- regex: 'RSSRadio \(Push Notification Scanner;support@dorada\.co\.uk\)' + name: 'RSSRadio Bot' + - regex: '(A6-Indexer|nuhk|TsolCrawler|Yammybot|Openbot|Gulper Web Bot|grub-client|Download Demon|SearchExpress|Microsoft URL Control|borg|altavista|dataminr.com|tweetedtimes.com|TrendsmapResolver|teoma|blitzbot|oegp|furlbot|http%20client|polybot|htdig|mogimogi|larbin|scrubby|searchsight|seekbot|semanticdiscovery|snappy|vortex(?! Build)|zeal|fast-webcrawler|converacrawler|dataparksearch|findlinks|BrowserMob|HttpMonitor|ThumbShotsBot|URL2PNG|ZooShot|GomezA|Google SketchUp|Read%20Later|Minimo|RackspaceBot)' name: 'Generic Bot' @@ -1728,6 +1738,12 @@ name: 'Sentry' url: 'https://sentry.io' +- regex: '^Spotify' + name: 'Spotify' + producer: + name: 'Spotify' + url: 'https://www.spotify.com' + # Generic detections - regex: 'Nutch' diff --git a/device_detector/regexes/upstream/client/browsers.yml b/device_detector/regexes/upstream/client/browsers.yml index 4d25412..be14578 100644 --- a/device_detector/regexes/upstream/client/browsers.yml +++ b/device_detector/regexes/upstream/client/browsers.yml @@ -18,6 +18,11 @@ version: '$1' engine: default: 'Gecko' +- regex: 'Qwant/(\d+[\.\d]+)' + name: 'Qwant Mobile' + version: '$1' + engine: + default: 'Gecko' # TenFourFox - regex: 'TenFourFox(?:/(\d+[\.\d]+))?' @@ -80,10 +85,17 @@ engine: default: 'Gecko' -# SeaMonkey -- regex: '(Iceape|SeaMonkey|gnuzilla)(?:/(\d+[\.\d]+))?' - name: '$1' - version: '$2' +# IceCat +- regex: 'IceCat(?:/(\d+[\.\d]+))?' + name: 'IceCat' + version: '$1' + engine: + default: 'Gecko' + +# Mobicip +- regex: 'Mobicip' + name: 'Mobicip' + version: '' engine: default: 'Gecko' @@ -275,11 +287,16 @@ default: 'Gecko' #Firefox Mobile -- regex: '(Mobile|Tablet).*Firefox(?:/(\d+[\.\d]+))?' +- regex: '(?:Mobile|Tablet).*Firefox(?:/(\d+[\.\d]+))?' name: 'Firefox Mobile' - version: '$2' + version: '$1' engine: default: 'Gecko' +- regex: 'FxiOS/(\d+[\.\d]+)' + name: 'Firefox Mobile iOS' + version: '$1' + engine: + default: 'WebKit' #Firefox - regex: 'Firefox(?:/(\d+[\.\d]+))?' @@ -287,16 +304,11 @@ version: '$1' engine: default: 'Gecko' -- regex: '(BonEcho|GranParadiso|Lorentz|Minefield|Namoroka|Shiretoko)/(\d+[\.\d]+)' +- regex: '(?:BonEcho|GranParadiso|Lorentz|Minefield|Namoroka|Shiretoko)/(\d+[\.\d]+)' name: 'Firefox' - version: '$1 ($2)' + version: '$1' engine: default: 'Gecko' -- regex: 'FxiOS/(\d+[\.\d]+)' - name: 'Firefox Mobile' - version: 'iOS $1' - engine: - default: 'WebKit' #ANT Fresco - regex: 'ANTFresco(?:[/ ](\d+[\.\d]+))?' @@ -352,6 +364,29 @@ name: 'Dooble' version: '$1' +# Whale +- regex: 'Whale/(\d+[\.\d]+)' + name: 'Whale Browser' + version: '$1' + engine: + default: 'Blink' + +#Obigo +- regex: 'Obigo[ ]?(?:InternetBrowser|Browser)?(?:[ /]([a-z0-9]*))?' + name: 'Obigo' + version: '$1' +- regex: 'Obigo|Teleca' + name: 'Obigo' + version: '' + +#UC Browser Mini +- regex: 'UCMini(?:[ /]?(\d+[\.\d]+))?' + name: 'UC Browser Mini' + version: '$1' +- regex: 'UC[ ]?Browser.* \(UCMini\)' + name: 'UC Browser Mini' + version: '' + #Opera - regex: '(?:Opera Tablet.*Version|Opera/.+Opera Mobi.+Version|Mobile.+OPR)/(\d+[\.\d]+)' name: 'Opera Mobile' @@ -360,9 +395,21 @@ default: 'Presto' versions: 15: 'Blink' -- regex: '(?:OPT)/(\d+[\.\d]+)' +- regex: 'MMS/(\d+[\.\d]+)' + name: 'Opera Neon' + version: '$1' + engine: + default: 'Blink' +- regex: 'OMI/(\d+[\.\d]+)' + name: 'Opera Devices' + version: '$1' + engine: + default: 'Blink' +- regex: 'OPT/(\d+[\.\d]+)' name: 'Opera Touch' version: '$1' + engine: + default: 'Blink' - regex: 'Opera/(\d+[\.\d]+).+Opera Mobi' name: 'Opera Mobile' version: '$1' @@ -380,6 +427,11 @@ version: '$1' engine: default: 'Presto' +- regex: 'OPiOS/(\d+[\.\d]+)' + name: 'Opera Mini iOS' + version: '$1' + engine: + default: 'WebKit' - regex: 'Opera.+Edition Next.+Version/(\d+[\.\d]+)' name: 'Opera Next' version: '$1' @@ -419,7 +471,7 @@ default: '' # multi engine #Comodo Dragon -- regex: 'Comodo[ _]Dragon(?:/(\d+[\.\d]+))?' +- regex: '(?:Comodo[ _])?Dragon(?!fruit)(?:/(\d+[\.\d]+))?' name: 'Comodo Dragon' version: '$1' engine: @@ -454,6 +506,9 @@ - regex: 'baidubrowser(?:[/ ](\d+[\.\d]*))?' name: 'Baidu Browser' version: '$1' +- regex: 'FlyFlow(?:[/ ](\d+[\.\d]*))?' + name: 'Baidu Browser' + version: '$1' #Baidu Spark - regex: '(?:(?:BD)?Spark|BIDUBrowser)[/ ](\d+[\.\d]*)' @@ -513,6 +568,13 @@ name: 'Puffin' version: '$1' +#MobileIron +- regex: 'MobileIron(?:/(\d+[\.\d]+))?' + name: 'Iron Mobile' + version: '$1' + engine: + default: 'Blink' + #Iron - regex: 'Iron(?:/(\d+[\.\d]+))?' name: 'Iron' @@ -532,6 +594,11 @@ '2.9.16': '' # multi engine '2.28': 'WebKit' +# LieBaoFast +- regex: 'LieBaoFast(?:[ /](\d+[\.\d]+))?' + name: 'LieBaoFast' + version: '$1' + # Liebao - regex: 'LBBrowser(?:[ /](\d+[\.\d]+))?' name: 'Liebao' @@ -542,15 +609,26 @@ name: 'Sogou Explorer' version: '$1' +# QQ Browser Mini +- regex: 'M?QQBrowser/Mini([\.\d]+)?' + name: 'QQ Browser Mini' + version: '$1' + engine: + default: '' # multi engine -- WebKit or Blink + # QQ Browser -- regex: 'M?QQBrowser(?:/(?:Mini)?([\.\d]+))?' +- regex: 'M?QQBrowser(?:/([\.\d]+))?' name: 'QQ Browser' version: '$1' + engine: + default: '' # multi engine -- WebKit or Blink # MIUI Browser -- regex: 'MIUIBrowser(?:/(\d+[\.\d]+))?' +- regex: '(?:MIUIBrowser|MiuiBrowser)(?:/(\d+[\.\d]+))?' name: 'MIUI Browser' version: '$1' + engine: + default: '' # multi engine -- WebKit or Blink # Coc Coc # This browser (http://coccoc.vn/) is built on top of Chromium with @@ -595,6 +673,9 @@ - regex: 'UCWEB(?:[ /]?(\d+[\.\d]+))?' name: 'UC Browser' version: '$1' +- regex: 'UC AppleWebKit' + name: 'UC Browser' + version: '' #Tenta Browser #It should be checked before Chrome since the UA contains the Chrome @@ -604,6 +685,97 @@ engine: default: 'Webkit' +# Firefox Rocket +- regex: 'Rocket/(\d+[\.\d]+)' + name: 'Firefox Rocket' + version: '$1' + engine: + default: 'Webkit' + +# Web Explorer +- regex: 'Web Explorer/(\d+[\.\d]+).*Chrome' + name: 'Web Explorer' + version: '$1' + engine: + default: 'Webkit' + +# Seznam Browser +- regex: 'SznProhlizec/(\d+[\.\d]+)' + name: 'Seznam Browser' + version: '$1' + engine: + default: 'Blink' + +# SogouMobileBrowser +- regex: 'SogouMobileBrowser/(\d+[\.\d]+)' + name: 'Sogou Mobile Browser' + version: '$1' + engine: + default: '' # multi engine -- WebKit or Blink + +# Mint Browser +- regex: 'Mint Browser/(\d+[\.\d]+)' + name: 'Mint Browser' + version: '$1' + engine: + default: '' # multi engine -- WebKit or Blink + +# Ecosia +- regex: 'Ecosia (?:android|ios)@(\d+[\.\d]+)' + name: 'Ecosia' + version: '$1' + engine: + default: '' # multi engine -- WebKit or Blink + +# CM Browser +- regex: 'ACHEETAHI' + name: 'CM Browser' + version: '' + engine: + default: '' # multi engine -- WebKit or Blink + +# Kiwi Browser +- regex: 'Kiwi Chrome' + name: 'Kiwi' + version: '' + engine: + default: '' # multi engine -- WebKit or Blink + +# 2345 Browser +- regex: 'Mb2345Browser/(\d+[\.\d]+)' + name: '2345 Browser' + version: '$1' + engine: + default: '' # multi engine -- WebKit or Blink + +# QtWebEngine +- regex: 'QtWebEngine/(\d+[\.\d]+)' + name: 'QtWebEngine' + version: '$1' + engine: + default: '' # multi engine -- WebKit or Blink + +#Mobile Silk +- regex: 'Silk/(\d+[\.\d]+) like Chrome' + name: 'Mobile Silk' + version: '$1' + engine: + default: 'Blink' +- regex: 'Silk(?:/(\d+[\.\d]+))?' + name: 'Mobile Silk' + version: '$1' + engine: + default: 'WebKit' + +# Chrome Webview +- regex: 'Version/.* Chrome(?:/(\d+[\.\d]+))?' + name: 'Chrome Webview' + version: '$1' + engine: + default: 'WebKit' + versions: + 28: 'Blink' + #Chrome - regex: 'CrMo(?:/(\d+[\.\d]+))?' name: 'Chrome Mobile' @@ -641,7 +813,7 @@ version: '$1' engine: default: 'Blink' -- regex: 'Chrome(?:/(\d+[\.\d]+))?' +- regex: 'Chrome(?!book)(?:/(\d+[\.\d]+))?' name: 'Chrome' version: '$1' engine: @@ -877,7 +1049,7 @@ version: 10.0 engine: default: 'Trident' -- regex: 'Trident/7.0' +- regex: 'Trident/[78].0' name: 'Internet Explorer' version: 11.0 engine: @@ -949,13 +1121,6 @@ name: 'Phoenix' version: '$1' -#Mobile Silk -- regex: 'Silk(?:/(\d+[\.\d]+))?' - name: 'Mobile Silk' - version: '$1' - engine: - default: 'Blink' - #NetFront - regex: 'NetFrontLifeBrowser(?:/(\d+[\.\d]+))?' name: 'NetFront Life' @@ -981,14 +1146,6 @@ name: 'NTENT Browser' version: '$1' -#Obigo -- regex: 'Obigo[ ]?(?:InternetBrowser|Browser)?(?:[ /]([a-z0-9]*))?' - name: 'Obigo' - version: '$1' -- regex: 'Obigo|Teleca' - name: 'Obigo' - version: '' - #Odyssey Web Browser - regex: 'Odyssey Web Browser(?:.*OWB/(\d+[\.\d]+))?' name: 'Odyssey Web Browser' diff --git a/device_detector/regexes/upstream/client/mobile_apps.yml b/device_detector/regexes/upstream/client/mobile_apps.yml index c252fea..26ee287 100644 --- a/device_detector/regexes/upstream/client/mobile_apps.yml +++ b/device_detector/regexes/upstream/client/mobile_apps.yml @@ -161,3 +161,27 @@ regex: 'jp.co.yahoo.android.yjtop/([\d\.]+)' name: 'Yahoo! Japan' version: '$1' +- + regex: 'RSSRadio/([\d]+)?' + name: 'RSSRadio' + version: '$1' +- + regex: 'SogouSearch Android[\d\.]+ version([\d\.]+)?' + name: 'SogouSearch App' + version: '$1' +- + regex: 'NewsArticle/([\d\.]+)?' + name: 'NewsArticle App' + version: '$1' +- + regex: 'tieba/([\d\.]+)?' + name: 'tieba' + version: '$1' +- + regex: 'com\.douban\.group/([\d\.]+)?' + name: 'douban App' + version: '$1' +- + regex: 'BingWeb/([\d\.]+)?' + name: 'BingWebApp' + version: '$1' diff --git a/device_detector/regexes/upstream/client/pim.yml b/device_detector/regexes/upstream/client/pim.yml index fbd9728..408f2f4 100644 --- a/device_detector/regexes/upstream/client/pim.yml +++ b/device_detector/regexes/upstream/client/pim.yml @@ -43,4 +43,9 @@ - regex: 'DAVdroid(?:/(\d+[\.\d]+))?' name: 'DAVdroid' + version: '$1' + +# SeaMonkey +- regex: '(?:SeaMonkey|Iceape)(?:/(\d+[\.\d]+))?' + name: 'SeaMonkey' version: '$1' \ No newline at end of file diff --git a/device_detector/regexes/upstream/device/mobiles.yml b/device_detector/regexes/upstream/device/mobiles.yml index f4abc28..ce190b0 100644 --- a/device_detector/regexes/upstream/device/mobiles.yml +++ b/device_detector/regexes/upstream/device/mobiles.yml @@ -54,10 +54,12 @@ SFR: # HTC HTC: - regex: 'HTC|Sprint (?:APA|ATP)|ADR(?!910L)[a-z0-9]+|NexusHD2|Amaze[ _]4G[);/ ]|(Desire|Sensation|Evo ?3D|IncredibleS|Wildfire|Butterfly)[ _]?([^;/]+) Build|(Amaze[ _]4G|One ?[XELSV\+]+)[);/ ]|SPV E6[05]0|One M8|X525a|PG86100|PC36100|XV6975|PJ83100[);/ ]|2PYB2|0PJA10|0PJA2' + regex: 'HTC|Sprint (?:APA|ATP)|ADR(?!910L)[a-z0-9]+|NexusHD2|Amaze[ _]4G[);/ ]|(Desire|Sensation|Evo ?3D|IncredibleS|Wildfire|Butterfly)[ _]?([^;/]+) Build|(Amaze[ _]4G|One ?[XELSV\+]+)[);/ ]|SPV E6[05]0|One M8|X525a|PG86100|PC36100|XV6975|PJ83100[);/ ]|2PYB2|2PZC5|0PJA10|0PJA2' device: 'smartphone' models: # explicit smartphone models + - regex: '2PZC5[);/ ]' + model: 'U11' - regex: 'XV6975[);/ ]' model: 'Imagio' - regex: 'PG86100[);/ ]' @@ -511,20 +513,42 @@ AllCall: # Bravis Bravis: - regex: 'Bravis|A501 Bright|NB(?:10[56]|751|7[145])|NP101' + regex: 'Bravis[ _]|A501 Bright|NB(?:106M|10[1-8]|751|7[145]|8[57]1|76)|NP101|NP 104 3G|B501' device: 'smartphone' models: - regex: 'A501 Bright' model: 'A501 Bright' + - regex: 'Bravis[_ ]X500' + model: 'Trace Pro' + - regex: 'Bravis[_ ]A506' + model: 'Crystal' + - regex: 'Bravis[_ ]A553' + model: 'Discovery' + - regex: 'BRAVIS[ _]TAU' + model: 'Tau' + - regex: 'BRAVIS[ _]DELTA' + model: 'Delta' + - regex: 'BRAVIS[ _]TREND' + model: 'Trend' + - regex: 'B501' + model: 'Easy' + - regex: 'BRAVIS[ ]A554' + model: 'A554 Grand' + - regex: 'BRAVIS[ _]SLIM[ _]3G' + model: 'Slim 3G' + device: 'tablet' - regex: 'Bravis[_ ]([^;\)]+) Build' model: '$1' - - regex: '(NB(?:10[156]|751|7[145])|NP101)' + - regex: '(NB(?:106M|10[1-8]|751|7[145]|8[57]1|76)|NP101)' model: '$1' device: 'tablet' + - regex: 'NP 104 3G' + model: 'NP104 3G' + device: 'tablet' # Acer Acer: - regex: 'acer|(?