device_detector 1.0.2 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +49 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +5 -6
  5. data/CHANGELOG.md +11 -0
  6. data/README.md +8 -7
  7. data/Rakefile +7 -4
  8. data/device_detector.gemspec +1 -0
  9. data/lib/device_detector/bot.rb +2 -2
  10. data/lib/device_detector/browser.rb +364 -0
  11. data/lib/device_detector/client.rb +11 -2
  12. data/lib/device_detector/device.rb +1168 -22
  13. data/lib/device_detector/memory_cache.rb +5 -5
  14. data/lib/device_detector/metadata_extractor.rb +7 -8
  15. data/lib/device_detector/model_extractor.rb +3 -3
  16. data/lib/device_detector/name_extractor.rb +2 -2
  17. data/lib/device_detector/os.rb +148 -116
  18. data/lib/device_detector/parser.rb +22 -9
  19. data/lib/device_detector/version.rb +1 -1
  20. data/lib/device_detector/version_extractor.rb +10 -2
  21. data/lib/device_detector.rb +73 -40
  22. data/regexes/bots.yml +909 -59
  23. data/regexes/client/browser_engine.yml +14 -2
  24. data/regexes/client/browsers.yml +1356 -241
  25. data/regexes/client/feed_readers.yml +10 -10
  26. data/regexes/client/libraries.yml +75 -1
  27. data/regexes/client/mediaplayers.yml +39 -3
  28. data/regexes/client/mobile_apps.yml +524 -45
  29. data/regexes/client/pim.yml +55 -2
  30. data/regexes/device/cameras.yml +6 -6
  31. data/regexes/device/car_browsers.yml +23 -3
  32. data/regexes/device/consoles.yml +9 -3
  33. data/regexes/device/mobiles.yml +16903 -3199
  34. data/regexes/device/notebooks.yml +114 -0
  35. data/regexes/device/portable_media_player.yml +20 -3
  36. data/regexes/device/shell_tv.yml +117 -0
  37. data/regexes/device/televisions.yml +440 -35
  38. data/regexes/oss.yml +603 -165
  39. data/regexes/vendorfragments.yml +6 -2
  40. data/spec/device_detector/concrete_user_agent_spec.rb +38 -51
  41. data/spec/device_detector/detector_fixtures_spec.rb +36 -37
  42. data/spec/device_detector/device_spec.rb +52 -56
  43. data/spec/device_detector/memory_cache_spec.rb +19 -19
  44. data/spec/device_detector/model_extractor_spec.rb +3 -3
  45. data/spec/device_detector/version_extractor_spec.rb +5 -6
  46. data/spec/device_detector_spec.rb +26 -26
  47. data/spec/fixtures/client/browser.yml +2617 -555
  48. data/spec/fixtures/client/feed_reader.yml +34 -52
  49. data/spec/fixtures/client/library.yml +129 -38
  50. data/spec/fixtures/client/mediaplayer.yml +59 -28
  51. data/spec/fixtures/client/mobile_app.yml +589 -20
  52. data/spec/fixtures/client/pim.yml +92 -19
  53. data/spec/fixtures/detector/bots.yml +1749 -458
  54. data/spec/fixtures/detector/camera.yml +30 -24
  55. data/spec/fixtures/detector/car_browser.yml +199 -3
  56. data/spec/fixtures/detector/console.yml +107 -45
  57. data/spec/fixtures/detector/desktop.yml +3216 -758
  58. data/spec/fixtures/detector/feature_phone.yml +935 -181
  59. data/spec/fixtures/detector/feed_reader.yml +181 -193
  60. data/spec/fixtures/detector/mediaplayer.yml +157 -60
  61. data/spec/fixtures/detector/mobile_apps.yml +914 -136
  62. data/spec/fixtures/detector/peripheral.yml +271 -0
  63. data/spec/fixtures/detector/phablet.yml +5593 -1533
  64. data/spec/fixtures/detector/portable_media_player.yml +398 -32
  65. data/spec/fixtures/detector/smart_display.yml +183 -9
  66. data/spec/fixtures/detector/smart_speaker.yml +60 -0
  67. data/spec/fixtures/detector/smartphone-1.yml +3930 -4239
  68. data/spec/fixtures/detector/smartphone-10.yml +3985 -7366
  69. data/spec/fixtures/detector/smartphone-11.yml +5083 -3784
  70. data/spec/fixtures/detector/smartphone-12.yml +8989 -0
  71. data/spec/fixtures/detector/smartphone-13.yml +9412 -0
  72. data/spec/fixtures/detector/smartphone-14.yml +9477 -0
  73. data/spec/fixtures/detector/smartphone-15.yml +9281 -0
  74. data/spec/fixtures/detector/smartphone-16.yml +9678 -0
  75. data/spec/fixtures/detector/smartphone-17.yml +9965 -0
  76. data/spec/fixtures/detector/smartphone-18.yml +9806 -0
  77. data/spec/fixtures/detector/smartphone-19.yml +9965 -0
  78. data/spec/fixtures/detector/smartphone-2.yml +6670 -4375
  79. data/spec/fixtures/detector/smartphone-20.yml +9710 -0
  80. data/spec/fixtures/detector/smartphone-21.yml +8693 -0
  81. data/spec/fixtures/detector/smartphone-22.yml +10178 -0
  82. data/spec/fixtures/detector/smartphone-23.yml +9453 -0
  83. data/spec/fixtures/detector/smartphone-24.yml +9843 -0
  84. data/spec/fixtures/detector/smartphone-25.yml +9703 -0
  85. data/spec/fixtures/detector/smartphone-26.yml +10007 -0
  86. data/spec/fixtures/detector/smartphone-27.yml +4927 -0
  87. data/spec/fixtures/detector/smartphone-3.yml +4656 -4711
  88. data/spec/fixtures/detector/smartphone-4.yml +3518 -4479
  89. data/spec/fixtures/detector/smartphone-5.yml +3805 -4803
  90. data/spec/fixtures/detector/smartphone-6.yml +3745 -4693
  91. data/spec/fixtures/detector/smartphone-7.yml +3721 -4645
  92. data/spec/fixtures/detector/smartphone-8.yml +4564 -4699
  93. data/spec/fixtures/detector/smartphone-9.yml +3897 -4888
  94. data/spec/fixtures/detector/smartphone.yml +3154 -4141
  95. data/spec/fixtures/detector/tablet-1.yml +4742 -4576
  96. data/spec/fixtures/detector/tablet-2.yml +3803 -4731
  97. data/spec/fixtures/detector/tablet-3.yml +6210 -2309
  98. data/spec/fixtures/detector/tablet-4.yml +9062 -0
  99. data/spec/fixtures/detector/tablet-5.yml +9273 -0
  100. data/spec/fixtures/detector/tablet-6.yml +4588 -0
  101. data/spec/fixtures/detector/tablet.yml +3629 -4613
  102. data/spec/fixtures/detector/tv-1.yml +2501 -0
  103. data/spec/fixtures/detector/tv.yml +8856 -2064
  104. data/spec/fixtures/detector/unknown.yml +412 -587
  105. data/spec/fixtures/detector/wearable.yml +915 -0
  106. data/spec/fixtures/device/camera.yml +4 -3
  107. data/spec/fixtures/device/car_browser.yml +9 -2
  108. data/spec/fixtures/device/console.yml +15 -14
  109. data/spec/fixtures/device/notebook.yml +7 -0
  110. data/spec/fixtures/parser/oss.yml +1392 -21
  111. data/spec/fixtures/parser/vendorfragments.yml +57 -51
  112. metadata +70 -4
