device_detector 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -5
  3. data/CHANGELOG.md +3 -1
  4. data/README.md +5 -5
  5. data/Rakefile +16 -12
  6. data/lib/device_detector.rb +15 -0
  7. data/lib/device_detector/memory_cache.rb +21 -14
  8. data/lib/device_detector/os.rb +6 -3
  9. data/lib/device_detector/version.rb +3 -1
  10. data/regexes/bots.yml +73 -7
  11. data/regexes/client/browsers.yml +80 -2
  12. data/regexes/client/feed_readers.yml +7 -7
  13. data/regexes/client/libraries.yml +13 -1
  14. data/regexes/client/mediaplayers.yml +9 -5
  15. data/regexes/client/mobile_apps.yml +21 -0
  16. data/regexes/device/mobiles.yml +5616 -402
  17. data/regexes/device/televisions.yml +1 -1
  18. data/regexes/oss.yml +71 -13
  19. data/spec/device_detector/memory_cache_spec.rb +51 -19
  20. data/spec/device_detector_spec.rb +26 -55
  21. data/spec/fixtures/client/browser.yml +221 -96
  22. data/spec/fixtures/client/feed_reader.yml +0 -6
  23. data/spec/fixtures/client/library.yml +25 -1
  24. data/spec/fixtures/client/mediaplayer.yml +0 -12
  25. data/spec/fixtures/client/mobile_app.yml +24 -0
  26. data/spec/fixtures/detector/bots.yml +168 -3
  27. data/spec/fixtures/detector/desktop.yml +1422 -1422
  28. data/spec/fixtures/detector/feature_phone.yml +21 -1
  29. data/spec/fixtures/detector/feed_reader.yml +18 -5
  30. data/spec/fixtures/detector/mediaplayer.yml +33 -3
  31. data/spec/fixtures/detector/mobile_apps.yml +55 -6
  32. data/spec/fixtures/detector/phablet.yml +924 -164
  33. data/spec/fixtures/detector/smartphone-1.yml +4654 -4655
  34. data/spec/fixtures/detector/smartphone-10.yml +12362 -0
  35. data/spec/fixtures/detector/smartphone-11.yml +7639 -0
  36. data/spec/fixtures/detector/smartphone-2.yml +4232 -4247
  37. data/spec/fixtures/detector/smartphone-3.yml +4348 -4237
  38. data/spec/fixtures/detector/smartphone-4.yml +4110 -4103
  39. data/spec/fixtures/detector/smartphone-5.yml +5651 -2716
  40. data/spec/fixtures/detector/smartphone-6.yml +9896 -0
  41. data/spec/fixtures/detector/smartphone-7.yml +9899 -0
  42. data/spec/fixtures/detector/smartphone-8.yml +9945 -0
  43. data/spec/fixtures/detector/smartphone-9.yml +9916 -0
  44. data/spec/fixtures/detector/smartphone.yml +4114 -4013
  45. data/spec/fixtures/detector/tablet-1.yml +3857 -3857
  46. data/spec/fixtures/detector/tablet-2.yml +6681 -1787
  47. data/spec/fixtures/detector/tablet-3.yml +5134 -0
  48. data/spec/fixtures/detector/tablet.yml +3383 -3406
  49. data/spec/fixtures/detector/tv.yml +338 -24
  50. data/spec/fixtures/detector/unknown.yml +0 -120
  51. data/spec/fixtures/parser/oss.yml +135 -0
  52. metadata +17 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a27d0d636166a8e3c41c27b16c01ce3777b643f3
4
- data.tar.gz: 3ac5d4d9e1d5e0a6f0d067b34831dddd044a4fd8
3
+ metadata.gz: b954941fa6ffb4b5963131549ef4887c7624a234
4
+ data.tar.gz: 153de5187d3654b3c7126f3af606364d434ba14d
5
5
  SHA512:
6
- metadata.gz: 842e06afa0352c0dd14058d9cd56f6d2de0a71d77de5faeab75cb0f3ba394678c3cac2befe11bae89b91083155c6733511723bcffb0f70c53ec32360a697fe3d
7
- data.tar.gz: 4944fc4321e266f1ba394cc69f25663777eda7bc416bbb770d1612314bcfd909f23b684fc2e605239eed6b331768dd51fdf04e9c366f03a44a53bb90fc091d10
6
+ metadata.gz: 7dc3c1599e1296ddc0f32b9cdafc3480a2ce50145222500b2d446a79eab0c282d1658d5bbf2a704bb4966293bbcef4fc2e7e84ccd09905c49a397c6fbbe8665f
7
+ data.tar.gz: f68295aa71c62c14e3e2bb204fa8186e91447d1e640d536315ea711bc922de63190b2c737b665da768e2c0fb682d4f3037f4182ec869f2f55fecfa93f1836b28
@@ -2,13 +2,9 @@ language: ruby
2
2
  sudo: false
3
3
  dist: precise
4
4
  rvm:
5
- - 1.9.3
6
- - 2.0.0-p648
7
- - 2.1.10
8
- - 2.2.10
9
- - 2.3.7
10
5
  - 2.4.4
11
6
  - 2.5.0
7
+ - 2.6.2
12
8
  before_install:
13
9
  - gem update --system
14
10
  - gem --version
@@ -1,5 +1,8 @@
1
1
  # Change Log
2
2
 
3
+ ## [1.0.2]
4
+ - Updated detection rules from upstream on 2019-08-05
5
+
3
6
  ## [1.0.1]
4
7
  - Updated detection rules from upstream on 2018-04-27
5
8
 
@@ -40,4 +43,3 @@
40
43
  - Added rake task for automatic generation of supported and detectable clients and devices
41
44
  - Updated detection rules
42
45
  - Fixed device type detection, when type is specified on top level of a nested regex
43
-
data/README.md CHANGED
@@ -47,7 +47,7 @@ client.os_full_version # => '8'
47
47
 
48
48
  # For many devices, you can also query the device name (usually the model name)
49
49
  client.device_name # => 'iPhone 5'
50
- # Device types can be one of the following: desktop, smartphone, tablet, console,
50
+ # Device types can be one of the following: desktop, smartphone, tablet, console,
51
51
  # portable media player, tv, car browser, camera
52
52
  client.device_type # => 'smartphone'
