diff --git a/CHANGELOG.md b/CHANGELOG.md index d059fe9..d9fb188 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [1.1.5] + +- Rename `Amazon Alexa` to `Alexa` + ## [1.1.4] - Detect `Apache-HttpClient/5.1.4 (Java/1.8.0_144)` as bots diff --git a/lib/detection_rules.yml b/lib/detection_rules.yml index a6ef5e8..167030a 100644 --- a/lib/detection_rules.yml +++ b/lib/detection_rules.yml @@ -129,7 +129,7 @@ platform: iOS -- app: Amazon Alexa +- app: Alexa match: startsWith: Alexa platform: @@ -143,7 +143,7 @@ - userAgent: AlexaService/1.20.1010746 (Linux;Android 8.0.0) ExoPlayerLib/2.4.3 platform: Alexa-capable device -- app: Amazon Alexa +- app: Alexa match: startsWith: Echo platform: diff --git a/lib/pod_ident/detection_rules.rb b/lib/pod_ident/detection_rules.rb index 15b93f4..3c31cfa 100644 --- a/lib/pod_ident/detection_rules.rb +++ b/lib/pod_ident/detection_rules.rb @@ -1,3 +1,3 @@ # DO NOT EDIT THIS FILE - it gets automatically generated by running "bin/parse-rules" -RULES = [{:app=>"Apple Podcasts", :match=>{"startsWith"=>"AppleCoreMedia"}, :platform=>{"regex"=>"\\((\\w+\\s*\\w*)", "replacements"=>[{"name"=>"Macintosh", "replaceWith"=>"Mac"}]}}, {:app=>"Apple Podcasts", :match=>{"startsWith"=>"itunesstored"}, :platform=>{"regex"=>"(iPad|iPod|iPhone)"}}, {:app=>"iTunes", :match=>{"startsWith"=>"iTunes", "excluding"=>{"regex"=>"Downcast|iCatcher|SqueezeCenter|SqueezeNetwork|MusicServer"}}, :platform=>{"regex"=>"\\((\\w+\\s*\\w*)", "replacements"=>[{"name"=>"Macintosh", "replaceWith"=>"Mac"}]}}, {:app=>"Apple Podcasts", :match=>{"includes"=>"watchOS", "excluding"=>{"regex"=>"^atc/|\\(null\\) watchOS/"}}, :platform=>{"text"=>"watchOS"}}, {:app=>"Spotify", :match=>{"startsWith"=>"Spotify", "excluding"=>{"regex"=>"^Spotify/1\\.0$"}}, :platform=>{"regexes"=>["(Android|iOS)"]}}, {:app=>"CastBox", :match=>{"startsWith"=>["CastBox", "Castbox"]}, :platform=>{"regexes"=>["(Android|iOS|OS\\sVersion)", "(CastBox)"], "replacements"=>[{"name"=>"OS Version", "replaceWith"=>"iOS"}, {"name"=>"CastBox", "replaceWith"=>"Android"}]}}, {:app=>"Amazon Alexa", :match=>{"startsWith"=>"Alexa"}, :platform=>{"text"=>"Alexa-capable device"}}, {:app=>"Amazon Alexa", :match=>{"startsWith"=>"Echo"}, :platform=>{"text"=>"Amazon Echo", "userAgents"=>[{"userAgent"=>"Echo/1.0(APNG)", "platform"=>"Amazon Echo"}]}}, {:app=>"Deezer", :match=>{"startsWith"=>"Deezer"}, :platform=>{"regexes"=>["(Android|Darwin)", "\\((\\w+\\s*\\w*)"], "replacements"=>[{"name"=>"osx", "replaceWith"=>"Mac"}, {"name"=>"Darwin", "replaceWith"=>"Apple Device"}]}}, {:app=>"Overcast", :match=>{"startsWith"=>"Overcast", "excluding"=>{"regex"=>"^Overcast/1\\.0 Podcast Sync"}}, :platform=>{"text"=>"iOS"}}, {:app=>"radio.net", :match=>{"startsWith"=>["radio.net", "radio.de", "radio.at", "radio.fr", "radio.dk", "radio.es", "radio.it", "radio.pt", "radio.pl"]}, :platform=>{"regex"=>"(Android|Darwin|Linux)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}, {"name"=>"Linux", "replaceWith"=>"Android"}]}}, {:app=>"PocketCasts", :match=>{"startsWith"=>["PocketCasts", "Pocket Casts", "Shifty Jelly Pocket Casts"]}, :platform=>{"regex"=>"(Android)"}}, {:app=>"Himalaya", :match=>{"startsWith"=>"Himalaya"}, :platform=>{"regex"=>"(Darwin|Android)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}}, {:app=>"ExoPlayer", :match=>{"startsWith"=>["ExoPlayer", "yourApplicationName", "null", "md5d42223d6ee7473da82e8136ffb794439.App"]}, :platform=>{"text"=>"Android"}}, {:app=>"Download Manager", :match=>{"startsWith"=>"AndroidDownloadManager"}, :platform=>{"text"=>"Android"}}, {:app=>"Castamatic", :match=>{"startsWith"=>"Castamatic"}, :platform=>{"text"=>"iOS"}}, {:app=>"The Podcast App (podcast.app)", :match=>{"includes"=>"The Podcast App"}, :platform=>{"text"=>"iOS"}}, {:app=>"CastMix", :match=>{"startsWith"=>"CastMix"}, :platform=>{"text"=>"Android"}}, {:app=>"Unknown App", :match=>{"startsWith"=>"okhttp"}, :platform=>{"text"=>"Android"}}, {:app=>"Stagefright Media Playback Engine", :match=>{"includes"=>"stagefright", "excluding"=>{"text"=>"stagefright alternative"}}, :platform=>{"regex"=>"(Fire OS|Android)"}}, {:app=>"LG Player", :match=>{"startsWith"=>"Player/LG Player", "includes"=>["LG Player", "LG-Player"]}, :platform=>{"text"=>"Android"}}, {:app=>"Android Browser", :match=>{"startsWith"=>"Dalvik"}, :platform=>{"text"=>"Android"}}, {:app=>"Acast", :match=>{"startsWith"=>"Acast"}, :platform=>{"regex"=>"(Darwin|Android|Windows)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}}, {:app=>"Castro", :match=>{"startsWith"=>"Castro"}, :platform=>{"text"=>"iOS"}}, {:app=>"Breaker", :match=>{"startsWith"=>"Breaker"}, :platform=>{"regex"=>"(Darwin|Android)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}}, {:app=>"Podcast Addict", :match=>{"startsWith"=>["PodcastAddict", "Podcast Addict"]}, :platform=>{"text"=>"Android"}}, {:app=>"Podbean", :match=>{"startsWith"=>"Podbean", "excluding"=>{"regex"=>"^Podbean Importer"}}, :platform=>{"regex"=>"(iOS|Android)"}}, {:app=>"Google Podcasts", :match=>{"includes"=>["GSA"], "excluding"=>{"regex"=>"iPhone|iPad"}}, :platform=>{"text"=>"Android"}}, {:app=>"Google Search App", :match=>{"includes"=>["GSA"], "excluding"=>{"regex"=>"Android"}}, :platform=>{"regexes"=>["(iPhone|iPad)"]}}, {:app=>"Google Podcasts", :match=>{"includes"=>"GoogleChirp"}, :platform=>{"text"=>"Google Smart Speaker"}}, {:app=>"Stitcher", :match=>{"startsWith"=>"Stitcher"}, :platform=>{"regex"=>"(iOS|Android)"}}, {:app=>"TuneIn", :match=>{"startsWith"=>"TuneIn"}, :platform=>{"regex"=>"(Darwin|Android)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}}, {:app=>"PodCruncher", :match=>{"startsWith"=>"PodCruncher"}, :platform=>{"text"=>"iOS"}}, {:app=>"iCatcher!", :match=>{"startsWith"=>"iCatcher!", "includes"=>"iCatcher!"}, :platform=>{"regex"=>"\\((iPhone|iPad|iPod touch)", "fallback"=>"iOS"}}, {:app=>"Castaway", :match=>{"startsWith"=>"Castaway"}, :platform=>{"text"=>"iOS"}}, {:app=>"Instacast", :match=>{"startsWith"=>"Instacast"}, :platform=>{"text"=>"Apple Device"}}, {:app=>"VLC", :match=>{"startsWith"=>["VLC", "LibVLC"], "includes"=>"VLC"}, :platform=>{"regex"=>"(Android|iPhone)"}}, {:app=>"Podcast Republic", :match=>{"startsWith"=>"PodcastRepublic"}, :platform=>{"text"=>"Android"}}, {:app=>"DoggCatcher", :match=>{"includes"=>"DoggCatcher"}, :platform=>{"text"=>"Android"}}, {:app=>"Player FM", :match=>{"startsWith"=>["Player FM", "Player%20FM"]}, :platform=>{"regex"=>"(Darwin)", "fallback"=>"Android", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}}, {:app=>"Podkicker", :match=>{"startsWith"=>"Podkicker"}, :platform=>{"text"=>"Android"}}, {:app=>"AntennaPod", :match=>{"startsWith"=>"AntennaPod"}, :platform=>{"text"=>"Android"}}, {:app=>"Downcast", :match=>{"startsWith"=>"Downcast", "includes"=>"Downcast"}, :platform=>{"regex"=>"\\((iPhone|iPad|iPod touch|Mac)"}}, {:app=>"gPodder", :match=>{"startsWith"=>"gPodder"}, :platform=>{"regex"=>"(Linux|Windows)"}}, {:app=>"Podcatcher Deluxe", :match=>{"includes"=>"Podcatcher Deluxe"}, :platform=>{"text"=>"Android"}}, {:app=>"Procast", :match=>{"startsWith"=>["Procast", "ProCast"]}, :platform=>{"text"=>"iOS"}}, {:app=>"RSSRadio", :match=>{"startsWith"=>"RSSRadio"}, :platform=>{"regex"=>"(iPhone|iPad|iPod touch|Darwin)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}], "fallback"=>"iOS"}}, {:app=>"Podcat", :match=>{"startsWith"=>"Podcat", "excluding"=>{"regex"=>"Podcatcher"}}, :platform=>{"text"=>"iOS"}}, {:app=>"Audio Now", :match=>{"startsWith"=>"AudioNow", "includes"=>"audionow"}, :platform=>{"regex"=>"(iOS|Android)"}}, {:app=>"DIE ZEIT App", :match=>{"includes"=>"ZONApp"}, :platform=>{"regex"=>"(iPhone|iPad|iPod touch|Android)"}}, {:app=>"F.A.Z Der Tag App", :match=>{"includes"=>"FAZDERTAG"}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch)"]}}, {:app=>"ANTENNE BAYERN App", :match=>{"includes"=>"AntenneBayern"}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch)"]}}, {:app=>"BuzzFeed App", :match=>{"includes"=>"buzzfeed"}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch)"]}}, {:app=>"Facebook in-app browser", :match=>{"includes"=>["FBAN", "FBAV"]}, :platform=>{"regexes"=>["\\((iPhone|iPad|iPod touch)", "(Android)"]}}, {:app=>"Instagram in-app browser", :match=>{"includes"=>"Instagram"}, :platform=>{"regexes"=>["(iPad)", "(iPhone|Android)"]}}, {:app=>"Twitter in-app browser", :match=>{"includes"=>"Twitter", "excluding"=>{"regex"=>"^TelegramBot "}}, :platform=>{"regex"=>"(iPhone|iPad|Darwin|Android)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"Apple device"}]}}, {:app=>"Pinterest in-app browser", :match=>{"includes"=>"Pinterest"}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch)"]}}, {:app=>"Windows Media Player", :match=>{"startsWith"=>["NSPlayer", "WMPlayer"]}, :platform=>{"text"=>"Windows"}}, {:app=>"Sonos", :match=>{"includes"=>"Sonos"}, :platform=>{"text"=>"Sonos"}}, {:app=>"Internet Explorer", :match=>{"includes"=>"Trident"}, :platform=>{"regex"=>"(Windows Phone)", "fallback"=>"Windows"}}, {:app=>"Kodi Media Center", :match=>{"startsWith"=>"Kodi", "includes"=>"Kodi"}, :platform=>{"regex"=>"(X11|Android|Windows)", "replacements"=>[{"name"=>"X11", "replaceWith"=>"Linux"}]}}, {:app=>"HermesPod", :match=>{"startsWith"=>"+hermespod.com"}, :platform=>{"text"=>"Windows"}}, {:app=>"ViennaRSS", :match=>{"includes"=>"Vienna"}, :platform=>{"text"=>"Mac"}}, {:app=>"Unknown client", :match=>{"startsWith"=>"(null)", "excluding"=>{"regex"=>"^atc/|\\(null\\) watchOS/"}}, :platform=>{"regex"=>"(iPhone|iPad|iPod touch)"}}, {:app=>"Clementine Music Player", :match=>{"startsWith"=>"Clementine"}, :platform=>{"text"=>"Unknown"}}, {:app=>"Flipboard", :match=>{"includes"=>"Flipboard", "excluding"=>{"regex"=>"FlipboardProxy/"}}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch|Macintosh)"], "replacements"=>[{"name"=>"Macintosh", "replaceWith"=>"Mac"}]}}, {:app=>"iVoox", :match=>{"startsWith"=>["ivoox", "iVoox"]}, :platform=>{"regexes"=>["(Android)", "(Darwin)\\/", "\\((iPhone|iPad|iPod touch|Macintosh)"], "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"Apple device"}, {"name"=>"Macintosh", "replaceWith"=>"Mac"}]}}, {:app=>"FYEO", :match=>{"startsWith"=>"FYEO"}, :platform=>{"regex"=>"(iOS|Android)"}}, {:app=>"Amazon Music", :match=>{"startsWith"=>"AmazonMusic"}, :platform=>{"regex"=>"(iPhone|Android|MacOS|Fire OS|iPad)"}}, {:app=>"Podimo", :match=>{"startsWith"=>"Podimo"}, :platform=>{"regex"=>"(iOS|Android)"}}, {:app=>"ARD Audiothek", :match=>{"startsWith"=>"ARD Audiothek"}, :platform=>{"regex"=>"(iOS|Android)"}}, {:app=>"Samsung Podcast", :match=>{"startsWith"=>"sp-agent"}, :platform=>{"text"=>"Android"}}, {:app=>"RTL+", :match=>{"startsWith"=>"RTL+"}, :platform=>{"regex"=>"(iOS|iPhone|Android)"}}].freeze \ No newline at end of file +RULES = [{:app=>"Apple Podcasts", :match=>{"startsWith"=>"AppleCoreMedia"}, :platform=>{"regex"=>"\\((\\w+\\s*\\w*)", "replacements"=>[{"name"=>"Macintosh", "replaceWith"=>"Mac"}]}}, {:app=>"Apple Podcasts", :match=>{"startsWith"=>"itunesstored"}, :platform=>{"regex"=>"(iPad|iPod|iPhone)"}}, {:app=>"iTunes", :match=>{"startsWith"=>"iTunes", "excluding"=>{"regex"=>"Downcast|iCatcher|SqueezeCenter|SqueezeNetwork|MusicServer"}}, :platform=>{"regex"=>"\\((\\w+\\s*\\w*)", "replacements"=>[{"name"=>"Macintosh", "replaceWith"=>"Mac"}]}}, {:app=>"Apple Podcasts", :match=>{"includes"=>"watchOS", "excluding"=>{"regex"=>"^atc/|\\(null\\) watchOS/"}}, :platform=>{"text"=>"watchOS"}}, {:app=>"Spotify", :match=>{"startsWith"=>"Spotify", "excluding"=>{"regex"=>"^Spotify/1\\.0$"}}, :platform=>{"regexes"=>["(Android|iOS)"]}}, {:app=>"CastBox", :match=>{"startsWith"=>["CastBox", "Castbox"]}, :platform=>{"regexes"=>["(Android|iOS|OS\\sVersion)", "(CastBox)"], "replacements"=>[{"name"=>"OS Version", "replaceWith"=>"iOS"}, {"name"=>"CastBox", "replaceWith"=>"Android"}]}}, {:app=>"Alexa", :match=>{"startsWith"=>"Alexa"}, :platform=>{"text"=>"Alexa-capable device"}}, {:app=>"Alexa", :match=>{"startsWith"=>"Echo"}, :platform=>{"text"=>"Amazon Echo", "userAgents"=>[{"userAgent"=>"Echo/1.0(APNG)", "platform"=>"Amazon Echo"}]}}, {:app=>"Deezer", :match=>{"startsWith"=>"Deezer"}, :platform=>{"regexes"=>["(Android|Darwin)", "\\((\\w+\\s*\\w*)"], "replacements"=>[{"name"=>"osx", "replaceWith"=>"Mac"}, {"name"=>"Darwin", "replaceWith"=>"Apple Device"}]}}, {:app=>"Overcast", :match=>{"startsWith"=>"Overcast", "excluding"=>{"regex"=>"^Overcast/1\\.0 Podcast Sync"}}, :platform=>{"text"=>"iOS"}}, {:app=>"radio.net", :match=>{"startsWith"=>["radio.net", "radio.de", "radio.at", "radio.fr", "radio.dk", "radio.es", "radio.it", "radio.pt", "radio.pl"]}, :platform=>{"regex"=>"(Android|Darwin|Linux)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}, {"name"=>"Linux", "replaceWith"=>"Android"}]}}, {:app=>"PocketCasts", :match=>{"startsWith"=>["PocketCasts", "Pocket Casts", "Shifty Jelly Pocket Casts"]}, :platform=>{"regex"=>"(Android)"}}, {:app=>"Himalaya", :match=>{"startsWith"=>"Himalaya"}, :platform=>{"regex"=>"(Darwin|Android)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}}, {:app=>"ExoPlayer", :match=>{"startsWith"=>["ExoPlayer", "yourApplicationName", "null", "md5d42223d6ee7473da82e8136ffb794439.App"]}, :platform=>{"text"=>"Android"}}, {:app=>"Download Manager", :match=>{"startsWith"=>"AndroidDownloadManager"}, :platform=>{"text"=>"Android"}}, {:app=>"Castamatic", :match=>{"startsWith"=>"Castamatic"}, :platform=>{"text"=>"iOS"}}, {:app=>"The Podcast App (podcast.app)", :match=>{"includes"=>"The Podcast App"}, :platform=>{"text"=>"iOS"}}, {:app=>"CastMix", :match=>{"startsWith"=>"CastMix"}, :platform=>{"text"=>"Android"}}, {:app=>"Unknown App", :match=>{"startsWith"=>"okhttp"}, :platform=>{"text"=>"Android"}}, {:app=>"Stagefright Media Playback Engine", :match=>{"includes"=>"stagefright", "excluding"=>{"text"=>"stagefright alternative"}}, :platform=>{"regex"=>"(Fire OS|Android)"}}, {:app=>"LG Player", :match=>{"startsWith"=>"Player/LG Player", "includes"=>["LG Player", "LG-Player"]}, :platform=>{"text"=>"Android"}}, {:app=>"Android Browser", :match=>{"startsWith"=>"Dalvik"}, :platform=>{"text"=>"Android"}}, {:app=>"Acast", :match=>{"startsWith"=>"Acast"}, :platform=>{"regex"=>"(Darwin|Android|Windows)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}}, {:app=>"Castro", :match=>{"startsWith"=>"Castro"}, :platform=>{"text"=>"iOS"}}, {:app=>"Breaker", :match=>{"startsWith"=>"Breaker"}, :platform=>{"regex"=>"(Darwin|Android)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}}, {:app=>"Podcast Addict", :match=>{"startsWith"=>["PodcastAddict", "Podcast Addict"]}, :platform=>{"text"=>"Android"}}, {:app=>"Podbean", :match=>{"startsWith"=>"Podbean", "excluding"=>{"regex"=>"^Podbean Importer"}}, :platform=>{"regex"=>"(iOS|Android)"}}, {:app=>"Google Podcasts", :match=>{"includes"=>["GSA"], "excluding"=>{"regex"=>"iPhone|iPad"}}, :platform=>{"text"=>"Android"}}, {:app=>"Google Search App", :match=>{"includes"=>["GSA"], "excluding"=>{"regex"=>"Android"}}, :platform=>{"regexes"=>["(iPhone|iPad)"]}}, {:app=>"Google Podcasts", :match=>{"includes"=>"GoogleChirp"}, :platform=>{"text"=>"Google Smart Speaker"}}, {:app=>"Stitcher", :match=>{"startsWith"=>"Stitcher"}, :platform=>{"regex"=>"(iOS|Android)"}}, {:app=>"TuneIn", :match=>{"startsWith"=>"TuneIn"}, :platform=>{"regex"=>"(Darwin|Android)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}}, {:app=>"PodCruncher", :match=>{"startsWith"=>"PodCruncher"}, :platform=>{"text"=>"iOS"}}, {:app=>"iCatcher!", :match=>{"startsWith"=>"iCatcher!", "includes"=>"iCatcher!"}, :platform=>{"regex"=>"\\((iPhone|iPad|iPod touch)", "fallback"=>"iOS"}}, {:app=>"Castaway", :match=>{"startsWith"=>"Castaway"}, :platform=>{"text"=>"iOS"}}, {:app=>"Instacast", :match=>{"startsWith"=>"Instacast"}, :platform=>{"text"=>"Apple Device"}}, {:app=>"VLC", :match=>{"startsWith"=>["VLC", "LibVLC"], "includes"=>"VLC"}, :platform=>{"regex"=>"(Android|iPhone)"}}, {:app=>"Podcast Republic", :match=>{"startsWith"=>"PodcastRepublic"}, :platform=>{"text"=>"Android"}}, {:app=>"DoggCatcher", :match=>{"includes"=>"DoggCatcher"}, :platform=>{"text"=>"Android"}}, {:app=>"Player FM", :match=>{"startsWith"=>["Player FM", "Player%20FM"]}, :platform=>{"regex"=>"(Darwin)", "fallback"=>"Android", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}}, {:app=>"Podkicker", :match=>{"startsWith"=>"Podkicker"}, :platform=>{"text"=>"Android"}}, {:app=>"AntennaPod", :match=>{"startsWith"=>"AntennaPod"}, :platform=>{"text"=>"Android"}}, {:app=>"Downcast", :match=>{"startsWith"=>"Downcast", "includes"=>"Downcast"}, :platform=>{"regex"=>"\\((iPhone|iPad|iPod touch|Mac)"}}, {:app=>"gPodder", :match=>{"startsWith"=>"gPodder"}, :platform=>{"regex"=>"(Linux|Windows)"}}, {:app=>"Podcatcher Deluxe", :match=>{"includes"=>"Podcatcher Deluxe"}, :platform=>{"text"=>"Android"}}, {:app=>"Procast", :match=>{"startsWith"=>["Procast", "ProCast"]}, :platform=>{"text"=>"iOS"}}, {:app=>"RSSRadio", :match=>{"startsWith"=>"RSSRadio"}, :platform=>{"regex"=>"(iPhone|iPad|iPod touch|Darwin)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}], "fallback"=>"iOS"}}, {:app=>"Podcat", :match=>{"startsWith"=>"Podcat", "excluding"=>{"regex"=>"Podcatcher"}}, :platform=>{"text"=>"iOS"}}, {:app=>"Audio Now", :match=>{"startsWith"=>"AudioNow", "includes"=>"audionow"}, :platform=>{"regex"=>"(iOS|Android)"}}, {:app=>"DIE ZEIT App", :match=>{"includes"=>"ZONApp"}, :platform=>{"regex"=>"(iPhone|iPad|iPod touch|Android)"}}, {:app=>"F.A.Z Der Tag App", :match=>{"includes"=>"FAZDERTAG"}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch)"]}}, {:app=>"ANTENNE BAYERN App", :match=>{"includes"=>"AntenneBayern"}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch)"]}}, {:app=>"BuzzFeed App", :match=>{"includes"=>"buzzfeed"}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch)"]}}, {:app=>"Facebook in-app browser", :match=>{"includes"=>["FBAN", "FBAV"]}, :platform=>{"regexes"=>["\\((iPhone|iPad|iPod touch)", "(Android)"]}}, {:app=>"Instagram in-app browser", :match=>{"includes"=>"Instagram"}, :platform=>{"regexes"=>["(iPad)", "(iPhone|Android)"]}}, {:app=>"Twitter in-app browser", :match=>{"includes"=>"Twitter", "excluding"=>{"regex"=>"^TelegramBot "}}, :platform=>{"regex"=>"(iPhone|iPad|Darwin|Android)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"Apple device"}]}}, {:app=>"Pinterest in-app browser", :match=>{"includes"=>"Pinterest"}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch)"]}}, {:app=>"Windows Media Player", :match=>{"startsWith"=>["NSPlayer", "WMPlayer"]}, :platform=>{"text"=>"Windows"}}, {:app=>"Sonos", :match=>{"includes"=>"Sonos"}, :platform=>{"text"=>"Sonos"}}, {:app=>"Internet Explorer", :match=>{"includes"=>"Trident"}, :platform=>{"regex"=>"(Windows Phone)", "fallback"=>"Windows"}}, {:app=>"Kodi Media Center", :match=>{"startsWith"=>"Kodi", "includes"=>"Kodi"}, :platform=>{"regex"=>"(X11|Android|Windows)", "replacements"=>[{"name"=>"X11", "replaceWith"=>"Linux"}]}}, {:app=>"HermesPod", :match=>{"startsWith"=>"+hermespod.com"}, :platform=>{"text"=>"Windows"}}, {:app=>"ViennaRSS", :match=>{"includes"=>"Vienna"}, :platform=>{"text"=>"Mac"}}, {:app=>"Unknown client", :match=>{"startsWith"=>"(null)", "excluding"=>{"regex"=>"^atc/|\\(null\\) watchOS/"}}, :platform=>{"regex"=>"(iPhone|iPad|iPod touch)"}}, {:app=>"Clementine Music Player", :match=>{"startsWith"=>"Clementine"}, :platform=>{"text"=>"Unknown"}}, {:app=>"Flipboard", :match=>{"includes"=>"Flipboard", "excluding"=>{"regex"=>"FlipboardProxy/"}}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch|Macintosh)"], "replacements"=>[{"name"=>"Macintosh", "replaceWith"=>"Mac"}]}}, {:app=>"iVoox", :match=>{"startsWith"=>["ivoox", "iVoox"]}, :platform=>{"regexes"=>["(Android)", "(Darwin)\\/", "\\((iPhone|iPad|iPod touch|Macintosh)"], "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"Apple device"}, {"name"=>"Macintosh", "replaceWith"=>"Mac"}]}}, {:app=>"FYEO", :match=>{"startsWith"=>"FYEO"}, :platform=>{"regex"=>"(iOS|Android)"}}, {:app=>"Amazon Music", :match=>{"startsWith"=>"AmazonMusic"}, :platform=>{"regex"=>"(iPhone|Android|MacOS|Fire OS|iPad)"}}, {:app=>"Podimo", :match=>{"startsWith"=>"Podimo"}, :platform=>{"regex"=>"(iOS|Android)"}}, {:app=>"ARD Audiothek", :match=>{"startsWith"=>"ARD Audiothek"}, :platform=>{"regex"=>"(iOS|Android)"}}, {:app=>"Samsung Podcast", :match=>{"startsWith"=>"sp-agent"}, :platform=>{"text"=>"Android"}}, {:app=>"RTL+", :match=>{"startsWith"=>"RTL+"}, :platform=>{"regex"=>"(iOS|iPhone|Android)"}}].freeze \ No newline at end of file diff --git a/lib/pod_ident/version.rb b/lib/pod_ident/version.rb index 0dfdf59..78c4d43 100644 --- a/lib/pod_ident/version.rb +++ b/lib/pod_ident/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module PodIdent - VERSION = '1.1.4' + VERSION = '1.1.5' end diff --git a/spec/detection_rules.rb b/spec/detection_rules.rb index 1de9ae0..0dedce4 100644 --- a/spec/detection_rules.rb +++ b/spec/detection_rules.rb @@ -1,3 +1,3 @@ # DO NOT EDIT THIS FILE - it gets automatically generated by running "bin/parse-rules" -RULES = [{:app=>"Apple Podcasts", :match=>{"startsWith"=>"AppleCoreMedia"}, :platform=>{"regex"=>"\\((\\w+\\s*\\w*)", "replacements"=>[{"name"=>"Macintosh", "replaceWith"=>"Mac"}]}, :test=>{"userAgents"=>[{"userAgent"=>"AppleCoreMedia/1.0.0.10B500 (iPod; U; CPU OS 6_1_6 like Mac OS X; en_gb)", "platform"=>"iPod"}, {"userAgent"=>"AppleCoreMedia/1.0.0.17D2102 (Macintosh; U; Intel Mac OS X 10_13_3; de_de)", "platform"=>"Mac"}, {"userAgent"=>"AppleCoreMedia/1.0.0.15L5186e (Apple TV; U; CPU OS 11_3 like Mac OS X; fr_fr)", "platform"=>"Apple TV"}]}}, {:app=>"Apple Podcasts", :match=>{"startsWith"=>"itunesstored"}, :platform=>{"regex"=>"(iPad|iPod|iPhone)"}, :test=>{"userAgents"=>[{"userAgent"=>"itunesstored/1.0 iOS/10.1 model/iPhone9,3 hwp/t8010 build/14B72c (6; dt:139)", "platform"=>"iPhone"}, {"userAgent"=>"itunesstored/1.0 iOS/10.1.1 model/iPad3,4 hwp/s5l8955x build/14B100 (5; dt:83)", "platform"=>"iPad"}]}}, {:app=>"iTunes", :match=>{"startsWith"=>"iTunes", "excluding"=>{"regex"=>"Downcast|iCatcher|SqueezeCenter|SqueezeNetwork|MusicServer"}}, :platform=>{"regex"=>"\\((\\w+\\s*\\w*)", "replacements"=>[{"name"=>"Macintosh", "replaceWith"=>"Mac"}]}, :test=>{"userAgents"=>[{"userAgent"=>"iTunes/12.7.3 (Macintosh; OS X 10.13.4) AppleWebKit/605.1.33.1.2", "platform"=>"Mac"}, {"userAgent"=>"iTunes/12.7.3 (Windows; Microsoft Windows 10 Home Premium Edition (Build 10240)) AppleWebKit/7604.5002.1000.1", "platform"=>"Windows"}, {"userAgent"=>"iTunes (iCatcher!/2.7.4)", "negative"=>true}]}}, {:app=>"Apple Podcasts", :match=>{"includes"=>"watchOS", "excluding"=>{"regex"=>"^atc/|\\(null\\) watchOS/"}}, :platform=>{"text"=>"watchOS"}, :test=>{"userAgents"=>[{"userAgent"=>"watchOS/5.0 model/Watch2,3 hwp/t8002 build/16R364 (6; dt:133)", "platform"=>"watchOS"}]}}, {:app=>"Spotify", :match=>{"startsWith"=>"Spotify", "excluding"=>{"regex"=>"^Spotify/1\\.0$"}}, :platform=>{"regexes"=>["(Android|iOS)"]}, :test=>{"userAgents"=>[{"userAgent"=>"Spotify/8.7.18.1138 Android/28 (ANE-LX1)", "platform"=>"Android"}, {"userAgent"=>"Spotify/8.7.18.1138 Android/29 (MAR-LX1A)", "platform"=>"Android"}, {"userAgent"=>"Spotify/8.7.18.1138 Android/32 (Pixel 4a)", "platform"=>"Android"}, {"userAgent"=>"Spotify/8.7.16 iOS/15.1 (iPhone12,3)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.7.16 iOS/15.3.1 (iPhone12,1)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.7.18.1138 Android/29 (M2006C3LG)", "platform"=>"Android"}, {"userAgent"=>"Spotify/8.7.14 iOS/14.8 (iPhone13,1)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.6.62 iOS/14.7.1 (iPhone8,2)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.7.16.1354 Android/29 (MAR-LX1A)", "platform"=>"Android"}, {"userAgent"=>"Spotify/8.7.18 iOS/15.4.1 (iPhone13,4)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.7.18 iOS/15.4 (iPhone12,1)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.7.18 iOS/15.4 (iPhone11,8)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.7.18 iOS/15.2.1 (iPhone12,8)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.7.16.1354 Android/28 (ANE-LX1)", "platform"=>"Android"}, {"userAgent"=>"Spotify/8.7.18 iOS/13.6 (iPhone8,1)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.7.18.1138 Android/30 (ONEPLUS A6003)", "platform"=>"Android"}]}}, {:app=>"CastBox", :match=>{"startsWith"=>["CastBox", "Castbox"]}, :platform=>{"regexes"=>["(Android|iOS|OS\\sVersion)", "(CastBox)"], "replacements"=>[{"name"=>"OS Version", "replaceWith"=>"iOS"}, {"name"=>"CastBox", "replaceWith"=>"Android"}]}, :test=>{"userAgents"=>[{"userAgent"=>"CastBox/7.11.3-180226133 (Linux;Android 4.1.2) ExoPlayerLib/2.4.0", "platform"=>"Android"}, {"userAgent"=>"Castbox/3.4.1 (fm.castbox.audiobook.radio.podcast; build:1; iOS 11.3.0) Alamofire/4.4.0", "platform"=>"iOS"}, {"userAgent"=>"CastBox/com.castbox.CastBox (1.0; OS Version 10.3.2 (Build 14F89))", "platform"=>"iOS"}]}}, {:app=>"Amazon Alexa", :match=>{"startsWith"=>"Alexa"}, :platform=>{"text"=>"Alexa-capable device"}, :test=>{"userAgents"=>[{"userAgent"=>"AlexaMediaPlayer/1.0.2353.0_16xxxxxx (Linux;Android 5.1.1) ExoPlayerLib/1.5.9", "platform"=>"Alexa-capable device"}, {"userAgent"=>"Alexa Mobile Voice/2.2.1615.0 (Linux;Android 7.0) ExoPlayerLib/2.2.0", "platform"=>"Alexa-capable device"}, {"userAgent"=>"AlexaService/1.20.1010746 (Linux;Android 8.0.0) ExoPlayerLib/2.4.3", "platform"=>"Alexa-capable device"}]}}, {:app=>"Amazon Alexa", :match=>{"startsWith"=>"Echo"}, :platform=>{"text"=>"Amazon Echo", "userAgents"=>[{"userAgent"=>"Echo/1.0(APNG)", "platform"=>"Amazon Echo"}]}}, {:app=>"Deezer", :match=>{"startsWith"=>"Deezer"}, :platform=>{"regexes"=>["(Android|Darwin)", "\\((\\w+\\s*\\w*)"], "replacements"=>[{"name"=>"osx", "replaceWith"=>"Mac"}, {"name"=>"Darwin", "replaceWith"=>"Apple Device"}]}, :test=>{"userAgents"=>[{"userAgent"=>"Deezer/5.4.22.54 (Android; 8.0.0; Mobile; de) samsung SM-G930F", "platform"=>"Android"}, {"userAgent"=>"Deezer/6.0.2.1 CFNetwork/808.3 Darwin/16.3.0", "platform"=>"Apple Device"}, {"userAgent"=>"DeezerJukebox/5.4.17.23 (Linux;Android 7.0) ExoPlayerLib/1.5.16", "platform"=>"Android"}, {"userAgent"=>"DeezerSDK/1.2.14 (Windows; 6.3.9600; Desktop; de) pc", "platform"=>"Windows"}, {"userAgent"=>"DeezerSDK/1.2.14 (osx; 10.12.3; Desktop; en) MacBookAir7_2", "platform"=>"Mac"}]}}, {:app=>"Overcast", :match=>{"startsWith"=>"Overcast", "excluding"=>{"regex"=>"^Overcast/1\\.0 Podcast Sync"}}, :platform=>{"text"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"Overcast/2.0 (+http://overcast.fm/; iOS podcast app)", "platform"=>"iOS"}, {"userAgent"=>"Overcast/3.0 (+http://overcast.fm/; iOS podcast app) BMID/E67A460F81", "platform"=>"iOS"}]}}, {:app=>"radio.net", :match=>{"startsWith"=>["radio.net", "radio.de", "radio.at", "radio.fr", "radio.dk", "radio.es", "radio.it", "radio.pt", "radio.pl"]}, :platform=>{"regex"=>"(Android|Darwin|Linux)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}, {"name"=>"Linux", "replaceWith"=>"Android"}]}, :test=>{"userAgents"=>[{"userAgent"=>"radio.de 4.9.3 (softwinner/QT-7; Android 4.4.2; de_DE)", "platform"=>"Android"}, {"userAgent"=>"radio.de/5.13.0. 1-app (Linux; 13) ExoPlayerLib/2.19.1", "platform"=>"Android"}, {"userAgent"=>"radio.de/3735 CFNetwork/758.5.3 Darwin/15.6.0", "platform"=>"iOS"}]}}, {:app=>"PocketCasts", :match=>{"startsWith"=>["PocketCasts", "Pocket Casts", "Shifty Jelly Pocket Casts"]}, :platform=>{"regex"=>"(Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"Pocket Casts", "platform"=>nil}, {"userAgent"=>"PocketCasts/1.0 (Pocket Casts Feed Parser; +http://pocketcasts.com/)", "platform"=>nil}, {"userAgent"=>"Shifty Jelly Pocket Casts, Android v4.5.1", "platform"=>"Android"}]}}, {:app=>"Himalaya", :match=>{"startsWith"=>"Himalaya"}, :platform=>{"regex"=>"(Darwin|Android)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}, :test=>{"userAgents"=>[{"userAgent"=>"Himalaya/1460 CFNetwork/974.2.1 Darwin/18.0.0", "platform"=>"iOS"}, {"userAgent"=>"Himalaya/2.2.2 Android/27 (COL-AL10)", "platform"=>"Android"}]}}, {:app=>"ExoPlayer", :match=>{"startsWith"=>["ExoPlayer", "yourApplicationName", "null", "md5d42223d6ee7473da82e8136ffb794439.App"]}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"ExoPlayer/3.15.12.5 (Linux;Android 5.0) ExoPlayerLib/1.5.0", "platform"=>"Android"}, {"userAgent"=>"yourApplicationName/2.9.10 (Linux;Android 8.0.0) ExoPlayerLib/2.8.1", "platform"=>"Android"}, {"userAgent"=>"null/4.100 (Linux;Android 7.0) ExoPlayerLib/2.8.3", "platform"=>"Android"}, {"userAgent"=>"md5d42223d6ee7473da82e8136ffb794439.App/4.100 (Linux;Android 8.0.0) ExoPlayerLib/2.8.3", "platform"=>"Android"}]}}, {:app=>"Download Manager", :match=>{"startsWith"=>"AndroidDownloadManager"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"AndroidDownloadManager/8.1.0 (Linux; U; Android 8.1.0; TA-1012 Build/OPR1.170623.026)", "platform"=>"Android"}]}}, {:app=>"Castamatic", :match=>{"startsWith"=>"Castamatic"}, :platform=>{"text"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"Castamatic/2639 CFNetwork/975.0.3 Darwin/18.2.0", "platform"=>"iOS"}, {"userAgent"=>"Castamatic/4.5.2 (com.gunpmedia.Castamatic; build:2609; iOS 12.0.0) Alamofire/4.7.3", "platform"=>"iOS"}]}}, {:app=>"The Podcast App (podcast.app)", :match=>{"includes"=>"The Podcast App"}, :platform=>{"text"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"podcast/577 iOS/Version 12.0.1 (Build 16A404) The Podcast App/2.19.1", "platform"=>"iOS"}]}}, {:app=>"CastMix", :match=>{"startsWith"=>"CastMix"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"CastMix/2.6.10 (Linux;Android 8.1.0) ExoPlayerLib/2.8.4", "platform"=>"Android"}]}}, {:app=>"Unknown App", :match=>{"startsWith"=>"okhttp"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"okhttp/3.9.0", "platform"=>"Android"}, {"userAgent"=>"okhttp/3.9.1 BMID/E67A45D491", "platform"=>"Android"}]}}, {:app=>"Stagefright Media Playback Engine", :match=>{"includes"=>"stagefright", "excluding"=>{"text"=>"stagefright alternative"}}, :platform=>{"regex"=>"(Fire OS|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"5050X-SVN/010 03; stagefright/1.2 (Linux;Android 4.3)", "platform"=>"Android"}, {"userAgent"=>"Fire OS/5.2.6.0 stagefright/1.2 (Linux;Android 5.1.1)", "platform"=>"Fire OS"}, {"userAgent"=>"HUAWEI P7 mini/C150B118 stagefright/1.2 (Linux;Android 4.3)", "platform"=>"Android"}, {"userAgent"=>"Samsung GT-I9100 stagefright/1.2 (Linux;Android 4.0.3)", "platform"=>"Android"}, {"userAgent"=>"SonyC1505 Build/11.3.A.2.23 stagefright/1.2 (Linux;Android 4.1.1)", "platform"=>"Android"}, {"userAgent"=>"TCL-6039Y-SVN/010 12; stagefright/1.2 (Linux;Android 5.0.2)", "platform"=>"Android"}, {"userAgent"=>"stagefright/1.2 (Linux;Android NexPlayer LG-E410i10g-EUR-XX)", "platform"=>"Android"}, {"userAgent"=>"LG-D331/V10f Player/LG Player 1.0 for Android 4.4.2 (stagefright alternative)", "negative"=>true}]}}, {:app=>"LG Player", :match=>{"startsWith"=>"Player/LG Player", "includes"=>["LG Player", "LG-Player"]}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"Player/LG Player 1.0 for Android(stagefright alternative)", "platform"=>"Android"}, {"userAgent"=>"Player/LG Player 1.0 for Android(stagefright alternative) (SKT-HLS; SKT-LG-p.0.1; LG-F240S)", "platform"=>"Android"}, {"userAgent"=>"P88020c-EUR/XXX; LG-Player/NexPlayer4.0 for Android(stagefright alternative)", "platform"=>"Android"}]}}, {:app=>"Android Browser", :match=>{"startsWith"=>"Dalvik"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"Dalvik/2.1.0 (Linux; U; Android 8.1.0; Pixel 2 XL Build/OPM1.171019.018)", "platform"=>"Android"}]}}, {:app=>"Acast", :match=>{"startsWith"=>"Acast"}, :platform=>{"regex"=>"(Darwin|Android|Windows)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}, :test=>{"userAgents"=>[{"userAgent"=>"Acast/1.29.0 (Linux;Android 7.0) ExoPlayerLib/2.5.4", "platform"=>"Android"}, {"userAgent"=>"Acast/3346 CFNetwork/758.4.3 Darwin/15.5.0", "platform"=>"iOS"}, {"userAgent"=>"Acast Windows", "platform"=>"Windows"}]}}, {:app=>"Castro", :match=>{"startsWith"=>"Castro"}, :platform=>{"text"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"Castro/98 CFNetwork/894 Darwin/17.4.0", "platform"=>"iOS"}, {"userAgent"=>"Castro 2 2.6.2/723 Like iTunes", "platform"=>"iOS"}]}}, {:app=>"Breaker", :match=>{"startsWith"=>"Breaker"}, :platform=>{"regex"=>"(Darwin|Android)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}, :test=>{"userAgents"=>[{"userAgent"=>"Breaker/671 CFNetwork/893.14.2 Darwin/17.3.0", "platform"=>"iOS"}, {"userAgent"=>"Breaker/671 (Linux;Android 1.2.3)", "platform"=>"Android"}]}}, {:app=>"Podcast Addict", :match=>{"startsWith"=>["PodcastAddict", "Podcast Addict"]}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"PodcastAddict/v2 - Dalvik/2.1.0 (Linux; U; Android 8.1.0; Z2 Plus Build/OPM1.171019.011)", "platform"=>"Android"}, {"userAgent"=>"Podcast Addict - Dalvik/2.1.0 (Linux; U; Android 6.0; K6000 Pro Build/MRA58K)", "platform"=>"Android"}]}}, {:app=>"Podbean", :match=>{"startsWith"=>"Podbean", "excluding"=>{"regex"=>"^Podbean Importer"}}, :platform=>{"regex"=>"(iOS|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"Podbean/Android App 5.8.0 (http://podbean.com),f87ecb5ac4d803301e79655314ebee5d", "platform"=>"Android"}, {"userAgent"=>"Podbean/iOS (http://podbean.com) 4.1.7 - c343a7bce038f51b71dbd907f06b0cdd", "platform"=>"iOS"}]}}, {:app=>"Google Podcasts", :match=>{"includes"=>["GSA"], "excluding"=>{"regex"=>"iPhone|iPad"}}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; Android 7.0; MI 5 Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 GSA/7.21.23.21.arm64", "platform"=>"Android"}]}}, {:app=>"Google Search App", :match=>{"includes"=>["GSA"], "excluding"=>{"regex"=>"Android"}}, :platform=>{"regexes"=>["(iPhone|iPad)"]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) GSA/42.0.183854831 Mobile/13G36 Safari/601.1", "platform"=>"iPhone"}]}}, {:app=>"Google Podcasts", :match=>{"includes"=>"GoogleChirp"}, :platform=>{"text"=>"Google Smart Speaker"}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 Android GoogleChirp", "platform"=>"Google Smart Speaker"}]}}, {:app=>"Stitcher", :match=>{"startsWith"=>"Stitcher"}, :platform=>{"regex"=>"(iOS|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"Stitcher/Android", "platform"=>"Android"}, {"userAgent"=>"Stitcher/iOS", "platform"=>"iOS"}]}}, {:app=>"TuneIn", :match=>{"startsWith"=>"TuneIn"}, :platform=>{"regex"=>"(Darwin|Android)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}, :test=>{"userAgents"=>[{"userAgent"=>"TuneIn%20Radio%20Pro/1044 CFNetwork/894 Darwin/17.4.0", "platform"=>"iOS"}, {"userAgent"=>"TuneIn%20Radio/1016 CFNetwork/811.5.4 Darwin/16.6.0", "platform"=>"iOS"}, {"userAgent"=>"TuneIn%20Radio/1011 (Linux;Android 123", "platform"=>"Android"}]}}, {:app=>"PodCruncher", :match=>{"startsWith"=>"PodCruncher"}, :platform=>{"text"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"PodCruncher/3.3.1 CFNetwork/811.5.4 Darwin/16.7.0", "platform"=>"iOS"}]}}, {:app=>"iCatcher!", :match=>{"startsWith"=>"iCatcher!", "includes"=>"iCatcher!"}, :platform=>{"regex"=>"\\((iPhone|iPad|iPod touch)", "fallback"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"iCatcher! Podcast Player/2.6.1", "platform"=>"iOS"}, {"userAgent"=>"iCatcher!/3.1 (iPhone; iOS 10.3.3; Scale/2.0)", "platform"=>"iPhone"}, {"userAgent"=>"iCatcher!/3.4 (iPod touch; iOS 9.3.5; Scale/2.0)", "platform"=>"iPod touch"}, {"userAgent"=>"iTunes (iCatcher!/2.7.4)", "platform"=>"iOS"}]}}, {:app=>"Castaway", :match=>{"startsWith"=>"Castaway"}, :platform=>{"text"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"Castaway/6 CFNetwork/894 Darwin/17.4.0", "platform"=>"iOS"}]}}, {:app=>"Instacast", :match=>{"startsWith"=>"Instacast"}, :platform=>{"text"=>"Apple Device"}, :test=>{"userAgents"=>[{"userAgent"=>"Instacast/2763 CFNetwork/897.15 Darwin/17.5.0", "platform"=>"Apple Device"}, {"userAgent"=>"Instacast/4.5.1 CFNetwork/894 Darwin/17.4.0", "platform"=>"Apple Device"}]}}, {:app=>"VLC", :match=>{"startsWith"=>["VLC", "LibVLC"], "includes"=>"VLC"}, :platform=>{"regex"=>"(Android|iPhone)"}, :test=>{"userAgents"=>[{"userAgent"=>"LibVLC/2.0.1 (Linux; U; Android 8.1.0;walleye/OPM1.171019.021)", "platform"=>"Android"}, {"userAgent"=>"Mozilla/5.0 (iPhone; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/10.0.2 Mobile/11A465 Safari/9537.53 VLC for iOS/3.0.2", "platform"=>"iPhone"}, {"userAgent"=>"VLC/2.2.0-git LibVLC/2.2.0-git (Radioline)", "platform"=>nil}]}}, {:app=>"Podcast Republic", :match=>{"startsWith"=>"PodcastRepublic"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"PodcastRepublic/18.0 (Linux; U; Android 8.0.0;HWVTR/HUAWEIVTR-L29)", "platform"=>"Android"}]}}, {:app=>"DoggCatcher", :match=>{"includes"=>"DoggCatcher"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; U; Windows NT 6.1; en-us; dream) DoggCatcher", "platform"=>"Android"}]}}, {:app=>"Player FM", :match=>{"startsWith"=>["Player FM", "Player%20FM"]}, :platform=>{"regex"=>"(Darwin)", "fallback"=>"Android", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}, :test=>{"userAgents"=>[{"userAgent"=>"Player FM BMID/E6807A587C", "platform"=>"Android"}, {"userAgent"=>"Player FM", "platform"=>"Android"}, {"userAgent"=>"Player%20FM/214 CFNetwork/975.0.3 Darwin/18.2.0", "platform"=>"iOS"}]}}, {:app=>"Podkicker", :match=>{"startsWith"=>"Podkicker"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"Podkicker Pro/2.3.3", "platform"=>"Android"}, {"userAgent"=>"Podkicker/1.2.10", "platform"=>"Android"}]}}, {:app=>"AntennaPod", :match=>{"startsWith"=>"AntennaPod"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"AntennaPod/", "platform"=>"Android"}, {"userAgent"=>"AntennaPod/1.4.2.2", "platform"=>"Android"}]}}, {:app=>"Downcast", :match=>{"startsWith"=>"Downcast", "includes"=>"Downcast"}, :platform=>{"regex"=>"\\((iPhone|iPad|iPod touch|Mac)"}, :test=>{"userAgents"=>[{"userAgent"=>"Downcast/2.9.30 (iPhone; iOS 11.2.6; Scale/3.00)", "platform"=>"iPhone"}, {"userAgent"=>"Downcast/2.9.30 (Mac OS X Version 10.13.3 (Build 17D102))", "platform"=>"Mac"}, {"userAgent"=>"iTunes/10.6 (Downcast v2.7.9 (Build 1004))", "platform"=>nil}]}}, {:app=>"gPodder", :match=>{"startsWith"=>"gPodder"}, :platform=>{"regex"=>"(Linux|Windows)"}, :test=>{"userAgents"=>[{"userAgent"=>"gPodder/3.9.0 (+http://gpodder.org/)", "platform"=>nil}, {"userAgent"=>"gPodder/3.9.1 (+http://gpodder.org/) Linux/4.14.16-gentoo", "platform"=>"Linux"}, {"userAgent"=>"gPodder/3.9.2 (+http://gpodder.org/) Windows/10", "platform"=>"Windows"}]}}, {:app=>"Podcatcher Deluxe", :match=>{"includes"=>"Podcatcher Deluxe"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"Podcatcher Deluxe/2016.06", "platform"=>"Android"}, {"userAgent"=>"Video Podcatcher Deluxe/2016.06", "platform"=>"Android"}]}}, {:app=>"Procast", :match=>{"startsWith"=>["Procast", "ProCast"]}, :platform=>{"text"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"Procast (iOS)", "platform"=>"iOS"}, {"userAgent"=>"ProCast/1 CFNetwork/897.15 Darwin/17.5.0", "platform"=>"iOS"}]}}, {:app=>"RSSRadio", :match=>{"startsWith"=>"RSSRadio"}, :platform=>{"regex"=>"(iPhone|iPad|iPod touch|Darwin)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}], "fallback"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"RSSRadio/9186 (iPhone;iOS;11.2.6)", "platform"=>"iPhone"}, {"userAgent"=>"RSSRadio/9186", "platform"=>"iOS"}, {"userAgent"=>"RSSRadio7/9172 CFNetwork/889.9 Darwin/17.2.0", "platform"=>"iOS"}]}}, {:app=>"Podcat", :match=>{"startsWith"=>"Podcat", "excluding"=>{"regex"=>"Podcatcher"}}, :platform=>{"text"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"Podcat%202/18084 CFNetwork/894 Darwin/17.4.0", "platform"=>"iOS"}, {"userAgent"=>"Podcatcher Deluxe/2016.06", "negative"=>true}]}}, {:app=>"Audio Now", :match=>{"startsWith"=>"AudioNow", "includes"=>"audionow"}, :platform=>{"regex"=>"(iOS|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"AudioNow/1.0.12 (de.dmhub.AudioNow; build:210789.411167595; iOS 10.3.3) Alamofire/4.8.2", "platform"=>"iOS"}, {"userAgent"=>"Android_de.dmhub.audionow_1.1.0", "platform"=>"Android"}]}}, {:app=>"DIE ZEIT App", :match=>{"includes"=>"ZONApp"}, :platform=>{"regex"=>"(iPhone|iPad|iPod touch|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; U; Android 4.4.2; de-de; HTC Desire 526G dual sim Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 ZONApp/Android/1.8.1 67206782-afbc-4e20-b7c0-1a234bc662ae", "platform"=>"Android"}, {"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A403 ZONApp/iOS/1.6 1136a267-238a-4e27-8ca4-365357db1292", "platform"=>"iPhone"}]}}, {:app=>"F.A.Z Der Tag App", :match=>{"includes"=>"FAZDERTAG"}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch)"]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; Android 8.1.0; INE-LX2 Build/HUAWEIINE-LX2; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36; FAZDERTAG FAZNETAPPS", "platform"=>"Android"}, {"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A456 FAZDERTAG FAZNETAPPS", "platform"=>"iPhone"}]}}, {:app=>"ANTENNE BAYERN App", :match=>{"includes"=>"AntenneBayern"}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch)"]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; Android 8.1.0; ONEPLUS A5000 Build/OPM1.171019.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36 AppName/AntenneRadioApps Station/AntenneBayern AppVersion/4.3.5", "platform"=>"Android"}, {"userAgent"=>"Mozilla/5.0 (iPad; CPU OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 AppName/AntenneRadioApps Station/AntenneBayern AppVersion/4.3.4 OS/iOS_10.3.3", "platform"=>"iPad"}]}}, {:app=>"BuzzFeed App", :match=>{"includes"=>"buzzfeed"}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch)"]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; Android 9; Pixel Build/PPR2.181005.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36 buzzfeed/543001 (progressiveloading)", "platform"=>"Android"}, {"userAgent"=>"Mozilla/5.0 (iPad; CPU OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16A366 QuantcastSDK/iOS_1.6.0/16m6ajz048305w9k-tkkr70msrzxq3eee buzzfeed/5520004 (progressiveloading)", "platform"=>"iPad"}]}}, {:app=>"Facebook in-app browser", :match=>{"includes"=>["FBAN", "FBAV"]}, :platform=>{"regexes"=>["\\((iPhone|iPad|iPod touch)", "(Android)"]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Mobile/15A372 [FBAN/MessengerForiOS;FBAV/153.0.0.47.97;FBBV/91923955;FBDV/iPhone9,3;FBMD/iPhone;FBSN/iOS;FBSV/11.0;FBSS/2;FBCR/OrangeFrance;FBID/phone;FBLC/fr_FR;FBOP/5;FBRV/0]", "platform"=>"iPhone"}, {"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_1 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Mobile/15A402 [FBAN/FBIOS;FBAV/160.0.0.34.96;FBBV/93101108;FBDV/iPhone7,2;FBMD/iPhone;FBSN/iOS;FBSV/11.0.1;FBSS/2;FBCR/E-Plus;FBID/phone;FBLC/de_DE;FBOP/5;FBRV/0]", "platform"=>"iPhone"}, {"userAgent"=>"Mozilla/5.0 (iPod touch; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D100 [FBAN/FBIOS;FBAV/160.0.0.34.96;FBBV/93101108;FBDV/iPod7,1;FBMD/iPod touch;FBSN/iOS;FBSV/11.2.6;FBSS/2;FBCR/;FBID/phone;FBLC/fr_FR;FBOP/5;FBRV/0]", "platform"=>"iPod touch"}, {"userAgent"=>"Mozilla/5.0 (Linux; Android 8.1.0; TA-1012 Build/OPR1.170623.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/161.0.0.35.93;]", "platform"=>"Android"}]}}, {:app=>"Instagram in-app browser", :match=>{"includes"=>"Instagram"}, :platform=>{"regexes"=>["(iPad)", "(iPhone|Android)"]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G36 Instagram 32.0.0.14.97 (iPad2,5; iPhone OS 9_3_5; de_AT; de-AT; scale=2.00; gamut=normal; 640x960)", "platform"=>"iPad"}, {"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G36 Instagram 34.0.0.10.95 (iPhone8,1; iPhone OS 9_3_5; de_AT; de-AT; scale=2.00; gamut=normal; 750x1334)", "platform"=>"iPhone"}, {"userAgent"=>"Mozilla/5.0 (Linux; U; Android 4.1.2; de-de; ST26i Build/11.2.A.0.31) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 Instagram 30.0.0.12.95 Android (16/4.1.2; 240dpi; 480x854; Sony; ST26i; ST26i; Sony; de_DE; 89867438)", "platform"=>"Android"}]}}, {:app=>"Twitter in-app browser", :match=>{"includes"=>"Twitter", "excluding"=>{"regex"=>"^TelegramBot "}}, :platform=>{"regex"=>"(iPhone|iPad|Darwin|Android)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"Apple device"}]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; Android 7.1.1; XT1650 Build/NPLS26.118-20-5-11; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 TwitterAndroid", "platform"=>"Android"}, {"userAgent"=>"Mozilla/5.0 (iPad; CPU OS 11_2_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/15C202 Twitter for iPhone/7.18", "platform"=>"iPad"}, {"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C92 Twitter for iPhone", "platform"=>"iPhone"}, {"userAgent"=>"Twitter/7.18 CFNetwork/893.14.2 Darwin/17.3.0", "platform"=>"Apple device"}]}}, {:app=>"Pinterest in-app browser", :match=>{"includes"=>"Pinterest"}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch)"]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; Android 8.1.0; EML-L09 Build/HUAWEIEML-L09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36 [Pinterest/Android]", "platform"=>"Android"}, {"userAgent"=>"Mozilla/5.0 (iPad; CPU OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 [Pinterest/iOS]", "platform"=>"iPad"}, {"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C92 [Pinterest/iOS]", "platform"=>"iPhone"}]}}, {:app=>"Windows Media Player", :match=>{"startsWith"=>["NSPlayer", "WMPlayer"]}, :platform=>{"text"=>"Windows"}, :test=>{"userAgents"=>[{"userAgent"=>"NSPlayer/12.00.9651.0000 WMFSDK/12.00.9651.0000", "platform"=>"Windows"}, {"userAgent"=>"NSPlayer/4.1.0.3856", "platform"=>"Windows"}, {"userAgent"=>"WMPlayer/10.0.0.364 guid/2F8D1CB4-0A5A-4FD7-986F-FFDBA14156C7", "platform"=>"Windows"}]}}, {:app=>"Sonos", :match=>{"includes"=>"Sonos"}, :platform=>{"text"=>"Sonos"}, :test=>{"userAgents"=>[{"userAgent"=>"Linux UPnP/1.0 Sonos/47.2-58300 (ZPS13)", "platform"=>"Sonos"}, {"userAgent"=>"Sonos", "platform"=>"Sonos"}]}}, {:app=>"Internet Explorer", :match=>{"includes"=>"Trident"}, :platform=>{"regex"=>"(Windows Phone)", "fallback"=>"Windows"}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/8.0; Touch; rv:11.0; WebBrowser/8.1; IEMobile/11.0; NOKIA; Lumia 930) like Gecko", "platform"=>"Windows Phone"}, {"userAgent"=>"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)", "platform"=>"Windows"}, {"userAgent"=>"Mozilla/5.0; TOB 6.12 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko", "platform"=>"Windows"}, {"userAgent"=>"Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; ASJB; rv:11.0) like Gecko", "platform"=>"Windows"}]}}, {:app=>"Kodi Media Center", :match=>{"startsWith"=>"Kodi", "includes"=>"Kodi"}, :platform=>{"regex"=>"(X11|Android|Windows)", "replacements"=>[{"name"=>"X11", "replaceWith"=>"Linux"}]}, :test=>{"userAgents"=>[{"userAgent"=>"Kodi/14.0 (X11; Linux armv6l) Raspbian GNU/Linux/7 HW_RaspberryPi/1.0 App_Bitness/32 Version/14.0-Git:2014-12-24-e044d5a-dirty", "platform"=>"Linux"}, {"userAgent"=>"Kodi/15.0 (Linux; Android 4.4.2; Gecko Build/KOT49H) Android/4.4.2 Sys_CPU/armv7l App_Bitness/32 Version/15.0-Git:Unknown", "platform"=>"Android"}, {"userAgent"=>"Kodi/16.1 (Windows NT 10.0; WOW64) App_Bitness/32 Version/16.1-Git:20160424-c327c53", "platform"=>"Windows"}]}}, {:app=>"HermesPod", :match=>{"startsWith"=>"+hermespod.com"}, :platform=>{"text"=>"Windows"}, :test=>{"userAgents"=>[{"userAgent"=>"+hermespod.com/v1.5.x", "platform"=>"Windows"}]}}, {:app=>"ViennaRSS", :match=>{"includes"=>"Vienna"}, :platform=>{"text"=>"Mac"}, :test=>{"userAgents"=>[{"userAgent"=>"(Macintosh; Intel Mac OS X 10_9_x) AppleWebKit/9537.78.2 (KHTML, like Gecko) Version/9.1.3 Safari/604.1.38 Vienna/3.2.1", "platform"=>"Mac"}]}}, {:app=>"Unknown client", :match=>{"startsWith"=>"(null)", "excluding"=>{"regex"=>"^atc/|\\(null\\) watchOS/"}}, :platform=>{"regex"=>"(iPhone|iPad|iPod touch)"}, :test=>{"userAgents"=>[{"userAgent"=>"(null) (iPhone; iPhone OS 9.0.2; de_DE)", "platform"=>"iPhone"}]}}, {:app=>"Clementine Music Player", :match=>{"startsWith"=>"Clementine"}, :platform=>{"text"=>"Unknown"}, :test=>{"userAgents"=>[{"userAgent"=>"Clementine 1.3.1 Clementine 1.3.1", "platform"=>"Unknown"}]}}, {:app=>"Flipboard", :match=>{"includes"=>"Flipboard", "excluding"=>{"regex"=>"FlipboardProxy/"}}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch|Macintosh)"], "replacements"=>[{"name"=>"Macintosh", "replaceWith"=>"Mac"}]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; Android 9; ONEPLUS A6003 Build/PKQ1.180716.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36 Flipboard/4.2.2/4495,4.2.2.4495", "platform"=>"Android"}, {"userAgent"=>"Mozilla/5.0 (iPad; CPU OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Mobile/14E304 Flipboard/4.2.20", "platform"=>"iPad"}]}}, {:app=>"iVoox", :match=>{"startsWith"=>["ivoox", "iVoox"]}, :platform=>{"regexes"=>["(Android)", "(Darwin)\\/", "\\((iPhone|iPad|iPod touch|Macintosh)"], "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"Apple device"}, {"name"=>"Macintosh", "replaceWith"=>"Mac"}]}, :test=>{"userAgents"=>[{"userAgent"=>"iVooxApp/3.23_29 (iPhone; iOS; iOS 12.1.4; ; B106)", "platform"=>"iPhone"}, {"userAgent"=>"iVooxApp/3.23_29 (iPad; iOS; iOS 12.2; ; 44CE)", "platform"=>"iPad"}, {"userAgent"=>"ivooxNew/1 CFNetwork/975.0.3 Darwin/18.2.0", "platform"=>"Apple device"}]}}, {:app=>"FYEO", :match=>{"startsWith"=>"FYEO"}, :platform=>{"regex"=>"(iOS|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"FYEO/0.9.0.2450-ce56a8c4/iOS_13.3.0/iPhone8,1", "platform"=>"iOS"}, {"userAgent"=>"FYEO/1.0.1.2907-861d96cd/iOS_13.4.0/iPhone12,1", "platform"=>"iOS"}, {"userAgent"=>"FYEO/0.9.0.2290-6393b910/Android_10/SM-G973F", "platform"=>"Android"}, {"userAgent"=>"FYEO/1.0.2_3024-f737eb44/Android_8.0.0/SM-G960U1", "platform"=>"Android"}, {"userAgent"=>"FYEO/1.0.2_3024-f737eb44/Android_10/Pixel 4", "platform"=>"Android"}, {"userAgent"=>"FYEO/1.0", "platform"=>nil}]}}, {:app=>"Amazon Music", :match=>{"startsWith"=>"AmazonMusic"}, :platform=>{"regex"=>"(iPhone|Android|MacOS|Fire OS|iPad)"}, :test=>{"userAgents"=>[{"userAgent"=>"AmazonMusic/9.15.2 iPhone11,2 CFNetwork/1128.0.1 Darwin/19.6.0", "platform"=>"iPhone"}, {"userAgent"=>"AmazonMusic/9.15.2 iPhone8,4 CFNetwork/1128.0.1 Darwin/19.6.0", "platform"=>"iPhone"}, {"userAgent"=>"AmazonMusic/iPad", "platform"=>"iPad"}, {"userAgent"=>"AmazonMusic/16.17.1 Dalvik/2.1.0 (Linux; U; Android 10; SM-G960F Build/QP1A.190711.020)", "platform"=>"Android"}, {"userAgent"=>"AmazonMusic/MacOS", "platform"=>"MacOS"}, {"userAgent"=>"AmazonMusic/Fire OS", "platform"=>"Fire OS"}]}}, {:app=>"Podimo", :match=>{"startsWith"=>"Podimo"}, :platform=>{"regex"=>"(iOS|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"Podimo/1.1 build 123/iOS 14.1", "platform"=>"iOS"}, {"userAgent"=>"Podimo/1.1 build 123/Android (Linux; U; Android 10; SM-G960F Build/QP1A.190711.020)", "platform"=>"Android"}]}}, {:app=>"ARD Audiothek", :match=>{"startsWith"=>"ARD Audiothek"}, :platform=>{"regex"=>"(iOS|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"ARD Audiothek Android-Auto 2.3.2 - Android Auto/2.3.2 (Linux;Android 11) ExoPlayerLib/2.14.1", "platform"=>"Android"}, {"userAgent"=>"ARD Audiothek Android Production 2.3.2/2.3.2 (Linux;Android 10) ExoPlayerLib/2.14.1", "platform"=>"Android"}, {"userAgent"=>"ARD Audiothek iOS Version 2.3.4, Build 41", "platform"=>"iOS"}]}}, {:app=>"Samsung Podcast", :match=>{"startsWith"=>"sp-agent"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"sp-agent", "platform"=>"Android"}]}}, {:app=>"RTL+", :match=>{"startsWith"=>"RTL+"}, :platform=>{"regex"=>"(iOS|iPhone|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"RTL+/2.8.4.5-live-prod (Linux;Android 12) ExoPlayerLib/2.18.0", "platform"=>"Android"}, {"userAgent"=>"RTL+/1.0.0.18H107 (iPhone; U; CPU OS 14_8_1 like Mac OS X; de_de)", "platform"=>"iPhone"}]}}].freeze \ No newline at end of file +RULES = [{:app=>"Apple Podcasts", :match=>{"startsWith"=>"AppleCoreMedia"}, :platform=>{"regex"=>"\\((\\w+\\s*\\w*)", "replacements"=>[{"name"=>"Macintosh", "replaceWith"=>"Mac"}]}, :test=>{"userAgents"=>[{"userAgent"=>"AppleCoreMedia/1.0.0.10B500 (iPod; U; CPU OS 6_1_6 like Mac OS X; en_gb)", "platform"=>"iPod"}, {"userAgent"=>"AppleCoreMedia/1.0.0.17D2102 (Macintosh; U; Intel Mac OS X 10_13_3; de_de)", "platform"=>"Mac"}, {"userAgent"=>"AppleCoreMedia/1.0.0.15L5186e (Apple TV; U; CPU OS 11_3 like Mac OS X; fr_fr)", "platform"=>"Apple TV"}]}}, {:app=>"Apple Podcasts", :match=>{"startsWith"=>"itunesstored"}, :platform=>{"regex"=>"(iPad|iPod|iPhone)"}, :test=>{"userAgents"=>[{"userAgent"=>"itunesstored/1.0 iOS/10.1 model/iPhone9,3 hwp/t8010 build/14B72c (6; dt:139)", "platform"=>"iPhone"}, {"userAgent"=>"itunesstored/1.0 iOS/10.1.1 model/iPad3,4 hwp/s5l8955x build/14B100 (5; dt:83)", "platform"=>"iPad"}]}}, {:app=>"iTunes", :match=>{"startsWith"=>"iTunes", "excluding"=>{"regex"=>"Downcast|iCatcher|SqueezeCenter|SqueezeNetwork|MusicServer"}}, :platform=>{"regex"=>"\\((\\w+\\s*\\w*)", "replacements"=>[{"name"=>"Macintosh", "replaceWith"=>"Mac"}]}, :test=>{"userAgents"=>[{"userAgent"=>"iTunes/12.7.3 (Macintosh; OS X 10.13.4) AppleWebKit/605.1.33.1.2", "platform"=>"Mac"}, {"userAgent"=>"iTunes/12.7.3 (Windows; Microsoft Windows 10 Home Premium Edition (Build 10240)) AppleWebKit/7604.5002.1000.1", "platform"=>"Windows"}, {"userAgent"=>"iTunes (iCatcher!/2.7.4)", "negative"=>true}]}}, {:app=>"Apple Podcasts", :match=>{"includes"=>"watchOS", "excluding"=>{"regex"=>"^atc/|\\(null\\) watchOS/"}}, :platform=>{"text"=>"watchOS"}, :test=>{"userAgents"=>[{"userAgent"=>"watchOS/5.0 model/Watch2,3 hwp/t8002 build/16R364 (6; dt:133)", "platform"=>"watchOS"}]}}, {:app=>"Spotify", :match=>{"startsWith"=>"Spotify", "excluding"=>{"regex"=>"^Spotify/1\\.0$"}}, :platform=>{"regexes"=>["(Android|iOS)"]}, :test=>{"userAgents"=>[{"userAgent"=>"Spotify/8.7.18.1138 Android/28 (ANE-LX1)", "platform"=>"Android"}, {"userAgent"=>"Spotify/8.7.18.1138 Android/29 (MAR-LX1A)", "platform"=>"Android"}, {"userAgent"=>"Spotify/8.7.18.1138 Android/32 (Pixel 4a)", "platform"=>"Android"}, {"userAgent"=>"Spotify/8.7.16 iOS/15.1 (iPhone12,3)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.7.16 iOS/15.3.1 (iPhone12,1)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.7.18.1138 Android/29 (M2006C3LG)", "platform"=>"Android"}, {"userAgent"=>"Spotify/8.7.14 iOS/14.8 (iPhone13,1)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.6.62 iOS/14.7.1 (iPhone8,2)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.7.16.1354 Android/29 (MAR-LX1A)", "platform"=>"Android"}, {"userAgent"=>"Spotify/8.7.18 iOS/15.4.1 (iPhone13,4)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.7.18 iOS/15.4 (iPhone12,1)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.7.18 iOS/15.4 (iPhone11,8)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.7.18 iOS/15.2.1 (iPhone12,8)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.7.16.1354 Android/28 (ANE-LX1)", "platform"=>"Android"}, {"userAgent"=>"Spotify/8.7.18 iOS/13.6 (iPhone8,1)", "platform"=>"iOS"}, {"userAgent"=>"Spotify/8.7.18.1138 Android/30 (ONEPLUS A6003)", "platform"=>"Android"}]}}, {:app=>"CastBox", :match=>{"startsWith"=>["CastBox", "Castbox"]}, :platform=>{"regexes"=>["(Android|iOS|OS\\sVersion)", "(CastBox)"], "replacements"=>[{"name"=>"OS Version", "replaceWith"=>"iOS"}, {"name"=>"CastBox", "replaceWith"=>"Android"}]}, :test=>{"userAgents"=>[{"userAgent"=>"CastBox/7.11.3-180226133 (Linux;Android 4.1.2) ExoPlayerLib/2.4.0", "platform"=>"Android"}, {"userAgent"=>"Castbox/3.4.1 (fm.castbox.audiobook.radio.podcast; build:1; iOS 11.3.0) Alamofire/4.4.0", "platform"=>"iOS"}, {"userAgent"=>"CastBox/com.castbox.CastBox (1.0; OS Version 10.3.2 (Build 14F89))", "platform"=>"iOS"}]}}, {:app=>"Alexa", :match=>{"startsWith"=>"Alexa"}, :platform=>{"text"=>"Alexa-capable device"}, :test=>{"userAgents"=>[{"userAgent"=>"AlexaMediaPlayer/1.0.2353.0_16xxxxxx (Linux;Android 5.1.1) ExoPlayerLib/1.5.9", "platform"=>"Alexa-capable device"}, {"userAgent"=>"Alexa Mobile Voice/2.2.1615.0 (Linux;Android 7.0) ExoPlayerLib/2.2.0", "platform"=>"Alexa-capable device"}, {"userAgent"=>"AlexaService/1.20.1010746 (Linux;Android 8.0.0) ExoPlayerLib/2.4.3", "platform"=>"Alexa-capable device"}]}}, {:app=>"Alexa", :match=>{"startsWith"=>"Echo"}, :platform=>{"text"=>"Amazon Echo", "userAgents"=>[{"userAgent"=>"Echo/1.0(APNG)", "platform"=>"Amazon Echo"}]}}, {:app=>"Deezer", :match=>{"startsWith"=>"Deezer"}, :platform=>{"regexes"=>["(Android|Darwin)", "\\((\\w+\\s*\\w*)"], "replacements"=>[{"name"=>"osx", "replaceWith"=>"Mac"}, {"name"=>"Darwin", "replaceWith"=>"Apple Device"}]}, :test=>{"userAgents"=>[{"userAgent"=>"Deezer/5.4.22.54 (Android; 8.0.0; Mobile; de) samsung SM-G930F", "platform"=>"Android"}, {"userAgent"=>"Deezer/6.0.2.1 CFNetwork/808.3 Darwin/16.3.0", "platform"=>"Apple Device"}, {"userAgent"=>"DeezerJukebox/5.4.17.23 (Linux;Android 7.0) ExoPlayerLib/1.5.16", "platform"=>"Android"}, {"userAgent"=>"DeezerSDK/1.2.14 (Windows; 6.3.9600; Desktop; de) pc", "platform"=>"Windows"}, {"userAgent"=>"DeezerSDK/1.2.14 (osx; 10.12.3; Desktop; en) MacBookAir7_2", "platform"=>"Mac"}]}}, {:app=>"Overcast", :match=>{"startsWith"=>"Overcast", "excluding"=>{"regex"=>"^Overcast/1\\.0 Podcast Sync"}}, :platform=>{"text"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"Overcast/2.0 (+http://overcast.fm/; iOS podcast app)", "platform"=>"iOS"}, {"userAgent"=>"Overcast/3.0 (+http://overcast.fm/; iOS podcast app) BMID/E67A460F81", "platform"=>"iOS"}]}}, {:app=>"radio.net", :match=>{"startsWith"=>["radio.net", "radio.de", "radio.at", "radio.fr", "radio.dk", "radio.es", "radio.it", "radio.pt", "radio.pl"]}, :platform=>{"regex"=>"(Android|Darwin|Linux)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}, {"name"=>"Linux", "replaceWith"=>"Android"}]}, :test=>{"userAgents"=>[{"userAgent"=>"radio.de 4.9.3 (softwinner/QT-7; Android 4.4.2; de_DE)", "platform"=>"Android"}, {"userAgent"=>"radio.de/5.13.0. 1-app (Linux; 13) ExoPlayerLib/2.19.1", "platform"=>"Android"}, {"userAgent"=>"radio.de/3735 CFNetwork/758.5.3 Darwin/15.6.0", "platform"=>"iOS"}]}}, {:app=>"PocketCasts", :match=>{"startsWith"=>["PocketCasts", "Pocket Casts", "Shifty Jelly Pocket Casts"]}, :platform=>{"regex"=>"(Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"Pocket Casts", "platform"=>nil}, {"userAgent"=>"PocketCasts/1.0 (Pocket Casts Feed Parser; +http://pocketcasts.com/)", "platform"=>nil}, {"userAgent"=>"Shifty Jelly Pocket Casts, Android v4.5.1", "platform"=>"Android"}]}}, {:app=>"Himalaya", :match=>{"startsWith"=>"Himalaya"}, :platform=>{"regex"=>"(Darwin|Android)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}, :test=>{"userAgents"=>[{"userAgent"=>"Himalaya/1460 CFNetwork/974.2.1 Darwin/18.0.0", "platform"=>"iOS"}, {"userAgent"=>"Himalaya/2.2.2 Android/27 (COL-AL10)", "platform"=>"Android"}]}}, {:app=>"ExoPlayer", :match=>{"startsWith"=>["ExoPlayer", "yourApplicationName", "null", "md5d42223d6ee7473da82e8136ffb794439.App"]}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"ExoPlayer/3.15.12.5 (Linux;Android 5.0) ExoPlayerLib/1.5.0", "platform"=>"Android"}, {"userAgent"=>"yourApplicationName/2.9.10 (Linux;Android 8.0.0) ExoPlayerLib/2.8.1", "platform"=>"Android"}, {"userAgent"=>"null/4.100 (Linux;Android 7.0) ExoPlayerLib/2.8.3", "platform"=>"Android"}, {"userAgent"=>"md5d42223d6ee7473da82e8136ffb794439.App/4.100 (Linux;Android 8.0.0) ExoPlayerLib/2.8.3", "platform"=>"Android"}]}}, {:app=>"Download Manager", :match=>{"startsWith"=>"AndroidDownloadManager"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"AndroidDownloadManager/8.1.0 (Linux; U; Android 8.1.0; TA-1012 Build/OPR1.170623.026)", "platform"=>"Android"}]}}, {:app=>"Castamatic", :match=>{"startsWith"=>"Castamatic"}, :platform=>{"text"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"Castamatic/2639 CFNetwork/975.0.3 Darwin/18.2.0", "platform"=>"iOS"}, {"userAgent"=>"Castamatic/4.5.2 (com.gunpmedia.Castamatic; build:2609; iOS 12.0.0) Alamofire/4.7.3", "platform"=>"iOS"}]}}, {:app=>"The Podcast App (podcast.app)", :match=>{"includes"=>"The Podcast App"}, :platform=>{"text"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"podcast/577 iOS/Version 12.0.1 (Build 16A404) The Podcast App/2.19.1", "platform"=>"iOS"}]}}, {:app=>"CastMix", :match=>{"startsWith"=>"CastMix"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"CastMix/2.6.10 (Linux;Android 8.1.0) ExoPlayerLib/2.8.4", "platform"=>"Android"}]}}, {:app=>"Unknown App", :match=>{"startsWith"=>"okhttp"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"okhttp/3.9.0", "platform"=>"Android"}, {"userAgent"=>"okhttp/3.9.1 BMID/E67A45D491", "platform"=>"Android"}]}}, {:app=>"Stagefright Media Playback Engine", :match=>{"includes"=>"stagefright", "excluding"=>{"text"=>"stagefright alternative"}}, :platform=>{"regex"=>"(Fire OS|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"5050X-SVN/010 03; stagefright/1.2 (Linux;Android 4.3)", "platform"=>"Android"}, {"userAgent"=>"Fire OS/5.2.6.0 stagefright/1.2 (Linux;Android 5.1.1)", "platform"=>"Fire OS"}, {"userAgent"=>"HUAWEI P7 mini/C150B118 stagefright/1.2 (Linux;Android 4.3)", "platform"=>"Android"}, {"userAgent"=>"Samsung GT-I9100 stagefright/1.2 (Linux;Android 4.0.3)", "platform"=>"Android"}, {"userAgent"=>"SonyC1505 Build/11.3.A.2.23 stagefright/1.2 (Linux;Android 4.1.1)", "platform"=>"Android"}, {"userAgent"=>"TCL-6039Y-SVN/010 12; stagefright/1.2 (Linux;Android 5.0.2)", "platform"=>"Android"}, {"userAgent"=>"stagefright/1.2 (Linux;Android NexPlayer LG-E410i10g-EUR-XX)", "platform"=>"Android"}, {"userAgent"=>"LG-D331/V10f Player/LG Player 1.0 for Android 4.4.2 (stagefright alternative)", "negative"=>true}]}}, {:app=>"LG Player", :match=>{"startsWith"=>"Player/LG Player", "includes"=>["LG Player", "LG-Player"]}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"Player/LG Player 1.0 for Android(stagefright alternative)", "platform"=>"Android"}, {"userAgent"=>"Player/LG Player 1.0 for Android(stagefright alternative) (SKT-HLS; SKT-LG-p.0.1; LG-F240S)", "platform"=>"Android"}, {"userAgent"=>"P88020c-EUR/XXX; LG-Player/NexPlayer4.0 for Android(stagefright alternative)", "platform"=>"Android"}]}}, {:app=>"Android Browser", :match=>{"startsWith"=>"Dalvik"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"Dalvik/2.1.0 (Linux; U; Android 8.1.0; Pixel 2 XL Build/OPM1.171019.018)", "platform"=>"Android"}]}}, {:app=>"Acast", :match=>{"startsWith"=>"Acast"}, :platform=>{"regex"=>"(Darwin|Android|Windows)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}, :test=>{"userAgents"=>[{"userAgent"=>"Acast/1.29.0 (Linux;Android 7.0) ExoPlayerLib/2.5.4", "platform"=>"Android"}, {"userAgent"=>"Acast/3346 CFNetwork/758.4.3 Darwin/15.5.0", "platform"=>"iOS"}, {"userAgent"=>"Acast Windows", "platform"=>"Windows"}]}}, {:app=>"Castro", :match=>{"startsWith"=>"Castro"}, :platform=>{"text"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"Castro/98 CFNetwork/894 Darwin/17.4.0", "platform"=>"iOS"}, {"userAgent"=>"Castro 2 2.6.2/723 Like iTunes", "platform"=>"iOS"}]}}, {:app=>"Breaker", :match=>{"startsWith"=>"Breaker"}, :platform=>{"regex"=>"(Darwin|Android)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}, :test=>{"userAgents"=>[{"userAgent"=>"Breaker/671 CFNetwork/893.14.2 Darwin/17.3.0", "platform"=>"iOS"}, {"userAgent"=>"Breaker/671 (Linux;Android 1.2.3)", "platform"=>"Android"}]}}, {:app=>"Podcast Addict", :match=>{"startsWith"=>["PodcastAddict", "Podcast Addict"]}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"PodcastAddict/v2 - Dalvik/2.1.0 (Linux; U; Android 8.1.0; Z2 Plus Build/OPM1.171019.011)", "platform"=>"Android"}, {"userAgent"=>"Podcast Addict - Dalvik/2.1.0 (Linux; U; Android 6.0; K6000 Pro Build/MRA58K)", "platform"=>"Android"}]}}, {:app=>"Podbean", :match=>{"startsWith"=>"Podbean", "excluding"=>{"regex"=>"^Podbean Importer"}}, :platform=>{"regex"=>"(iOS|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"Podbean/Android App 5.8.0 (http://podbean.com),f87ecb5ac4d803301e79655314ebee5d", "platform"=>"Android"}, {"userAgent"=>"Podbean/iOS (http://podbean.com) 4.1.7 - c343a7bce038f51b71dbd907f06b0cdd", "platform"=>"iOS"}]}}, {:app=>"Google Podcasts", :match=>{"includes"=>["GSA"], "excluding"=>{"regex"=>"iPhone|iPad"}}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; Android 7.0; MI 5 Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 GSA/7.21.23.21.arm64", "platform"=>"Android"}]}}, {:app=>"Google Search App", :match=>{"includes"=>["GSA"], "excluding"=>{"regex"=>"Android"}}, :platform=>{"regexes"=>["(iPhone|iPad)"]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) GSA/42.0.183854831 Mobile/13G36 Safari/601.1", "platform"=>"iPhone"}]}}, {:app=>"Google Podcasts", :match=>{"includes"=>"GoogleChirp"}, :platform=>{"text"=>"Google Smart Speaker"}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 Android GoogleChirp", "platform"=>"Google Smart Speaker"}]}}, {:app=>"Stitcher", :match=>{"startsWith"=>"Stitcher"}, :platform=>{"regex"=>"(iOS|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"Stitcher/Android", "platform"=>"Android"}, {"userAgent"=>"Stitcher/iOS", "platform"=>"iOS"}]}}, {:app=>"TuneIn", :match=>{"startsWith"=>"TuneIn"}, :platform=>{"regex"=>"(Darwin|Android)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}, :test=>{"userAgents"=>[{"userAgent"=>"TuneIn%20Radio%20Pro/1044 CFNetwork/894 Darwin/17.4.0", "platform"=>"iOS"}, {"userAgent"=>"TuneIn%20Radio/1016 CFNetwork/811.5.4 Darwin/16.6.0", "platform"=>"iOS"}, {"userAgent"=>"TuneIn%20Radio/1011 (Linux;Android 123", "platform"=>"Android"}]}}, {:app=>"PodCruncher", :match=>{"startsWith"=>"PodCruncher"}, :platform=>{"text"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"PodCruncher/3.3.1 CFNetwork/811.5.4 Darwin/16.7.0", "platform"=>"iOS"}]}}, {:app=>"iCatcher!", :match=>{"startsWith"=>"iCatcher!", "includes"=>"iCatcher!"}, :platform=>{"regex"=>"\\((iPhone|iPad|iPod touch)", "fallback"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"iCatcher! Podcast Player/2.6.1", "platform"=>"iOS"}, {"userAgent"=>"iCatcher!/3.1 (iPhone; iOS 10.3.3; Scale/2.0)", "platform"=>"iPhone"}, {"userAgent"=>"iCatcher!/3.4 (iPod touch; iOS 9.3.5; Scale/2.0)", "platform"=>"iPod touch"}, {"userAgent"=>"iTunes (iCatcher!/2.7.4)", "platform"=>"iOS"}]}}, {:app=>"Castaway", :match=>{"startsWith"=>"Castaway"}, :platform=>{"text"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"Castaway/6 CFNetwork/894 Darwin/17.4.0", "platform"=>"iOS"}]}}, {:app=>"Instacast", :match=>{"startsWith"=>"Instacast"}, :platform=>{"text"=>"Apple Device"}, :test=>{"userAgents"=>[{"userAgent"=>"Instacast/2763 CFNetwork/897.15 Darwin/17.5.0", "platform"=>"Apple Device"}, {"userAgent"=>"Instacast/4.5.1 CFNetwork/894 Darwin/17.4.0", "platform"=>"Apple Device"}]}}, {:app=>"VLC", :match=>{"startsWith"=>["VLC", "LibVLC"], "includes"=>"VLC"}, :platform=>{"regex"=>"(Android|iPhone)"}, :test=>{"userAgents"=>[{"userAgent"=>"LibVLC/2.0.1 (Linux; U; Android 8.1.0;walleye/OPM1.171019.021)", "platform"=>"Android"}, {"userAgent"=>"Mozilla/5.0 (iPhone; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/10.0.2 Mobile/11A465 Safari/9537.53 VLC for iOS/3.0.2", "platform"=>"iPhone"}, {"userAgent"=>"VLC/2.2.0-git LibVLC/2.2.0-git (Radioline)", "platform"=>nil}]}}, {:app=>"Podcast Republic", :match=>{"startsWith"=>"PodcastRepublic"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"PodcastRepublic/18.0 (Linux; U; Android 8.0.0;HWVTR/HUAWEIVTR-L29)", "platform"=>"Android"}]}}, {:app=>"DoggCatcher", :match=>{"includes"=>"DoggCatcher"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; U; Windows NT 6.1; en-us; dream) DoggCatcher", "platform"=>"Android"}]}}, {:app=>"Player FM", :match=>{"startsWith"=>["Player FM", "Player%20FM"]}, :platform=>{"regex"=>"(Darwin)", "fallback"=>"Android", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}]}, :test=>{"userAgents"=>[{"userAgent"=>"Player FM BMID/E6807A587C", "platform"=>"Android"}, {"userAgent"=>"Player FM", "platform"=>"Android"}, {"userAgent"=>"Player%20FM/214 CFNetwork/975.0.3 Darwin/18.2.0", "platform"=>"iOS"}]}}, {:app=>"Podkicker", :match=>{"startsWith"=>"Podkicker"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"Podkicker Pro/2.3.3", "platform"=>"Android"}, {"userAgent"=>"Podkicker/1.2.10", "platform"=>"Android"}]}}, {:app=>"AntennaPod", :match=>{"startsWith"=>"AntennaPod"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"AntennaPod/", "platform"=>"Android"}, {"userAgent"=>"AntennaPod/1.4.2.2", "platform"=>"Android"}]}}, {:app=>"Downcast", :match=>{"startsWith"=>"Downcast", "includes"=>"Downcast"}, :platform=>{"regex"=>"\\((iPhone|iPad|iPod touch|Mac)"}, :test=>{"userAgents"=>[{"userAgent"=>"Downcast/2.9.30 (iPhone; iOS 11.2.6; Scale/3.00)", "platform"=>"iPhone"}, {"userAgent"=>"Downcast/2.9.30 (Mac OS X Version 10.13.3 (Build 17D102))", "platform"=>"Mac"}, {"userAgent"=>"iTunes/10.6 (Downcast v2.7.9 (Build 1004))", "platform"=>nil}]}}, {:app=>"gPodder", :match=>{"startsWith"=>"gPodder"}, :platform=>{"regex"=>"(Linux|Windows)"}, :test=>{"userAgents"=>[{"userAgent"=>"gPodder/3.9.0 (+http://gpodder.org/)", "platform"=>nil}, {"userAgent"=>"gPodder/3.9.1 (+http://gpodder.org/) Linux/4.14.16-gentoo", "platform"=>"Linux"}, {"userAgent"=>"gPodder/3.9.2 (+http://gpodder.org/) Windows/10", "platform"=>"Windows"}]}}, {:app=>"Podcatcher Deluxe", :match=>{"includes"=>"Podcatcher Deluxe"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"Podcatcher Deluxe/2016.06", "platform"=>"Android"}, {"userAgent"=>"Video Podcatcher Deluxe/2016.06", "platform"=>"Android"}]}}, {:app=>"Procast", :match=>{"startsWith"=>["Procast", "ProCast"]}, :platform=>{"text"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"Procast (iOS)", "platform"=>"iOS"}, {"userAgent"=>"ProCast/1 CFNetwork/897.15 Darwin/17.5.0", "platform"=>"iOS"}]}}, {:app=>"RSSRadio", :match=>{"startsWith"=>"RSSRadio"}, :platform=>{"regex"=>"(iPhone|iPad|iPod touch|Darwin)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"iOS"}], "fallback"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"RSSRadio/9186 (iPhone;iOS;11.2.6)", "platform"=>"iPhone"}, {"userAgent"=>"RSSRadio/9186", "platform"=>"iOS"}, {"userAgent"=>"RSSRadio7/9172 CFNetwork/889.9 Darwin/17.2.0", "platform"=>"iOS"}]}}, {:app=>"Podcat", :match=>{"startsWith"=>"Podcat", "excluding"=>{"regex"=>"Podcatcher"}}, :platform=>{"text"=>"iOS"}, :test=>{"userAgents"=>[{"userAgent"=>"Podcat%202/18084 CFNetwork/894 Darwin/17.4.0", "platform"=>"iOS"}, {"userAgent"=>"Podcatcher Deluxe/2016.06", "negative"=>true}]}}, {:app=>"Audio Now", :match=>{"startsWith"=>"AudioNow", "includes"=>"audionow"}, :platform=>{"regex"=>"(iOS|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"AudioNow/1.0.12 (de.dmhub.AudioNow; build:210789.411167595; iOS 10.3.3) Alamofire/4.8.2", "platform"=>"iOS"}, {"userAgent"=>"Android_de.dmhub.audionow_1.1.0", "platform"=>"Android"}]}}, {:app=>"DIE ZEIT App", :match=>{"includes"=>"ZONApp"}, :platform=>{"regex"=>"(iPhone|iPad|iPod touch|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; U; Android 4.4.2; de-de; HTC Desire 526G dual sim Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 ZONApp/Android/1.8.1 67206782-afbc-4e20-b7c0-1a234bc662ae", "platform"=>"Android"}, {"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A403 ZONApp/iOS/1.6 1136a267-238a-4e27-8ca4-365357db1292", "platform"=>"iPhone"}]}}, {:app=>"F.A.Z Der Tag App", :match=>{"includes"=>"FAZDERTAG"}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch)"]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; Android 8.1.0; INE-LX2 Build/HUAWEIINE-LX2; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36; FAZDERTAG FAZNETAPPS", "platform"=>"Android"}, {"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A456 FAZDERTAG FAZNETAPPS", "platform"=>"iPhone"}]}}, {:app=>"ANTENNE BAYERN App", :match=>{"includes"=>"AntenneBayern"}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch)"]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; Android 8.1.0; ONEPLUS A5000 Build/OPM1.171019.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36 AppName/AntenneRadioApps Station/AntenneBayern AppVersion/4.3.5", "platform"=>"Android"}, {"userAgent"=>"Mozilla/5.0 (iPad; CPU OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 AppName/AntenneRadioApps Station/AntenneBayern AppVersion/4.3.4 OS/iOS_10.3.3", "platform"=>"iPad"}]}}, {:app=>"BuzzFeed App", :match=>{"includes"=>"buzzfeed"}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch)"]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; Android 9; Pixel Build/PPR2.181005.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36 buzzfeed/543001 (progressiveloading)", "platform"=>"Android"}, {"userAgent"=>"Mozilla/5.0 (iPad; CPU OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16A366 QuantcastSDK/iOS_1.6.0/16m6ajz048305w9k-tkkr70msrzxq3eee buzzfeed/5520004 (progressiveloading)", "platform"=>"iPad"}]}}, {:app=>"Facebook in-app browser", :match=>{"includes"=>["FBAN", "FBAV"]}, :platform=>{"regexes"=>["\\((iPhone|iPad|iPod touch)", "(Android)"]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Mobile/15A372 [FBAN/MessengerForiOS;FBAV/153.0.0.47.97;FBBV/91923955;FBDV/iPhone9,3;FBMD/iPhone;FBSN/iOS;FBSV/11.0;FBSS/2;FBCR/OrangeFrance;FBID/phone;FBLC/fr_FR;FBOP/5;FBRV/0]", "platform"=>"iPhone"}, {"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_1 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Mobile/15A402 [FBAN/FBIOS;FBAV/160.0.0.34.96;FBBV/93101108;FBDV/iPhone7,2;FBMD/iPhone;FBSN/iOS;FBSV/11.0.1;FBSS/2;FBCR/E-Plus;FBID/phone;FBLC/de_DE;FBOP/5;FBRV/0]", "platform"=>"iPhone"}, {"userAgent"=>"Mozilla/5.0 (iPod touch; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D100 [FBAN/FBIOS;FBAV/160.0.0.34.96;FBBV/93101108;FBDV/iPod7,1;FBMD/iPod touch;FBSN/iOS;FBSV/11.2.6;FBSS/2;FBCR/;FBID/phone;FBLC/fr_FR;FBOP/5;FBRV/0]", "platform"=>"iPod touch"}, {"userAgent"=>"Mozilla/5.0 (Linux; Android 8.1.0; TA-1012 Build/OPR1.170623.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/161.0.0.35.93;]", "platform"=>"Android"}]}}, {:app=>"Instagram in-app browser", :match=>{"includes"=>"Instagram"}, :platform=>{"regexes"=>["(iPad)", "(iPhone|Android)"]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G36 Instagram 32.0.0.14.97 (iPad2,5; iPhone OS 9_3_5; de_AT; de-AT; scale=2.00; gamut=normal; 640x960)", "platform"=>"iPad"}, {"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G36 Instagram 34.0.0.10.95 (iPhone8,1; iPhone OS 9_3_5; de_AT; de-AT; scale=2.00; gamut=normal; 750x1334)", "platform"=>"iPhone"}, {"userAgent"=>"Mozilla/5.0 (Linux; U; Android 4.1.2; de-de; ST26i Build/11.2.A.0.31) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 Instagram 30.0.0.12.95 Android (16/4.1.2; 240dpi; 480x854; Sony; ST26i; ST26i; Sony; de_DE; 89867438)", "platform"=>"Android"}]}}, {:app=>"Twitter in-app browser", :match=>{"includes"=>"Twitter", "excluding"=>{"regex"=>"^TelegramBot "}}, :platform=>{"regex"=>"(iPhone|iPad|Darwin|Android)", "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"Apple device"}]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; Android 7.1.1; XT1650 Build/NPLS26.118-20-5-11; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36 TwitterAndroid", "platform"=>"Android"}, {"userAgent"=>"Mozilla/5.0 (iPad; CPU OS 11_2_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/15C202 Twitter for iPhone/7.18", "platform"=>"iPad"}, {"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C92 Twitter for iPhone", "platform"=>"iPhone"}, {"userAgent"=>"Twitter/7.18 CFNetwork/893.14.2 Darwin/17.3.0", "platform"=>"Apple device"}]}}, {:app=>"Pinterest in-app browser", :match=>{"includes"=>"Pinterest"}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch)"]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; Android 8.1.0; EML-L09 Build/HUAWEIEML-L09; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36 [Pinterest/Android]", "platform"=>"Android"}, {"userAgent"=>"Mozilla/5.0 (iPad; CPU OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 [Pinterest/iOS]", "platform"=>"iPad"}, {"userAgent"=>"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C92 [Pinterest/iOS]", "platform"=>"iPhone"}]}}, {:app=>"Windows Media Player", :match=>{"startsWith"=>["NSPlayer", "WMPlayer"]}, :platform=>{"text"=>"Windows"}, :test=>{"userAgents"=>[{"userAgent"=>"NSPlayer/12.00.9651.0000 WMFSDK/12.00.9651.0000", "platform"=>"Windows"}, {"userAgent"=>"NSPlayer/4.1.0.3856", "platform"=>"Windows"}, {"userAgent"=>"WMPlayer/10.0.0.364 guid/2F8D1CB4-0A5A-4FD7-986F-FFDBA14156C7", "platform"=>"Windows"}]}}, {:app=>"Sonos", :match=>{"includes"=>"Sonos"}, :platform=>{"text"=>"Sonos"}, :test=>{"userAgents"=>[{"userAgent"=>"Linux UPnP/1.0 Sonos/47.2-58300 (ZPS13)", "platform"=>"Sonos"}, {"userAgent"=>"Sonos", "platform"=>"Sonos"}]}}, {:app=>"Internet Explorer", :match=>{"includes"=>"Trident"}, :platform=>{"regex"=>"(Windows Phone)", "fallback"=>"Windows"}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/8.0; Touch; rv:11.0; WebBrowser/8.1; IEMobile/11.0; NOKIA; Lumia 930) like Gecko", "platform"=>"Windows Phone"}, {"userAgent"=>"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)", "platform"=>"Windows"}, {"userAgent"=>"Mozilla/5.0; TOB 6.12 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko", "platform"=>"Windows"}, {"userAgent"=>"Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; ASJB; rv:11.0) like Gecko", "platform"=>"Windows"}]}}, {:app=>"Kodi Media Center", :match=>{"startsWith"=>"Kodi", "includes"=>"Kodi"}, :platform=>{"regex"=>"(X11|Android|Windows)", "replacements"=>[{"name"=>"X11", "replaceWith"=>"Linux"}]}, :test=>{"userAgents"=>[{"userAgent"=>"Kodi/14.0 (X11; Linux armv6l) Raspbian GNU/Linux/7 HW_RaspberryPi/1.0 App_Bitness/32 Version/14.0-Git:2014-12-24-e044d5a-dirty", "platform"=>"Linux"}, {"userAgent"=>"Kodi/15.0 (Linux; Android 4.4.2; Gecko Build/KOT49H) Android/4.4.2 Sys_CPU/armv7l App_Bitness/32 Version/15.0-Git:Unknown", "platform"=>"Android"}, {"userAgent"=>"Kodi/16.1 (Windows NT 10.0; WOW64) App_Bitness/32 Version/16.1-Git:20160424-c327c53", "platform"=>"Windows"}]}}, {:app=>"HermesPod", :match=>{"startsWith"=>"+hermespod.com"}, :platform=>{"text"=>"Windows"}, :test=>{"userAgents"=>[{"userAgent"=>"+hermespod.com/v1.5.x", "platform"=>"Windows"}]}}, {:app=>"ViennaRSS", :match=>{"includes"=>"Vienna"}, :platform=>{"text"=>"Mac"}, :test=>{"userAgents"=>[{"userAgent"=>"(Macintosh; Intel Mac OS X 10_9_x) AppleWebKit/9537.78.2 (KHTML, like Gecko) Version/9.1.3 Safari/604.1.38 Vienna/3.2.1", "platform"=>"Mac"}]}}, {:app=>"Unknown client", :match=>{"startsWith"=>"(null)", "excluding"=>{"regex"=>"^atc/|\\(null\\) watchOS/"}}, :platform=>{"regex"=>"(iPhone|iPad|iPod touch)"}, :test=>{"userAgents"=>[{"userAgent"=>"(null) (iPhone; iPhone OS 9.0.2; de_DE)", "platform"=>"iPhone"}]}}, {:app=>"Clementine Music Player", :match=>{"startsWith"=>"Clementine"}, :platform=>{"text"=>"Unknown"}, :test=>{"userAgents"=>[{"userAgent"=>"Clementine 1.3.1 Clementine 1.3.1", "platform"=>"Unknown"}]}}, {:app=>"Flipboard", :match=>{"includes"=>"Flipboard", "excluding"=>{"regex"=>"FlipboardProxy/"}}, :platform=>{"regexes"=>["(Android)", "\\((iPhone|iPad|iPod touch|Macintosh)"], "replacements"=>[{"name"=>"Macintosh", "replaceWith"=>"Mac"}]}, :test=>{"userAgents"=>[{"userAgent"=>"Mozilla/5.0 (Linux; Android 9; ONEPLUS A6003 Build/PKQ1.180716.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36 Flipboard/4.2.2/4495,4.2.2.4495", "platform"=>"Android"}, {"userAgent"=>"Mozilla/5.0 (iPad; CPU OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Mobile/14E304 Flipboard/4.2.20", "platform"=>"iPad"}]}}, {:app=>"iVoox", :match=>{"startsWith"=>["ivoox", "iVoox"]}, :platform=>{"regexes"=>["(Android)", "(Darwin)\\/", "\\((iPhone|iPad|iPod touch|Macintosh)"], "replacements"=>[{"name"=>"Darwin", "replaceWith"=>"Apple device"}, {"name"=>"Macintosh", "replaceWith"=>"Mac"}]}, :test=>{"userAgents"=>[{"userAgent"=>"iVooxApp/3.23_29 (iPhone; iOS; iOS 12.1.4; ; B106)", "platform"=>"iPhone"}, {"userAgent"=>"iVooxApp/3.23_29 (iPad; iOS; iOS 12.2; ; 44CE)", "platform"=>"iPad"}, {"userAgent"=>"ivooxNew/1 CFNetwork/975.0.3 Darwin/18.2.0", "platform"=>"Apple device"}]}}, {:app=>"FYEO", :match=>{"startsWith"=>"FYEO"}, :platform=>{"regex"=>"(iOS|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"FYEO/0.9.0.2450-ce56a8c4/iOS_13.3.0/iPhone8,1", "platform"=>"iOS"}, {"userAgent"=>"FYEO/1.0.1.2907-861d96cd/iOS_13.4.0/iPhone12,1", "platform"=>"iOS"}, {"userAgent"=>"FYEO/0.9.0.2290-6393b910/Android_10/SM-G973F", "platform"=>"Android"}, {"userAgent"=>"FYEO/1.0.2_3024-f737eb44/Android_8.0.0/SM-G960U1", "platform"=>"Android"}, {"userAgent"=>"FYEO/1.0.2_3024-f737eb44/Android_10/Pixel 4", "platform"=>"Android"}, {"userAgent"=>"FYEO/1.0", "platform"=>nil}]}}, {:app=>"Amazon Music", :match=>{"startsWith"=>"AmazonMusic"}, :platform=>{"regex"=>"(iPhone|Android|MacOS|Fire OS|iPad)"}, :test=>{"userAgents"=>[{"userAgent"=>"AmazonMusic/9.15.2 iPhone11,2 CFNetwork/1128.0.1 Darwin/19.6.0", "platform"=>"iPhone"}, {"userAgent"=>"AmazonMusic/9.15.2 iPhone8,4 CFNetwork/1128.0.1 Darwin/19.6.0", "platform"=>"iPhone"}, {"userAgent"=>"AmazonMusic/iPad", "platform"=>"iPad"}, {"userAgent"=>"AmazonMusic/16.17.1 Dalvik/2.1.0 (Linux; U; Android 10; SM-G960F Build/QP1A.190711.020)", "platform"=>"Android"}, {"userAgent"=>"AmazonMusic/MacOS", "platform"=>"MacOS"}, {"userAgent"=>"AmazonMusic/Fire OS", "platform"=>"Fire OS"}]}}, {:app=>"Podimo", :match=>{"startsWith"=>"Podimo"}, :platform=>{"regex"=>"(iOS|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"Podimo/1.1 build 123/iOS 14.1", "platform"=>"iOS"}, {"userAgent"=>"Podimo/1.1 build 123/Android (Linux; U; Android 10; SM-G960F Build/QP1A.190711.020)", "platform"=>"Android"}]}}, {:app=>"ARD Audiothek", :match=>{"startsWith"=>"ARD Audiothek"}, :platform=>{"regex"=>"(iOS|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"ARD Audiothek Android-Auto 2.3.2 - Android Auto/2.3.2 (Linux;Android 11) ExoPlayerLib/2.14.1", "platform"=>"Android"}, {"userAgent"=>"ARD Audiothek Android Production 2.3.2/2.3.2 (Linux;Android 10) ExoPlayerLib/2.14.1", "platform"=>"Android"}, {"userAgent"=>"ARD Audiothek iOS Version 2.3.4, Build 41", "platform"=>"iOS"}]}}, {:app=>"Samsung Podcast", :match=>{"startsWith"=>"sp-agent"}, :platform=>{"text"=>"Android"}, :test=>{"userAgents"=>[{"userAgent"=>"sp-agent", "platform"=>"Android"}]}}, {:app=>"RTL+", :match=>{"startsWith"=>"RTL+"}, :platform=>{"regex"=>"(iOS|iPhone|Android)"}, :test=>{"userAgents"=>[{"userAgent"=>"RTL+/2.8.4.5-live-prod (Linux;Android 12) ExoPlayerLib/2.18.0", "platform"=>"Android"}, {"userAgent"=>"RTL+/1.0.0.18H107 (iPhone; U; CPU OS 14_8_1 like Mac OS X; de_de)", "platform"=>"iPhone"}]}}].freeze \ No newline at end of file