@@ -1,7 +1,7 @@
1
1
  ###############
2
2
  # Device Detector - The Universal Device Detection library for parsing User Agents
3
3
  #
4
- # @link http://piwik.org
4
+ # @link https://matomo.org
5
5
  # @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
6
6
  ###############
7
7
 
@@ -19,6 +19,11 @@
19
19
  name: 'bPod'
20
20
  version: ''
21
21
 
22
+ # Facebook Messenger Lite
23
+ - regex: 'MessengerLiteForiOS.(?:FBAV)(?:[ /]([\d\.]+))?'
24
+ name: 'Facebook Messenger Lite'
25
+ version: '$1'
26
+
22
27
  # Facebook Messenger
23
28
  - regex: '(?:MessengerForiOS|MESSENGER).(?:FBAV)(?:[ /]([\d\.]+))?'
24
29
  name: 'Facebook Messenger'
@@ -28,12 +33,20 @@
28
33
  - regex: '(?:FBAV|com.facebook.katana)(?:[ /]([\d\.]+))?'
29
34
  name: 'Facebook'
30
35
  version: '$1'
36
+ - regex: '(?:FBAN|FBSV|FBID|FBBV)/'
37
+ name: 'Facebook'
38
+ version: ''
31
39
 
32
40
  # FeedR
33
41
  - regex: 'FeedR(?:/([\d\.]+))?'
34
42
  name: 'FeedR'
35
43
  version: '$1'
36
44
 
45
+ # Google Go
46
+ - regex: 'com.google.android.apps.searchlite'
47
+ name: 'Google Go'
48
+ version: ''
49
+
37
50
  # Google Play Kiosk
38
51
  - regex: 'com.google.android.apps.magazines'
39
52
  name: 'Google Play Newsstand'
@@ -45,9 +58,17 @@
45
58
  version: ''