53
53
  ```
@@ -134,19 +134,19 @@ useragent 4.450000 0.000000 4.450000 ( 4.452741)
134
134
 
135
135
  ## Detectable clients, bots and devices
136
136
 
137
- Updated on 2018-04-27
137
+ Updated on 2019-08-06
138
138
 
139
139
  ### Bots
140
140
 
141
- 360Spider, Aboundexbot, Acoon, AddThis.com, ADMantX, aHrefs Bot, Alexa Crawler, Amorank Spider, Analytics SEO Crawler, ApacheBench, Applebot, archive.org bot, Ask Jeeves, Backlink-Check.de, BacklinkCrawler, Baidu Spider, BazQux Reader, BingBot, BitlyBot, Blekkobot, BLEXBot Crawler, Bloglovin, Blogtrottr, Bountii Bot, Browsershots, BUbiNG, Butterfly Robot, CareerBot, Castro 2, Catchpoint, ccBot crawler, Charlotte, Cliqzbot, CloudFlare Always Online, CloudFlare AMP Fetcher, Collectd, CommaFeed, CSS Certificate Spider, Cốc Cốc Bot, Datadog Agent, Dataprovider, Daum, Dazoobot, Discobot, Domain Re-Animator Bot, DotBot, DuckDuckGo Bot, Easou Spider, EMail Exractor, EmailWolf, evc-batch, ExaBot, ExactSeek Crawler, Ezooms, Facebook External Hit, Feed Wrangler, Feedbin, FeedBurner, Feedly, Feedspot, Fever, Findxbot, Flipboard, Generic Bot, Genieo Web filter, Gigablast, Gigabot, Gluten Free Crawler, Gmail Image Proxy, Goo, Google PageSpeed Insights, Google Partner Monitoring, Google Structured Data Testing Tool, Googlebot, Grapeshot, Heritrix, Heureka Feed, HTTPMon, HubPages, HubSpot, ICC-Crawler, ichiro, IIS Site Analysis, Inktomi Slurp, IP-Guide Crawler, IPS Agent, Kouio, Larbin web crawler, Let's Encrypt Validation, Lighthouse, Linkdex Bot, LinkedIn Bot, LTX71, Lycos, Magpie-Crawler, MagpieRSS, Mail.Ru Bot, masscan, Meanpath Bot, MetaInspector, MetaJobBot, Mixrank Bot, MJ12 Bot, Mnogosearch, MojeekBot, Monitor.Us, Munin, Nagios check_http, NalezenCzBot, Netcraft Survey Bot, netEstate, NetLyzer FastProbe, NetResearchServer, Netvibes, NewsBlur, NewsGator, NLCrawler, Nmap, Nutch-based Bot, Octopus, Omgili bot, Openindex Spider, OpenLinkProfiler, OpenWebSpider, Orange Bot, Outbrain, PagePeeker, PaperLiBot, Phantomas, PHP Server Monitor, Picsearch bot, Pingdom Bot, Pinterest, PocketParser, Pompos, PritTorrent, QuerySeekerSpider, Qwantify, Rainmeter, RamblerMail Image Proxy, Reddit Bot, Riddler, Rogerbot, ROI Hunter, SafeDNSBot, Scooter, ScoutJet, Scrapy, Screaming Frog SEO Spider, ScreenerBot, Semrush Bot, Sensika Bot, Sentry Bot, SEOENGBot, SEOkicks-Robot, Seoscanners.net, Server Density, Seznam Bot, Seznam Email Proxy, Seznam Zbozi.cz, ShopAlike, ShopWiki, SilverReader, SimplePie, SISTRIX Crawler, Site24x7 Website Monitoring, SiteSucker, Sixy.ch, Skype URI Preview, Slackbot, Sogou Spider, Soso Spider, Sparkler, Speedy, Spinn3r, Sputnik Bot, sqlmap, SSL Labs, StatusCake, Superfeedr Bot, Survey Bot, Tarmot Gezgin, TelgramBot, TinEye Crawler, Tiny Tiny RSS, TLSProbe, Trendiction Bot, TurnitinBot, TweetedTimes Bot, Tweetmeme Bot, Twitterbot, UkrNet Mail Proxy, UniversalFeedParser, Uptime Robot, Uptimebot, URLAppendBot, Vagabondo, Visual Site Mapper Crawler, W3C CSS Validator, W3C I18N Checker, W3C Link Checker, W3C Markup Validation Service, W3C MobileOK Checker, W3C Unified Validator, Wappalyzer, WebbCrawler, WebSitePulse, WebThumbnail, WeSEE:Search, Willow Internet Crawler, WordPress, Wotbox, YaCy, Yahoo Gemini, Yahoo! Cache System, Yahoo! Link Preview, Yahoo! Slurp, Yandex Bot, Yeti/Naverbot, Yottaa Site Monitor, Youdao Bot, Yourls, Yunyun Bot, Zao, zgrab, Zookabot, ZumBot
141
+ 360Spider, Aboundexbot, Acoon, AddThis.com, ADMantX, aHrefs Bot, Alexa Crawler, Alexa Site Audit, Amorank Spider, Analytics SEO Crawler, ApacheBench, Applebot, Arachni, archive.org bot, Ask Jeeves, Backlink-Check.de, BacklinkCrawler, Baidu Spider, BazQux Reader, BingBot, BitlyBot, Blekkobot, BLEXBot Crawler, Bloglovin, Blogtrottr, Bountii Bot, Browsershots, BUbiNG, Butterfly Robot, CareerBot, Castro 2, Catchpoint, ccBot crawler, Charlotte, Cliqzbot, CloudFlare Always Online, CloudFlare AMP Fetcher, Collectd, CommaFeed, CSS Certificate Spider, C?c C?c Bot, Datadog Agent, Dataprovider, Daum, Dazoobot, Discobot, Domain Re-Animator Bot, DotBot, DuckDuckGo Bot, Easou Spider, EMail Exractor, EmailWolf, evc-batch, ExaBot, ExactSeek Crawler, Ezooms, Facebook External Hit, Feed Wrangler, Feedbin, FeedBurner, Feedly, Feedspot, Fever, Findxbot, Flipboard, Generic Bot, Genieo Web filter, Gigablast, Gigabot, Gluten Free Crawler, Gmail Image Proxy, Goo, Google PageSpeed Insights, Google Partner Monitoring, Google Search Console, Google Structured Data Testing Tool, Googlebot, Grapeshot, Heritrix, Heureka Feed, HTTPMon, HubPages, HubSpot, ICC-Crawler, ichiro, IIS Site Analysis, Inktomi Slurp, IP-Guide Crawler, IPS Agent, Kouio, Larbin web crawler, Let's Encrypt Validation, Lighthouse, Linkdex Bot, LinkedIn Bot, LTX71, Lycos, Magpie-Crawler, MagpieRSS, Mail.Ru Bot, masscan, Mastodon Bot, Meanpath Bot, MetaInspector, MetaJobBot, Mixrank Bot, MJ12 Bot, Mnogosearch, MojeekBot, Monitor.Us, Munin, Nagios check_http, NalezenCzBot, Netcraft Survey Bot, netEstate, NetLyzer FastProbe, NetResearchServer, Netvibes, NewsBlur, NewsGator, NLCrawler, Nmap, Nutch-based Bot, Octopus, Omgili bot, Openindex Spider, OpenLinkProfiler, OpenWebSpider, Orange Bot, Outbrain, PagePeeker, PaperLiBot, Phantomas, PHP Server Monitor, Picsearch bot, Pingdom Bot, Pinterest, PocketParser, Pompos, PritTorrent, QuerySeekerSpider, Quora Link Preview, Qwantify, Rainmeter, RamblerMail Image Proxy, Reddit Bot, Riddler, Rogerbot, ROI Hunter, RSSRadio Bot, SafeDNSBot, Scooter, ScoutJet, Scrapy, Screaming Frog SEO Spider, ScreenerBot, Semrush Bot, Sensika Bot, Sentry Bot, SEOENGBot, SEOkicks-Robot, Seoscanners.net, Server Density, Seznam Bot, Seznam Email Proxy, Seznam Zbozi.cz, ShopAlike, ShopWiki, SilverReader, SimplePie, SISTRIX Crawler, Site24x7 Website Monitoring, SiteSucker, Sixy.ch, Skype URI Preview, Slackbot, Snapchat Proxy, Sogou Spider, Soso Spider, Sparkler, Speedy, Spinn3r, Spotify, Sputnik Bot, sqlmap, SSL Labs, StatusCake, Superfeedr Bot, Survey Bot, Tarmot Gezgin, TelegramBot, TinEye Crawler, Tiny Tiny RSS, TLSProbe, Trendiction Bot, TurnitinBot, TweetedTimes Bot, Tweetmeme Bot, Twitterbot, UkrNet Mail Proxy, UniversalFeedParser, Uptime Robot, Uptimebot, URLAppendBot, Vagabondo, Visual Site Mapper Crawler, VK Share Button, W3C CSS Validator, W3C I18N Checker, W3C Link Checker, W3C Markup Validation Service, W3C MobileOK Checker, W3C Unified Validator, Wappalyzer, WebbCrawler, WebPageTest, WebSitePulse, WebThumbnail, WeSEE:Search, Willow Internet Crawler, WordPress, Wotbox, YaCy, Yahoo Gemini, Yahoo! Cache System, Yahoo! Link Preview, Yahoo! Slurp, Yandex Bot, Yeti/Naverbot, Yottaa Site Monitor, Youdao Bot, Yourls, Yunyun Bot, Zao, zgrab, Zookabot, ZumBot
142
142
 
143
143
  ### Clients
144
144
 
145
- 360 Browser, 360 Phone Browser, ABrowse, aiohttp, Airmail, Akregator, Aloha Browser, Amaya, Amiga Aweb, Amiga Voyager, Amigo, Android Browser, AndroidDownloadManager, ANT Fresco, AntennaPod, ANTGalio, Apple News, Apple PubSub, Arora, Atomic Web Browser, Avant Browser, B-Line, Baidu Browser, Baidu Spark, Banshee, Barca, BashPodder, Beonex, BeyondPod, BlackBerry Browser, Boxee, bPod, Brave, BriskBard, BrowseX, Bunjalloo, Camino, Castro, Castro 2, Charon, Cheshire, Chrome, Chrome Frame, Chrome Mobile, Chrome Mobile iOS, ChromePlus, Chromium, Clementine, Coast, Coc Coc, CometBird, Comodo Dragon, Conkeror, CoolNovo, curl, Cyberfox, DAVdroid, dbrowser, Deepnet Explorer, Dillo, DoggCatcher, Dolphin, Dooble, Dorado, Downcast, Element Browser, Elinks, Epic, Espial TV Browser, Facebook, Facebook Messenger, Faraday, FeedDemon, Feeddler RSS Reader, FeedR, Fennec, Firebird, Firefox, Firefox Focus, Firefox Mobile, Fireweb, Fireweb Navigator, Flock, Fluid, FlyCast, Foobar2000, Galeon, GNOME Web, Go-http-client, Google Earth, Google HTTP Java Client, Google Play Newsstand, Google Plus, gPodder, Guzzle (PHP HTTP Client), HotJava, HTTP_Request2, IBrowse, iCab, iCab Mobile, iCatcher, IceDragon, Iceweasel, IE Mobile, Instacast, Internet Explorer, Iridium, Iron, Isivioo, iTunes, Jasmine, Java, JetBrains Omea Reader, Jig Browser, K-meleon, Kapiko, Kazehakase, Kindle Browser, Kodi, Konqueror, Kylo, LG Browser, Liebao, Liferea, Line, Links, Lotus Notes, LuaKit, Lunascape, Lynx, MailBar, Maxthon, Mechanize, MediaMonkey, Mercury, MicroB, Microsoft Edge, Microsoft Outlook, Midori, Miro, MIUI Browser, Mobile Safari, Mobile Silk, NCSA Mosaic, NetFront, NetFront Life, NetNewsWire, NetPositive, Netscape, NetSurf, Newsbeuter, NewsBlur, NewsBlur Mobile App, NexPlayer, Nightingale, Nokia Browser, Nokia OSS Browser, Nokia Ovi Browser, Obigo, Odyssey Web Browser, Off By One, OkHttp, OmniWeb, ONE Browser, Openwave Mobile Browser, Opera, Opera Mini, Opera Mobile, Opera Next, Oregano, Otter Browser, Outlook Express, Overcast, Pale Moon, Palm Blazer, Palm Pre, Palm WebPro, Palmscape, Perl, Phoenix, Pinterest, Player FM, Pocket Casts, Podcasts, Podcat, Podcatcher Deluxe, Podkicker, Polaris, Polarity, Postbox, PritTorrent, Puffin, Pulp, Python Requests, Python urllib, QQ Browser, QuickTime, QupZilla, Qutebrowser, ReadKit, Reeder, Rekonq, RockMelt, RSS Bandit, RSS Junkie, RSSOwl, Safari, Sailfish Browser, Samsung Browser, SEMC-Browser, Seraphic Sraf, Shiira, Sina Weibo, Skyfire, Sleipnir, Snowshoe, Sogou Explorer, Songbird, Stagefright, Streamy, Stringer, SubStream, Sunrise, SuperBird, Swiftfox, The Bat!, Thunderbird, Tizen Browser, TweakStyle, UC Browser, Vision Mobile Browser, Vivaldi, VLC, Waterfox, WebPositive, WeChat, WeTab Browser, Wget, WhatsApp, Winamp, Windows Media Player, wOSBrowser, WWW-Mechanize, XBMC, Xiino, Yandex Browser, YouTube
145
+ 360 Browser, 360 Phone Browser, ABrowse, aiohttp, Airmail, Akregator, Aloha Browser, Amaya, Amiga Aweb, Amiga Voyager, Amigo, Android Browser, AndroidDownloadManager, ANT Fresco, AntennaPod, ANTGalio, AOL Shield, Apple News, Apple PubSub, Arora, Atomic Web Browser, Audacious, Avant Browser, Avast Secure Browser, B-Line, Baidu Browser, Baidu Spark, Banshee, Barca, BashPodder, Beaker Browser, Beonex, BeyondPod, BlackBerry Browser, Boxee, bPod, Brave, Breaker, BriskBard, BrowseX, Bunjalloo, Camino, Castro, Castro 2, Charon, Cheshire, Chrome, Chrome Frame, Chrome Mobile, Chrome Mobile iOS, ChromePlus, Chromium, Clementine, Coast, Coc Coc, CometBird, Comodo Dragon, Conkeror, CoolNovo, Cunaguaro, curl, Cyberfox, DAVdroid, dbrowser, Deepnet Explorer, Deezer, Dillo, DoggCatcher, Dolphin, Dooble, Dorado, Downcast, Element Browser, Elinks, Epic, Espial TV Browser, Facebook, Facebook Messenger, Faraday, FeedDemon, Feeddler RSS Reader, FeedR, Fennec, Firebird, Firefox, Firefox Focus, Firefox Mobile, Firefox Rocket, Fireweb, Fireweb Navigator, Flock, Fluid, FlyCast, Foobar2000, Galeon, GNOME Web, Go-http-client, Google Earth, Google HTTP Java Client, Google Play Newsstand, Google Plus, gPodder, Guzzle (PHP HTTP Client), Headless Chrome, HotJava, HTTP_Request2, HTTPie, IBrowse, iCab, iCab Mobile, iCatcher, IceDragon, Iceweasel, IE Mobile, Instacast, Internet Explorer, Iridium, Iron, Isivioo, iTunes, Jasmine, Java, JetBrains Omea Reader, Jig Browser, K-meleon, Kapiko, Kazehakase, Kindle Browser, Kodi, Konqueror, Kylo, LG Browser, libdnf, Liebao, Liferea, Line, Links, Lotus Notes, LuaKit, Lunascape, Lynx, MailBar, Maxthon, Mechanize, MediaMonkey, Mercury, MicroB, Microsoft Edge, Microsoft Outlook, Midori, Miro, MIUI Browser, Mobile Safari, Mobile Silk, NCSA Mosaic, NetFront, NetFront Life, NetNewsWire, NetPositive, Netscape, NetSurf, Newsbeuter, NewsBlur, NewsBlur Mobile App, NexPlayer, Nightingale, Nokia Browser, Nokia OSS Browser, Nokia Ovi Browser, NTENT Browser, Obigo, Odyssey Web Browser, Off By One, OkHttp, OmniWeb, ONE Browser, Openwave Mobile Browser, Opera, Opera Mini, Opera Mobile, Opera Next, Opera Touch, Oppo Browser, Oregano, Otter Browser, Outlook Express, Overcast, Pale Moon, Palm Blazer, Palm Pre, Palm WebPro, Palmscape, Perl, Phoenix, Pinterest, Player FM, Pocket Casts, Podcast & Radio Addict, Podcast Republic, Podcasts, Podcat, Podcatcher Deluxe, Podkicker, Polaris, Polarity, Postbox, PritTorrent, Puffin, Pulp, Python Requests, Python urllib, QQ Browser, QuickTime, QupZilla, Qutebrowser, Qwant Mobile, ReadKit, Reeder, Rekonq, RockMelt, RSS Bandit, RSS Junkie, RSSOwl, RSSRadio, Safari, Sailfish Browser, Samsung Browser, SEMC-Browser, Seraphic Sraf, Shiira, Sina Weibo, Skyfire, Sleipnir, Snowshoe, Sogou Explorer, Songbird, Stagefright, Streamy, Stringer, SubStream, Sunrise, SuperBird, Swiftfox, TenFourFox, Tenta Browser, The Bat!, Thunderbird, Tizen Browser, TweakStyle, UC Browser, urlgrabber (yum), Vision Mobile Browser, Vivaldi, VLC, Waterfox, WebPositive, WeChat, WeTab Browser, Wget, WhatsApp, Winamp, Windows Media Player, wOSBrowser, WWW-Mechanize, XBMC, Xiino, Yahoo! Japan, Yandex Browser, Yelp Mobile, YouTube
146
146
 
147
147
  ### Devices
148
148
 
149
- 3Q, 4Good, Acer, Ainol, Airness, Airties, Alcatel, Allview, Altech UEC, Amazon, Amoi, Apple, Archos, Arnova, ARRIS, Asus, Audiovox, Avvio, Axxion, Azumi Mobile, BangOlufsen, Barnes & Noble, Becker, Beetel, BenQ, BenQ-Siemens, BGH, Bird, Bitel, Blackview, Blaupunkt, Blu, Bmobile, Boway, bq, Bravis, Brondi, Bush, Capitel, Captiva, Carrefour, Casio, Cat, Celkon, Changhong, Cherry Mobile, China Mobile, CnM, Coby Kyros, Compal, ConCorde, Condor, Coolpad, Cowon, CreNova, Cricket, Crius Mea, Crosscall, Cube, CUBOT, Cyrus, Danew, Datang, Dbtel, Dell, Denver, Desay, DEXP, Dicam, Digma, DMM, DNS, DoCoMo, Doogee, Doov, Dopod, Doro, Dune HD, E-Boda, Easypix, EBEST, ECS, EKO, Elephone, Energy Sistem, Ericsson, Ericy, Eton, eTouch, Evertek, Evolveo, Explay, Ezio, Ezze, Fairphone, Fly, Foxconn, Freetel, Fujitsu, Garmin-Asus, Gemini, Gigabyte, Gigaset, Gionee, GOCLEVER, Goly, Google, Gradiente, Grundig, Haier, Hasee, Hi-Level, Hisense, Homtom, Hosin, HP, HTC, Huawei, Humax, Hyundai, i-Joy, i-mate, i-mobile, iBall, iBerry, IconBIT, Ikea, iKoMo, iNew, Infinix, Inkti, Innostream, INQ, Intek, Intex, Inverto, iOcean, iTel, JAY-Tech, Jiayu, Jolla, K-Touch, Karbonn, Kazam, KDDI, Kiano, Kingsun, Komu, Konka, Konrow, Koobee, KOPO, Koridy, KT-Tech, Kumai, Kyocera, Landvo, Lanix, Lava, LCT, Le Pan, LeEco, Lenco, Lenovo, Lexand, Lexibook, LG, Lingwin, Loewe, Logicom, LYF, M.T.T., Majestic, Manta Multimedia, Mecer, Mediacom, MediaTek, Medion, MEEG, Meizu, Memup, Metz, MEU, MicroMax, Microsoft, Mio, Mitsubishi, MIXC, MLLED, Mobistel, Modecom, Mofut, Motorola, Mpman, MSI, MyPhone, NEC, Neffos, Netgear, Newgen, Nexian, NextBook, NGM, Nikon, Nintendo, Noain, Noblex, Nokia, Nomi, Nous, Nvidia, O2, Odys, Onda, OnePlus, OPPO, Opsson, Orange, Ouki, OUYA, Overmax, Oysters, Palm, Panasonic, Pantech, PEAQ, Pentagram, Philips, phoneOne, Pioneer, Ployer, Point of View, Polaroid, PolyPad, Pomp, Positivo, PPTV, Prestigio, ProScan, PULID, Qilive, QMobile, Qtek, Quechua, Ramos, RCA Tablets, Readboy, Rikomagic, RIM, Roku, Rover, Sagem, Samsung, Sanyo, Sega, Selevision, Sencor, Sendo, Senseit, SFR, Sharp, Siemens, Skyworth, Smart, Smartfren, Smartisan, Softbank, Sony, Spice, Star, STK, Stonex, Storex, Sumvision, SunVan, SuperSonic, Supra, Symphony, T-Mobile, TB Touch, TCL, TechniSat, TechnoTrend, Teclast, Tecno Mobile, Telefunken, Telenor, Telit, Tesco, Tesla, teXet, ThL, Thomson, TIANYU, TiPhone, Tolino, Toplux, Toshiba, TrekStor, Trevi, Tunisie Telecom, Turbo-X, TVC, Ulefone, UMIDIGI, Uniscope, Unknown, Unowhy, UTStarcom, Vastking, Vertu, Verykool, Vestel, Videocon, Videoweb, ViewSonic, Vitelcom, Vivo, Vizio, VK Mobile, Vodafone, Voto, Voxtel, Walton, WellcoM, Wexler, Wiko, Wileyfox, Wolder, Wolfgang, Wonu, Woxter, Xiaomi, Xolo, Yarvik, Ytone, Yuandao, Yusun, Zeemi, Zen, Zonda, Zopo, ZTE
149
+ 3Q, 4Good, Acer, Advan, Advance, AGM, Ainol, Airness, Airties, Aiwa, Akai, Alcatel, AllCall, Allview, Altech UEC, altron, Amazon, AMGOO, Amoi, ANS, Apple, Archos, Arian Space, Ark, Arnova, ARRIS, Ask, Assistant, Asus, Audiovox, AVH, Avvio, Axxion, Azumi Mobile, BangOlufsen, Barnes & Noble, Becker, Beeline, Beetel, BenQ, BenQ-Siemens, BGH, Bird, Bitel, Black Fox, Blackview, Blaupunkt, Blu, Bluboo, Bluegood, Bmobile, bogo, Boway, bq, Bravis, Brondi, Bush, CAGI, Capitel, Captiva, Carrefour, Casio, Cat, Celkon, Changhong, Cherry Mobile, China Mobile, CnM, Coby Kyros, Comio, Compal, ComTrade Tesla, Concord, ConCorde, Condor, Coolpad, Cowon, CreNova, Crescent, Cricket, Crius Mea, Crosscall, Cube, CUBOT, Cyrus, Danew, Datang, Datsun, Dbtel, Dell, Denver, Desay, DEXP, Dialog, Dicam, Digi, Digicel, Digiland, Digma, DMM, DNS, DoCoMo, Doogee, Doov, Dopod, Doro, Dune HD, E-Boda, E-tel, Easypix, EBEST, Echo Mobiles, ECS, EE, EKO, Eks Mobility, Elenberg, Elephone, Energizer, Energy Sistem, Ergo, Ericsson, Ericy, Essential, Essentielb, Eton, eTouch, Evercoss, Evertek, Evolio, Evolveo, EvroMedia, Explay, Extrem, Ezio, Ezze, Fairphone, FiGO, FinePower, Fly, FNB, Fondi, Forstar, Foxconn, Freetel, Fujitsu, G-TiDE, Garmin-Asus, Gemini, Geotel, Ghia, Gigabyte, Gigaset, Ginzzu, Gionee, GOCLEVER, Goly, GoMobile, Google, Gradiente, Grape, Grundig, Hafury, Haier, HannSpree, Hasee, Hi-Level, Hisense, Homtom, Hoozo, Hosin, HP, HTC, Huawei, Humax, Hyundai, i-Joy, i-mate, i-mobile, iBall, iBerry, IconBIT, iHunt, Ikea, iKoMo, IMO Mobile, Impression, iNew, Infinix, InFocus, Inkti, InnJoo, Innostream, Inoi, INQ, Intek, Intex, Inverto, iOcean, iPro, Irbis, iRola, iTel, iView, JAY-Tech, Jiayu, Jolla, Just5, K-Touch, Kalley, Karbonn, Kazam, KDDI, Kempler & Strauss, Keneksi, Kiano, Kingsun, Kocaso, Kodak, Kogan, Komu, Konka, Konrow, Koobee, KOPO, Koridy, KRONO, Kr�ger&Matz, KT-Tech, Kumai, Kyocera, LAIQ, Land Rover, Landvo, Lanix, Lark, Lava, LCT, Le Pan, Leagoo, Ledstar, LeEco, Lemhoov, Lenco, Lenovo, Leotec, Lexand, Lexibook, LG, Lingwin, Loewe, Logicom, LYF, M.T.T., M4tel, Majestic, Manta Multimedia, Maxwest, Maze, Mecer, Mediacom, MediaTek, Medion, MEEG, MegaFon, Meizu, Memup, Metz, MEU, MicroMax, Microsoft, Mio, Miray, Mitsubishi, MIXC, MLLED, Mobiistar, Mobiola, Mobistel, Modecom, Mofut, Motorola, Movic, Mpman, MSI, MTC, MTN, MyPhone, Myria, MyWigo, Navon, NEC, Neffos, Netgear, NeuImage, Newgen, NEXBOX, Nexian, Nextbit, NextBook, NGM, Nikon, Nintendo, NOA, Noain, Noblex, Nokia, Nomi, Nous, NUU Mobile, Nvidia, NYX Mobile, O+, O2, Obi, Odys, Onda, OnePlus, OPPO, Opsson, Orange, Ouki, OUYA, Overmax, Oysters, Palm, Panacom, Panasonic, Pantech, PCBOX, PCD, PCD Argentina, PEAQ, Pentagram, Philips, phoneOne, Pioneer, Pixus, Ployer, Plum, Point of View, Polaroid, PolyPad, Polytron, Pomp, Positivo, PPTV, Prestigio, Primepad, ProScan, PULID, Q-Touch, Qilive, QMobile, Qtek, Quantum, Quechua, R-TV, Ramos, RCA Tablets, Readboy, Rikomagic, RIM, Riviera, Rokit, Roku, Rover, RT Project, Safaricom, Sagem, Samsung, Sanei, Santin BiTBiZ, Sanyo, Savio, Sega, Selevision, Selfix, Sencor, Sendo, Senseit, Senwa, SFR, Sharp, Shuttle, Siemens, Sigma, Silent Circle, Simbans, Sky, Skyworth, Smart, Smartfren, Smartisan, Softbank, Sonim, Sony, Spice, Star, Starway, STF Mobile, STK, Stonex, Storex, Sumvision, SunVan, SuperSonic, Supra, SWISSMOBILITY, Symphony, T-Mobile, TB Touch, TCL, TechniSat, TechnoTrend, TechPad, Teclast, Tecno Mobile, Telefunken, Telego, Telenor, Telit, Tesco, Tesla, teXet, ThL, Thomson, TIANYU, Timovi, TiPhone, Tolino, Top House, Toplux, Toshiba, Touchmate, TrekStor, Trevi, True, Tunisie Telecom, Turbo-X, TVC, U.S. Cellular, Uhappy, Ulefone, UMIDIGI, Unimax, Uniscope, Unknown, Unnecto, Unonu, Unowhy, UTStarcom, Vastking, Verizon, Vernee, Vertex, Vertu, Verykool, Vestel, Videocon, Videoweb, ViewSonic, Vinsoc, Vitelcom, Vivo, Vizio, VK Mobile, Vodafone, Vonino, Vorago, Voto, Voxtel, Vulcan, Walton, Weimei, WellcoM, Wexler, Wiko, Wileyfox, Wink, Wolder, Wolfgang, Wonu, Woo, Woxter, X-TIGI, X-View, Xiaomi, Xion, Xolo, Yandex, Yarvik, Yes, Yezz, Ytone, Yu, Yuandao, Yusun, Zeemi, Zen, Zenek, Zonda, Zopo, ZTE, Zuum, Zync, ZYQ, �wn
150
150
 
151
151
  ## Maintainers
152
152
 
data/Rakefile CHANGED
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rake'
2
4
  require 'rake/testtask'
3
5
 
4
- $:.unshift 'lib'
6
+ $LOAD_PATH.unshift 'lib'
5
7
  require 'device_detector'
6
8
 
7
9
  Rake::TestTask.new do |t|
@@ -12,14 +14,16 @@ end
12
14
  task default: :test
13
15
 
14
16
  task :detectable_names do
15
- bot_names = DeviceDetector::Bot.new.send(:regexes).map { |r| r[:name] }.uniq.sort_by { |n| n.downcase }
17
+ require 'Date'
18
+
19
+ bot_names = DeviceDetector::Bot.new.send(:regexes).map { |r| r[:name] }.uniq.sort_by(&:downcase)
16
20
  bot_names.delete('$1')
17
- client_names = DeviceDetector::Client.new.send(:regexes).map { |r| r[:name] }.uniq.sort_by { |n| n.downcase }
21
+ client_names = DeviceDetector::Client.new.send(:regexes).map { |r| r[:name] }.uniq.sort_by(&:downcase)
18
22
  client_names.delete('$1')
19
23
  device = DeviceDetector::Device.new
20
24
  device_paths = device.send(:filepaths)
21
25
  device_regexes = device.send(:load_regexes, device_paths)
22
- device_names = device_regexes.flat_map { |dn| dn[1].keys }.uniq.sort_by { |n| n.downcase }
26
+ device_names = device_regexes.flat_map { |dn| dn[1].keys }.uniq.sort_by(&:downcase)
23
27
 
24
28
  today = Date.today.strftime
25
29
 
@@ -41,8 +45,8 @@ task :detectable_names do
41
45
  puts
42
46
  end
43
47
 
44
- PIWIK_REPO_URL = 'https://github.com/piwik/device-detector.git'.freeze
45
- PIWIK_CHECKOUT_LOCATION = '/tmp/piwik_device_detector'.freeze
48
+ PIWIK_REPO_URL = 'https://github.com/matomo-org/device-detector'
49
+ PIWIK_CHECKOUT_LOCATION = '/tmp/matomo_device_detector'
46
50
 
47
51
  def get_latest_piwik_checkout
48
52
  if File.exist?(PIWIK_CHECKOUT_LOCATION)
@@ -54,21 +58,21 @@ end
54
58
 
55
59
  desc 'update regex database from piwik project'
56
60
  task :update_regexes do
57
- top = File.expand_path('..', __FILE__)
61
+ top = File.expand_path(__dir__)
58
62
  get_latest_piwik_checkout
59
63
  system "cp -R #{PIWIK_CHECKOUT_LOCATION}/regexes/* #{top}/regexes"
60
64
  end
61
65
 
62
66
  desc 'update fixtures from piwik project'
63
67
  task :update_fixtures do
64
- top = File.expand_path('..', __FILE__)
68
+ top = File.expand_path(__dir__)
65
69
  get_latest_piwik_checkout
66
70
 
67
71
  fixture_mappings = [
68
- {target_path: "#{top}/spec/fixtures/detector", source_path: 'Tests/fixtures/*.yml'},
69
- {target_path: "#{top}/spec/fixtures/client", source_path: 'Tests/Parser/Client/fixtures/*.yml'},
70
- {target_path: "#{top}/spec/fixtures/parser", source_path: 'Tests/Parser/fixtures/*.yml'},
71
- {target_path: "#{top}/spec/fixtures/device", source_path: 'Tests/Parser/Devices/fixtures/*.yml'},
72
+ { target_path: "#{top}/spec/fixtures/detector", source_path: 'Tests/fixtures/*.yml' },
73
+ { target_path: "#{top}/spec/fixtures/client", source_path: 'Tests/Parser/Client/fixtures/*.yml' },
74
+ { target_path: "#{top}/spec/fixtures/parser", source_path: 'Tests/Parser/fixtures/*.yml' },
75
+ { target_path: "#{top}/spec/fixtures/device", source_path: 'Tests/Parser/Devices/fixtures/*.yml' }
72
76
  ]
73
77
 
74
78
  fixture_mappings.each do |mapping|
@@ -28,6 +28,10 @@ class DeviceDetector
28
28
  client.full_version
29
29
  end
30
30
 
31
+ def os_family
32
+ os.family
33
+ end
34
+
31
35
  def os_name
32
36
  os.name
33
37
  end
@@ -47,6 +51,17 @@ class DeviceDetector
47
51
  def device_type
48
52
  t = device.type
49
53
 
54
+ # Chrome on Android passes the device type based on the keyword 'Mobile'
55
+ # If it is present the device should be a smartphone, otherwise it's a tablet
56
+ # See https://developer.chrome.com/multidevice/user-agent#chrome_for_android_user_agent
57
+ if t.nil? && os.family == 'Android' && ['Chrome', 'Chrome Mobile'].include?(name)
58
+ if user_agent =~ build_regex('Chrome\/[\.0-9]* Mobile')
59
+ t = 'smartphone'
60
+ elsif user_agent =~ build_regex('Chrome\/[\.0-9]* (?!Mobile)')
61
+ t = 'tablet'
62
+ end
63
+ end
64
+
50
65
  if t.nil? && android_tablet_fragment? || opera_tablet?
51
66
  t = 'tablet'
52
67
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class DeviceDetector
2
4
  class MemoryCache
3
-
4
5
  DEFAULT_MAX_KEYS = 5000
6
+ STORES_NIL_VALUE = :__is_nil__
5
7
 
6
8
  attr_reader :data, :max_keys, :lock
7
9
  private :lock
@@ -15,31 +17,37 @@ class DeviceDetector
15
17
  def set(key, value)
16
18
  lock.synchronize do
17
19
  purge_cache
18
- data[String(key)] = value
20
+ # convert nil values into symbol so we know a value is present
21
+ cache_value = value.nil? ? STORES_NIL_VALUE : value
22
+ data[String(key)] = cache_value
23
+ value
19
24
  end
20
25
  end
21
26
 
22
27
  def get(key)
23
- data[String(key)]
24
- end
25
-
26
- def key?(string_key)
27
- data.key?(string_key)
28
+ value, _hit = get_hit(key)
29
+ value
28
30
  end
29
31
 
30
32
  def get_or_set(key, value = nil)
31
33
  string_key = String(key)
32
34
 
33
- if key?(string_key)
34
- get(string_key)
35
- else
36
- value = yield if block_given?
37
- set(string_key, value)
38
- end
35
+ result, hit = get_hit(string_key)
36
+ return result if hit
37
+
38
+ value = yield if block_given?
39
+ set(string_key, value)
39
40
  end
40
41
 
41
42
  private
42
43
 
44
+ def get_hit(key)
45
+ value = data[String(key)]
46
+ is_hit = !value.nil? || value == STORES_NIL_VALUE
47
+ value = nil if value == STORES_NIL_VALUE
48
+ [value, is_hit]
49
+ end
50
+
43
51
  def purge_cache
44
52
  key_size = data.size
45
53
 
@@ -50,6 +58,5 @@ class DeviceDetector
50
58
  data.keys.first(amount_of_keys).each { |key| data.delete(key) }
51
59
  end
52
60
  end
53
-
54
61
  end
55
62
  end
@@ -60,6 +60,7 @@ class DeviceDetector
60
60
  'DFB' => 'DragonFly',
61
61
  'FED' => 'Fedora',
62
62
  'FOS' => 'Firefox OS',
63
+ 'FIR' => 'Fire OS',
63
64
  'BSD' => 'FreeBSD',
64
65
  'GNT' => 'Gentoo',
65
66
  'GTV' => 'Google TV',
@@ -67,6 +68,7 @@ class DeviceDetector
67
68
  'HAI' => 'Haiku OS',
68
69
  'IRI' => 'IRIX',
69
70
  'INF' => 'Inferno',
71
+ 'KOS' => 'KaiOS',
70
72
  'KNO' => 'Knoppix',
71
73
  'KBT' => 'Kubuntu',
72
74
  'LIN' => 'GNU/Linux',
@@ -110,6 +112,7 @@ class DeviceDetector
110
112
  'WTV' => 'WebTV',
111
113
  'WIN' => 'Windows',
112
114
  'WCE' => 'Windows CE',
115
+ 'WIO' => 'Windows IoT',
113
116
  'WMO' => 'Windows Mobile',
114
117
  'WPH' => 'Windows Phone',
115
118
  'WRT' => 'Windows RT',
@@ -124,14 +127,14 @@ class DeviceDetector
124
127
  DOWNCASED_OPERATING_SYSTEMS = OPERATING_SYSTEMS.each_with_object({}){|(short,long),h| h[long.downcase] = short}
125
128
 
126
129
  OS_FAMILIES = {
127
- 'Android' => ['AND', 'CYN', 'REM', 'RZD', 'MLD', 'MCD', 'YNS'],
130
+ 'Android' => ['AND', 'CYN', 'FIR', 'REM', 'RZD', 'MLD', 'MCD', 'YNS'],
128
131
  'AmigaOS' => ['AMG', 'MOR'],
129
132
  'Apple TV' => ['ATV'],
130
133
  'BlackBerry' => ['BLB', 'QNX'],
131
134
  'Brew' => ['BMP'],
132
135
  'BeOS' => ['BEO', 'HAI'],
133
136
  'Chrome OS' => ['COS'],
134
- 'Firefox OS' => ['FOS'],
137
+ 'Firefox OS' => ['FOS', 'KOS'],
135
138
  'Gaming Console' => ['WII', 'PS3'],
136
139
  'Google TV' => ['GTV'],
137
140
  'IBM' => ['OS2'],
@@ -146,7 +149,7 @@ class DeviceDetector
146
149
  'Unix' => ['SOS', 'AIX', 'HPX', 'BSD', 'NBS', 'OBS', 'DFB', 'SYL', 'IRI', 'T64', 'INF'],
147
150
  'WebTV' => ['WTV'],
148
151
  'Windows' => ['WIN'],
149
- 'Windows Mobile' => ['WPH', 'WMO', 'WCE', 'WRT']
152
+ 'Windows Mobile' => ['WPH', 'WMO', 'WCE', 'WRT', 'WIO']
150
153
  }
151
154
 
152
155
  FAMILY_TO_OS = OS_FAMILIES.each_with_object({}) do |(family,oss),h|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class DeviceDetector
2
- VERSION = '1.0.1'
4
+ VERSION = '1.0.2'
3
5
  end
@@ -53,6 +53,14 @@
53
53
  name: 'Alexa Internet'
54
54
  url: 'http://www.alexa.com'
55
55
 
56
+ - regex: 'alexa site audit'
57
+ name: 'Alexa Site Audit'
58
+ category: 'Site Monitor'
59
+ url: 'http://www.alexa.com/help/webmasters'
60
+ producer:
61
+ name: 'Alexa Internet'
62
+ url: 'http://www.alexa.com'
63
+
56
64
  - regex: 'AmorankSpider'
57
65
  name: 'Amorank Spider'
58
66
  category: 'Crawler'
@@ -77,6 +85,14 @@
77
85
  name: 'Apple Inc'
78
86
  url: 'http://www.apple.com'
79
87
 
88
+ - regex: 'Arachni'
89
+ name: 'Arachni'
90
+ category: 'Security Checker'
91
+ url: 'http://www.arachni-scanner.com'
92
+ producer:
93
+ name: 'Sarosys LLC'
94
+ url: 'http://www.sarosys.com/'
95
+
80
96
  - regex: 'Castro 2, Episode Duration Lookup'
81
97
  name: 'Castro 2'
82
98
  category: 'Service Agent'
@@ -498,6 +514,14 @@
498
514
  name: 'NTT Resonant'
499
515
  url: 'http://goo.ne.jp'
500
516
 
517
+ - regex: 'Google Search Console'
518
+ name: 'Google Search Console'
519
+ category: 'Crawler'
520
+ url: 'https://search.google.com/search-console/about'
521
+ producer:
522
+ name: 'Google Inc.'
523
+ url: 'http://www.google.com'
524
+
501
525
  - regex: 'Google Page Speed Insights'
502
526
  name: 'Google PageSpeed Insights'
503
527
  category: 'Site Monitor'
@@ -562,7 +586,7 @@
562
586
  name: 'Visual Meta'
563
587
  url: 'https://www.shopalike.cz/'
564
588
 
565
- - regex: 'Googlebot(-Mobile|-Image|-Video|-News)?|Feedfetcher-Google|Google-Test|Google-Site-Verification|Google Web Preview|AdsBot-Google(-Mobile)?|Google-Adwords-Instant|Mediapartners-Google|Google.*/\+/web/snippet|GoogleProducer|Google[ -]Publisher[ -]Plugin|Google-Shopping-Quality'
589
+ - regex: 'Googlebot(-Mobile|-Image|-Video|-News)?|Feedfetcher-Google|Google-Test|Google-Site-Verification|Google Web Preview|AdsBot-Google(-Mobile)?|Google-Adwords-Instant|APIs-Google|Mediapartners-Google|Google.*/\+/web/snippet|GoogleProducer|Google[ -]Publisher[ -]Plugin|Google-Shopping-Quality|Google-Adwords-DisplayAds|Google-Assess|Google-AdWords-Express|Google-speakr|Google-Read-Aloud'
566
590
  name: 'Googlebot'
567
591
  category: 'Search bot'
568
592
  url: 'http://www.google.com/bot.html'
@@ -704,6 +728,10 @@
704
728
  name: 'Robert Graham'
705
729
  url: 'https://github.com/robertdavidgraham'
706
730
 
731
+ - regex: 'Mastodon/'
732
+ name: 'Mastodon Bot'
733
+ category: 'Social Media Agent'
734
+
707
735
  - regex: 'meanpathbot'
708
736
  name: 'Meanpath Bot'
709
737
  category: 'Search bot'
@@ -839,7 +867,7 @@
839
867
  - regex: 'Octopus [0-9]'
840
868
  name: 'Octopus'
841
869
 
842
- - regex: 'omgilibot'
870
+ - regex: 'omgili(?:bot)?'
843
871
  name: 'Omgili bot'
844
872
  category: 'Search bot'
845
873
  url: 'http://www.omgili.com/Crawler.html'
@@ -931,7 +959,15 @@
931
959
  producer:
932
960
  name: 'Pingdom AB'
933
961
  url: 'https://www.pingdom.com'
934
-
962
+
963
+ - regex: 'Quora Link Preview'
964
+ name: 'Quora Link Preview'
965
+ category: 'Crawler'
966
+ url: ''
967
+ producer:
968
+ name: 'Quora'
969
+ url: 'http://www.quora.com'
970
+
935
971
  - regex: 'RamblerMail'
936
972
  name: 'RamblerMail Image Proxy'
937
973
  category: 'Crawler'
@@ -1211,7 +1247,7 @@
1211
1247
  category: 'Search bot'
1212
1248
 
1213
1249
  - regex: 'TelegramBot'
1214
- name: 'TelgramBot'
1250
+ name: 'TelegramBot'
1215
1251
  url: 'https://telegram.org/blog/bot-revolution'
1216
1252
 
1217
1253
  - regex: 'TLSProbe'
@@ -1326,6 +1362,14 @@
1326
1362
  name: 'WiseGuys'
1327
1363
  url: 'http://www.wise-guys.nl/'
1328
1364
 
1365
+ - regex: 'vkShare; '
1366
+ name: 'VK Share Button'
1367
+ category: 'Crawler'
1368
+ url: 'http://vk.com/dev/Share'
1369
+ producer:
1370
+ name: 'VK'
1371
+ url: 'http://vk.com/'
1372
+
1329
1373
  - regex: 'VSMCrawler'
1330
1374
  name: 'Visual Site Mapper Crawler'
1331
1375
  category: 'Crawler'
@@ -1389,6 +1433,11 @@
1389
1433
  name: 'AliasIO'
1390
1434
  url: 'https://github.com/AliasIO'
1391
1435
 
1436
+ - regex: 'PTST/'
1437
+ name: 'WebPageTest'
1438
+ category: 'Site Monitor'
1439
+ url: 'https://www.webpagetest.org'
1440
+
1392
1441
  - regex: 'WeSEE(:Search)?'
1393
1442
  name: 'WeSEE:Search'
1394
1443
  category: 'Search bot'
@@ -1461,7 +1510,7 @@
1461
1510
  name: 'Yahoo! Inc.'
1462
1511
  url: 'http://www.yahoo.com'
1463
1512
 
1464
- - regex: 'Yandex(SpravBot|ScreenshotBot|MobileBot|AccessibilityBot|ForDomain|Vertis|Market|Catalog|Calendar|Sitelinks|AdNet|Pagechecker|Webmaster|Media|Video|Bot|Images|Antivirus|Direct|Blogs|Favicons|ImageResizer|News(links)?|Metrika|\.Gazeta Bot)|YaDirectFetcher'
1513
+ - regex: 'Yandex(SpravBot|ScreenshotBot|MobileBot|AccessibilityBot|ForDomain|Vertis|Market|Catalog|Calendar|Sitelinks|AdNet|Pagechecker|Webmaster|Media|Video|Bot|Images|Antivirus|Direct|Blogs|Favicons|ImageResizer|Verticals|News(links)?|Metrika|\.Gazeta Bot)|YaDirectFetcher'
1465
1514
  name: 'Yandex Bot'
1466
1515
  category: 'Search bot'
1467
1516
  url: 'http://www.yandex.com/bots'
@@ -1567,6 +1616,14 @@
1567
1616
  name: 'Site24x7'
1568
1617
  url: 'https://www.site24x7.com'
1569
1618
 
1619
+ - regex: 's~snapchat-proxy'
1620
+ name: 'Snapchat Proxy'
1621
+ category: 'Crawler'
1622
+ url: 'https://www.snapchat.com'
1623
+ producer:
1624
+ name: 'Snapchat Inc.'
1625
+ url: 'https://www.snapchat.com'
1626
+
1570
1627
  - regex: "Let's Encrypt validation server"
1571
1628
  name: "Let's Encrypt Validation"
1572
1629
  category: 'Service Agent'
@@ -1662,7 +1719,10 @@
1662
1719
  - regex: 'Server Density Service Monitoring.*'
1663
1720
  name: 'Server Density'
1664
1721
 
1665
- - regex: '(A6-Indexer|nuhk|TsolCrawler|Yammybot|Openbot|Gulper Web Bot|grub-client|Download Demon|SearchExpress|Microsoft URL Control|borg|altavista|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)'
1722
+ - regex: 'RSSRadio \(Push Notification Scanner;support@dorada\.co\.uk\)'
1723
+ name: 'RSSRadio Bot'
1724
+
1725
+ - 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)'
1666
1726
  name: 'Generic Bot'
1667
1727
 
1668
1728
  - regex: '^sentry'
@@ -1671,6 +1731,12 @@
1671
1731
  name: 'Sentry'
1672
1732
  url: 'https://sentry.io'
1673
1733
 
1734
+ - regex: '^Spotify'
1735
+ name: 'Spotify'
1736
+ producer:
1737
+ name: 'Spotify'
1738
+ url: 'https://www.spotify.com'
1739
+
1674
1740
  # Generic detections
1675
1741
 
1676
1742
  - regex: 'Nutch'
@@ -1681,5 +1747,5 @@
1681
1747
  name: 'The Apache Software Foundation'
1682
1748
  url: 'http://www.apache.org/foundation/'
1683
1749
 
1684
- - regex: '[a-z0-9\-_]*((?<!cu|power )bot(?! TAB| ?5[0-9])|crawler|crawl|checker|archiver|transcoder|spider)([^a-z]|$)'
1750
+ - regex: '[a-z0-9\-_]*((?<!cu|power[ _]|m[ _])bot(?![ _]TAB|[ _]?5[0-9])|crawler|crawl|checker|archiver|transcoder|spider)([^a-z]|$)'
1685
1751
  name: 'Generic Bot'