46
59
 
47
60
  # WeChat
48
- - regex: 'MicroMessenger/([^ ]+)'
61
+ - regex: 'MicroMessenger/([^; ]+)'
49
62
  name: 'WeChat'
50
63
  version: '$1'
64
+ - regex: 'WeChatShareExtensionNew/([\d\.]+)'
65
+ name: 'WeChat Share Extension'
66
+ version: '$1'
67
+
68
+ # DingTalk
69
+ - regex: 'DingTalk/([0-9\.]+)'
70
+ name: 'DingTalk'
71
+ version: '$1'
51
72
 
52
73
  # Sina Weibo
53
74
  - regex: '.*__weibo__([0-9\.]+)__'
@@ -55,7 +76,7 @@
55
76
  version: '$1'
56
77
 
57
78
  # Pinterest
58
- - regex: 'Pinterest(?:/([\d\.]+))?'
79
+ - regex: 'Pinterest(?: for (?:Android|iOS))?(?:/([\d\.]+))?'
59
80
  name: 'Pinterest'
60
81
  version: '$1'
61
82
 
@@ -69,6 +90,16 @@
69
90
  name: 'YouTube'
70
91
  version: '$1'
71
92
 
93
+ # Netflix (https://play.google.com/store/apps/details?id=com.netflix.mediaclient)
94
+ - regex: 'com.netflix.mediaclient(?:/(\d+\.[\d\.]+))?'
95
+ name: 'Netflix'
96
+ version: '$1'
97
+
98
+ # Downcast (www.downcastapp.com | https://apps.apple.com/us/app/downcast/id393858566)
99
+ - regex: 'Downcast/(\d+\.[\d\.]+)?(?:.+(?:!Mac)|$)'
100
+ name: 'Downcast'
101
+ version: '$1'
102
+
72
103
  # AFNetworking generic
73
104
  - regex: '([^/]+)/(\d+(?:\.\d+)+) \((?:iPhone|iPad); iOS [0-9\.]+; Scale/[0-9\.]+\)'
74
105
  name: '$1'
@@ -88,81 +119,529 @@
88
119
  - regex: 'Instacast(?:HD)?/(\d\.[\d\.abc]+) CFNetwork/([\d\.]+) Darwin/([\d\.]+)'
89
120
  name: 'Instacast'
90
121
  version: '$1'
91
- -
92
- regex: 'Podcasts/([\d\.]+)'
122
+ - regex: 'Podcasts/([\d\.]+)'
93
123
  name: 'Podcasts'
94
124
  version: '$1'
95
- -
96
- regex: 'Pocket Casts(?:, (?:Android|iOS) v([\d\.]+))?'
125
+ - regex: 'Pocket Casts(?:, (?:Android|iOS) v([\d\.]+))?'
97
126
  name: 'Pocket Casts'
98
127
  version: '$1'
99
- -
100
- regex: 'Podcat/([\d\.]+)'
128
+ - regex: 'Podcat/([\d\.]+)'
101
129
  name: 'Podcat'
102
130
  version: '$1'
103
-
104
- -
105
- regex: 'BeyondPod'
131
+ - regex: 'BeyondPod'
106
132
  name: 'BeyondPod'
107
133
  version:
108
- -
109
- regex: 'AntennaPod/?([\d\.]+)?'
134
+ - regex: 'AntennaPod/?([\d\.]+)?'
110
135
  name: 'AntennaPod'
111
136
  version: '$1'
112
- -
113
- regex: 'Overcast/([\d\.]+)'
137
+ - regex: 'Overcast/([\d\.]+)'
114
138
  name: 'Overcast'
115
139
  version: '$1'
116
- -
117
- regex: 'Player FM'
140
+ - regex: '(?:CastBox|fm.castbox.audiobook.radio.podcast)/?([\d\.]+)?'
141
+ name: 'CastBox'
142
+ version: '$1'
143
+ - regex: 'Player FM'
118
144
  name: 'Player FM'
119
145
  version: ''
120
- -
121
- regex: 'Podkicker(?: Pro)?/([\d\.]+)'
122
- name: 'Podkicker'
123
- version: '$1'
124
- -
125
- regex: 'PodcastRepublic/([\d\.]+)'
146
+ - regex: 'Podkicker( (?:Pro|Classic))?/([\d\.]+)'
147
+ name: 'Podkicker$1'
148
+ version: '$2'
149
+ - regex: 'PodcastRepublic/([\d\.]+)'
126
150
  name: 'Podcast Republic'
127
151
  version: '$1'
128
- -
129
- regex: 'Castro/(\d+)'
152
+ - regex: 'Castro/(\d+)'
130
153
  name: 'Castro'
131
154
  version: '$1'
132
- -
133
- regex: 'Castro 2 ([\d\.]+)/[\d]+ Like iTunes'
155
+ - regex: 'Castro 2 ([\d\.]+)/[\d]+ Like iTunes'
134
156
  name: 'Castro 2'
135
157
  version: '$1'
136
- -
137
- regex: 'Castro 2'
158
+ - regex: 'Castro 2'
138
159
  name: 'Castro 2'
139
160
  version: ''
140
- -
141
- regex: 'DoggCatcher'
161
+ - regex: 'DoggCatcher'
142
162
  name: 'DoggCatcher'
143
163
  version:
144
- -
145
- regex: 'PodcastAddict/v([\d]+)'
164
+ - regex: 'PodcastAddict/v([\d]+)'
146
165
  name: 'Podcast & Radio Addict'
147
166
  version: '$1'
148
- -
149
- regex: 'Podcat/([\d]+) CFNetwork/([\d\.]+) Darwin/([\d\.]+)'
167
+ - regex: 'Podcat(?:%202)?/([\d]+) CFNetwork'
150
168
  name: 'Podcat'
151
169
  version: '$1'
152
- -
153
- regex: 'i[cC]atcher[^\d]+([\d\.]+)'
170
+ - regex: 'iCatcher[^\d]+([\d\.]+)'
154
171
  name: 'iCatcher'
155
172
  version: '$1'
156
- -
157
- regex: 'YelpApp/([\d\.]+)'
173
+ - regex: 'YelpApp/([\d\.]+)'
158
174
  name: 'Yelp Mobile'
159
175
  version: '$1'
160
- -
161
- regex: 'jp.co.yahoo.android.yjtop/([\d\.]+)'
176
+ - regex: 'jp.co.yahoo.android.yjtop/([\d\.]+)'
162
177
  name: 'Yahoo! Japan'
163
178
  version: '$1'
164
- -
165
- regex: 'RSSRadio/([\d]+)?'
179
+ - regex: 'RSSRadio/([\d]+)?'
166
180
  name: 'RSSRadio'
167
181
  version: '$1'
168
-
182
+ - regex: 'SogouSearch Android[\d\.]+ version([\d\.]+)?'
183
+ name: 'SogouSearch App'
184
+ version: '$1'
185
+ - regex: 'NewsArticle/([\d\.]+)?'
186
+ name: 'NewsArticle App'
187
+ version: '$1'
188
+ - regex: 'tieba/([\d\.]+)?'
189
+ name: 'tieba'
190
+ version: '$1'
191
+ - regex: 'com\.douban\.group/([\d\.]+)?'
192
+ name: 'douban App'
193
+ version: '$1'
194
+ - regex: 'BingWeb/([\d\.]+)?'
195
+ name: 'BingWebApp'
196
+ version: '$1'
197
+ - regex: '(?:com.google.GoogleMobile|GSA)/([\d\.]+)?'
198
+ name: 'Google Search App'
199
+ version: '$1'
200
+ - regex: 'Flipboard/([\d\.]+)?'
201
+ name: 'Flipboard App'
202
+ version: '$1'
203
+ - regex: 'Instagram[ /]([\d\.]+)?'
204
+ name: 'Instagram App'
205
+ version: '$1'
206
+ - regex: 'baiduboxapp/([\d\.]+)?'
207
+ name: 'Baidu Box App'
208
+ version: '$1'
209
+ - regex: 'Crosswalk(?!.*(?:Streamy|QwantMobile))/([\d\.]+)?'
210
+ name: 'CrosswalkApp'
211
+ version: '$1'
212
+ - regex: 'Twitter for iPhone[/]?([\d\.]+)?'
213
+ name: 'Twitter'
214
+ version: '$1'
215
+ - regex: 'Twitter/([\d\.]+)'
216
+ name: 'Twitter'
217
+ version: '$1'
218
+ - regex: 'TwitterAndroid[/]?([\d\.]+)?'
219
+ name: 'Twitter'
220
+ version: '$1'
221
+ # Pocket Casts (https://pocketcasts.com)
222
+ - regex: '^Pocket Casts'
223
+ name: 'Pocket Casts'
224
+ version: ''
225
+ # Gaana (https://gaana.com)
226
+ - regex: '^GaanaAndroid-([\d\.]+)'
227
+ name: 'Gaana'
228
+ version: '$1'
229
+ - regex: 'TopBuzz/([\d\.]+)'
230
+ name: 'TopBuzz'
231
+ version: '$1'
232
+ - regex: 'Snapchat/([\d\.]+)'
233
+ name: 'Snapchat'
234
+ version: '$1'
235
+ - regex: 'AhaRadio2/([\d\.]+)'
236
+ name: 'Aha Radio 2'
237
+ version: '$1'
238
+ # Unibox (https://apps.apple.com/app/id933879046)
239
+ - regex: 'Unibox/([\d\.]+)'
240
+ name: 'Unibox'
241
+ version: ''
242
+
243
+ # Strimio (https://www.strimio.com/)
244
+ - regex: 'strimio(?:-desktop)/(\d+\.(?:[\.\d]+))?'
245
+ name: 'Strimio'
246
+ version: '$1'
247
+
248
+ # UnityPlayer
249
+ - regex: 'UnityPlayer/([\d\.]+)'
250
+ name: 'UnityPlayer'
251
+ version: '$1'
252
+
253
+ # (https://play.google.com/store/apps/details?id=cl.uchile.ing.adi.ucursos)
254
+ - regex: 'UCURSOS/v([\d\.]+)'
255
+ name: 'U-Cursos'
256
+ version: '$1'
257
+
258
+ # HeyTabBrowser or HeyTabAccount
259
+ - regex: 'HeyTapBrowser/([\d\.]+)'
260
+ name: 'HeyTapBrowser'
261
+ version: '$1'
262
+
263
+ # Roblox App
264
+ - regex: 'RobloxApp/([\d\.]+)'
265
+ name: 'Roblox'
266
+ version: '$1'
267
+
268
+ - regex: 'Viber/([\d\.]+)'
269
+ name: 'Viber'
270
+ version: '$1'
271
+
272
+ - regex: 'Siri/1'
273
+ name: 'Siri'
274
+ version: '1.0'
275
+
276
+ - regex: 'LinkedIn(?:App)?(?:/([\d\.]+))?'
277
+ name: 'LinkedIn'
278
+ version: '$1'
279
+
280
+ # https://apps.apple.com/ru/app/instapaper/id288545208
281
+ - regex: 'Instapaper/([\d\.]+)'
282
+ name: 'Instapaper'
283
+ version: '$1'
284
+
285
+ # https://apps.apple.com/us/app/keeper-password-manager/id287170072
286
+ - regex: 'Keeper/([\d\.]+)'
287
+ name: 'Keeper Password Manager'
288
+ version: '$1'
289
+
290
+ # https://apps.apple.com/us/app/skyeng-teachers/id1483049537
291
+ - regex: 'Skyeng Teachers/([\d\.]+)'
292
+ name: 'Skyeng Teachers'
293
+ version: '$1'
294
+
295
+ - regex: 'Kik/([\d\.]+) \(Android'
296
+ name: 'Kik'
297
+ version: '$1'
298
+
299
+ - regex: 'Procast/?([\d\.]+)?'
300
+ name: 'Procast'
301
+ version: '$1'
302
+
303
+ # DeviantArt (https://apps.apple.com/us/app/deviantart/id925219396)
304
+ - regex: 'DeviantArt/([\d\.]+)'
305
+ name: 'DeviantArt'
306
+ version: ''
307
+
308
+ # Discord (https://apps.apple.com/us/app/discord-talk-chat-hang-out/id985746746)
309
+ - regex: 'Discord/([\d\.]+)'
310
+ name: 'Discord'
311
+ version: ''
312
+
313
+ # Covenant Eyes (https://apps.apple.com/us/app/covenant-eyes/id335318146)
314
+ - regex: 'Covenant%20Eyes/([\d\.]+)'
315
+ name: 'Covenant Eyes'
316
+ version: '$1'
317
+
318
+ # HP Smart (https://apps.apple.com/us/app/hp-smart/id469284907)
319
+ - regex: 'HP%20Smart/([\d\.]+)'
320
+ name: 'HP Smart'
321
+ version: ''
322
+
323
+ # Bitsboard (https://apps.apple.com/us/app/bitsboard-flashcards-games/id516842210)
324
+ - regex: 'Bitsboard/([\d\.]+)'
325
+ name: 'Bitsboard'
326
+ version: '$1'
327
+
328
+ # BetBull (https://apps.apple.com/us/app/betbull-sport-tips-casino/id1032680895)
329
+ - regex: 'Betbull/([\d\.]+)'
330
+ name: 'BetBull'
331
+ version: ''
332
+
333
+ # U-Cursos (https://apps.apple.com/us/app/u-cursos/id834515435)
334
+ - regex: 'U-Cursos/([\d\.]+)'
335
+ name: 'U-Cursos'
336
+ version: ''
337
+
338
+ # https://apps.apple.com/mt/app/1password-password-manager/id568903335
339
+ - regex: '1PasswordThumbs/([\d\.]+)'
340
+ name: '1Password'
341
+ version: '$1'
342
+
343
+ - regex: '(?:Microsoft Office )?(Access|Excel|OneDrive for Business|OneNote|PowerPoint|Project|Publisher|Visio|Word)[ /]([\d\.]+)'
344
+ name: 'Microsoft Office $1'
345
+ version: '$2'
346
+
347
+ # https://apps.apple.com/us/app/microsoft-onedrive/id477537958
348
+ - regex: 'OneDriveiOSApp/([\d\.]+)'
349
+ name: 'Microsoft OneDrive'
350
+ version: '$1'
351
+
352
+ - regex: 'Microsoft Office Mobile/([\d\.]+)'
353
+ name: 'Microsoft Office Mobile'
354
+ version: '$1'
355
+
356
+ - regex: 'OC/([\d\.]+) \(Skype for Business\)'
357
+ name: 'Skype for Business'
358
+ version: '$1'
359
+
360
+ # TikTok (https://apps.apple.com/app/id835599320 | https://play.google.com/store/apps/details?id=com.zhiliaoapp.musically)
361
+ - regex: '(?:TikTok[/ ]|musical_ly_|AppName/musical_ly app_version/)(\d+\.(?:[\.\d]+))?'
362
+ name: 'TikTok'
363
+ version: '$1'
364
+
365
+ # https://apps.apple.com/app/id393499958
366
+ - regex: 'NAVER/(\d+[\.\d]+) CFNetwork'
367
+ name: 'Naver'
368
+ version: '$1'
369
+
370
+ # https://apps.apple.com/app/id1026349850
371
+ - regex: 'Copied/(\d+[\.\d]+) CFNetwork'
372
+ name: 'Copied'
373
+ version: ''
374
+
375
+ # https://apps.apple.com/app/id448639966
376
+ - regex: 'Pic%20Collage/(\d+[\.\d]+) CFNetwork'
377
+ name: 'Pic Collage'
378
+ version: '$1'
379
+
380
+ # https://apps.apple.com/app/id506003812
381
+ - regex: 'Papers/(\d+[\.\d]+) CFNetwork'
382
+ name: 'Papers'
383
+ version: '$1'
384
+
385
+ # https://apps.apple.com/app/id331787573
386
+ - regex: 'RoboForm/(\d+[\.\d]+) CFNetwork'
387
+ name: 'RoboForm'
388
+ version: ''
389
+
390
+ # https://apps.apple.com/app/id618783545
391
+ - regex: 'Slack/(\d+[\.\d]+) CFNetwork'
392
+ name: 'Slack'
393
+ version: ''
394
+
395
+ # https://apps.apple.com/us/app/id362057947
396
+ - regex: 'KAKAOTALK (\d+\.(?:[\.\d]+))?'
397
+ name: 'KakaoTalk'
398
+ version: '$1'
399
+
400
+ # https://apps.apple.com/us/app/shopee-t%E1%BA%BFt-sale-27-01/id959841449
401
+ - regex: 'ShopeeVN/([\d\.]+)'
402
+ name: 'Shopee'
403
+ version: '$1'
404
+
405
+ # https://apps.apple.com/us/app/sport1/id1185932089
406
+ - regex: 'SPORT1/([\d\.]+)'
407
+ name: 'SPORT1'
408
+ version: ''
409
+
410
+ # https://apps.apple.com/us/app/clovia-lingerie-shopping-app/id1243996857
411
+ - regex: 'Clovia/([\d\.]+)'
412
+ name: 'Clovia'
413
+ version: '$1'
414
+
415
+ # https://apps.apple.com/us/app/showme-interactive-whiteboard/id445066279
416
+ - regex: 'ShowMe/([\d\.]+)'
417
+ name: 'ShowMe'
418
+ version: '$1'
419
+
420
+ # https://apps.apple.com/us/app/wattpad-read-write-stories/id306310789
421
+ - regex: 'Wattpad/([\d\.]+)'
422
+ name: 'Wattpad'
423
+ version: '$1'
424
+
425
+ # https://apps.apple.com/us/app/the-wall-street-journal/id364387007
426
+ - regex: 'WSJ/([\d\.]+)'
427
+ name: 'The Wall Street Journal'
428
+ version: ''
429
+
430
+ # https://apps.apple.com/us/app/wh-question-cards-pro-who-what-when-where-why/id544870563
431
+ - regex: 'WH%20Questions/([\d\.]+)'
432
+ name: 'WH Questions'
433
+ version: '$1'
434
+
435
+ # https://apps.apple.com/us/app/whisper-share-express-meet/id506141837
436
+ - regex: 'whisper/([\d\.]+)'
437
+ name: 'Whisper'
438
+ version: ''
439
+
440
+ # https://apps.apple.com/us/app/opal-travel/id941006607
441
+ - regex: 'Opal/([\d\.]+)'
442
+ name: 'Opal Travel'
443
+ version: '$1'
444
+
445
+ # https://apps.apple.com/us/app/zalo/id579523206
446
+ - regex: 'Zalo/([\d\.]+)'
447
+ name: 'Zalo'
448
+ version: '$1'
449
+
450
+ # https://apps.apple.com/us/app/%D1%8F%D0%BD%D0%B4%D0%B5%D0%BA%D1%81/id1050704155
451
+ - regex: 'Yandex/([\d\.]+)'
452
+ name: 'Yandex'
453
+ version: ''
454
+
455
+ - regex: 'Zoho%20Chat/([\d\.]+)'
456
+ name: 'Zoho Chat'
457
+ version: '$1'
458
+
459
+ # Thunder (https://xl11.xunlei.com/)
460
+ - regex: 'Thunder/(\d+[\.\d]+)'
461
+ name: 'Thunder'
462
+ version: '$1'
463
+
464
+ # CGN (https://www.cgn.it/)
465
+ - regex: 'CGNBrowser/(\d+[\.\d]+)'
466
+ name: 'CGN'
467
+ version: '$1'
468
+
469
+ # Podbean (http://podbean.com | https://play.google.com/store/apps/details?id=com.podbean.app.podcast)
470
+ - regex: 'Podbean/.+App (\d+[\.\d]+)'
471
+ name: 'Podbean'
472
+ version: '$1'
473
+
474
+ # Alexa Media Player
475
+ - regex: 'AlexaMediaPlayer/(\d+[\.\d]+)'
476
+ name: 'Alexa Media Player'
477
+ version: '$1'
478
+
479
+ # TuneIn Radio Pro
480
+ - regex: 'TuneIn Radio Pro(?:[^/]+)?/(\d+[\.\d]+)'
481
+ name: 'TuneIn Radio Pro'
482
+ version: '$1'
483
+ - regex: 'TuneIn(?: Radio(?:[^/]+)?)?/(\d+[\.\d]+)'
484
+ name: 'TuneIn Radio'
485
+ version: '$1'
486
+
487
+ # Podcaster
488
+ - regex: 'Podcaster/(\d+[\.\d]+)'
489
+ name: 'Podcaster'
490
+ version: '$1'
491
+
492
+ # DevCasts (https://apps.apple.com/app/id1481596184)
493
+ - regex: 'devcasts/(\d+[\.\d]+)'
494
+ name: 'DevCasts'
495
+ version: '$1'
496
+
497
+ # Swoot
498
+ - regex: 'Swoot/(\d+[\.\d]+)'
499
+ name: 'Swoot'
500
+ version: '$1'
501
+
502
+ # RadioPublic (https://play.google.com/store/apps/details?id=com.radiopublic.android)
503
+ - regex: 'RadioPublic/android-(\d+[\.\d]+)'
504
+ name: 'RadioPublic'
505
+ version: '$1'
506
+
507
+ # Podimo (https://play.google.com/store/apps/details?id=com.podimo)
508
+ - regex: 'Podimo/(\d+[\.\d]+)'
509
+ name: 'Podimo'
510
+ version: '$1'
511
+
512
+ # Evolve Podcast (https://apps.apple.com/us/app/id1199070742)
513
+ - regex: 'com.evolve.podcast/(\d+[\.\d]+)'
514
+ name: 'Evolve Podcast'
515
+ version: '$1'
516
+
517
+ - regex: ' Rocket.Chat\+?/(\d+[\.\d]+)'
518
+ name: 'Rocket Chat'
519
+ version: '$1'
520
+
521
+ # Pandora
522
+ - regex: '^Pandora Audio.+Android'
523
+ name: 'Pandora'
524
+ version: ''
525
+
526
+ # NPR One https://play.google.com/store/apps/details?id=org.npr.one
527
+ - regex: '^NPROneAndroid'
528
+ name: 'NPR One'
529
+ version: ''
530
+
531
+ # Wirtschafts Woche Nachrichte https://apps.apple.com/de/app/wirtschaftswoche-nachrichten/id1339187646
532
+ - regex: '^WirtschaftsWoche-iOS-(\d+[\.\d]+)'
533
+ name: 'Wirtschafts Woche'
534
+ version: '$1'
535
+
536
+ # Outlook https://apps.apple.com/ru/app/microsoft-outlook/id951937596
537
+ - regex: '^Outlook-iOS/.+\((\d+[\.\d]+)\)$'
538
+ name: 'Microsoft Outlook'
539
+ version: '$1'
540
+
541
+ - regex: '^TVirl/(\d+[\.\d]+)'
542
+ name: 'TVirl'
543
+ version: '$1'
544
+
545
+ # ChMate https://play.google.com/store/apps/details?id=jp.co.airfront.android.a2chMate
546
+ - regex: '2?chMate/(\d+[\.\d]+)'
547
+ name: 'ChMate'
548
+ version: '$1'
549
+
550
+ # 2tch https://apps.apple.com/jp/app/2tch/id305982914
551
+ - regex: '2tch/(\d+[\.\d]+)'
552
+ name: '2tch'
553
+ version: '$1'
554
+
555
+ # Ciisaa https://play.google.com/store/apps/details?id=com.gmail.aosoan.ciisaa
556
+ - regex: 'Ciisaa/(\d+[\.\d]+)'
557
+ name: 'Ciisaa'
558
+ version: '$1'
559
+
560
+ # BB2C https://itunes.apple.com/us/app/bb2c/id298820042?mt=8
561
+ - regex: 'BB2C (\d+[\.\d]+)'
562
+ name: 'BB2C'
563
+ version: '$1'
564
+
565
+ # twinkle https://itunes.apple.com/app/twinkle/id463142843
566
+ - regex: 'twinkle/(\d+[\.\d]+)'
567
+ name: 'twinkle'
568
+ version: '$1'
569
+
570
+ # JaneStyle https://apps.apple.com/app/id1157926535
571
+ - regex: 'JaneStyle_iOS/(\d+[\.\d]+)'
572
+ name: 'JaneStyle'
573
+ version: '$1'
574
+
575
+ # Binance https://play.google.com/store/apps/details?id=com.binance.dev
576
+ - regex: 'BNC/.+\(Android (\d+[\.\d]+)\)'
577
+ name: 'Binance'
578
+ version: '$1'
579
+
580
+ # My World https://apps.apple.com/app/id598556821
581
+ - regex: 'ru\.mail\.my/(\d+[\.\d]+)'
582
+ name: 'My World'
583
+ version: '$1'
584
+
585
+ # Odnoklassniki https://play.google.com/store/apps/details?id=ru.ok.android https://apps.apple.com/app/id398465290
586
+ - regex: 'OK(?:Android|iOS)/([\d\.]+)'
587
+ name: 'Odnoklassniki'
588
+ version: '$1'
589
+
590
+ # YakYak https://github.com/yakyak/yakyak
591
+ - regex: 'yakyak/(\d+[\.\d]+)'
592
+ name: 'YakYak'
593
+ version: '$1'
594
+
595
+ # Microsoft Teams (https://www.microsoft.com/en/microsoft-teams/group-chat-software)
596
+ - regex: 'Teams/(\d+[\.\d]+)'
597
+ name: 'Teams'
598
+ version: '$1'
599
+
600
+ # Streamlabs OBS (https://streamlabs.com/)
601
+ - regex: 'StreamlabsOBS/(\d+[\.\d]+)'
602
+ name: 'Streamlabs OBS'
603
+ version: '$1'
604
+
605
+ # Blitz (https://blitz.gg/)
606
+ - regex: 'Blitz/([\d\.]+)'
607
+ name: 'Blitz'
608
+ version: '$1'
609
+
610
+ # OfferUp (https://play.google.com/store/apps/details?id=com.offerup)
611
+ - regex: 'OfferUp/([\d\.]+)'
612
+ name: 'OfferUp'
613
+ version: '$1'
614
+
615
+ # Vuhuv (https://play.google.com/store/apps/details?id=com.vuhuv)
616
+ - regex: 'Vuhuv/([\d\.]+)'
617
+ name: 'Vuhuv'
618
+ version: '$1'
619
+
620
+ - regex: '.+/(?:gfibertv|gftv200)-([\d]+)-'
621
+ name: 'Google Fiber TV'
622
+ version: '$1'
623
+
624
+ # QuickCast (https://play.google.com/store/apps/details?id=com.wukongtv.wkcast.intl)
625
+ - regex: 'QuickCast$'
626
+ name: 'QuickCast'
627
+ version: ''
628
+
629
+ # AliExpress (https://play.google.com/store/apps/details?id=com.alibaba.aliexpresshd)
630
+ - regex: 'Aliexpress(?:Android)?/([\d\.]+)'
631
+ name: 'AliExpress'
632
+ version: '$1'
633
+
634
+ # Blue Proxy (https://play.google.com/store/apps/details?id=com.udicorn.proxy)
635
+ - regex: 'Blue Proxy/([\d\.]+)'
636
+ name: 'Blue Proxy'
637
+ version: '$1'
638
+
639
+ # https://www.n-tv.de/
640
+ - regex: 'ntvmobil/'
641
+ name: 'NTV Mobil'
642
+ version: ''
643
+
644
+ # COAF SMART Citizen (https://apps.apple.com/app/id1478339047)
645
+ - regex: 'COAF%20SMART%20Citizen/'
646
+ name: 'COAF SMART Citizen'
647
+ version: ''