A Scala user-agent string parser based on ua-parser/uap-core. It extracts browser, OS and device information.
The code for this repository can be checked out normally. It uses a git submodule to include the files needed from uap-core so care must be taken to make sure the core
directory is properly checked out and initialized.
Checking out the repo for the first time
git clone --recursive https://github.com/ua-parser/uap-scala.git
If uap-scala was checked out and core was not properly initialized, the following can be done
cd core
git submodule update --init --recursive
To build for the default Scala (currently 2.11):
sbt package
To cross-build for different Scala versions:
sbt +package
Linking
You can link against this library in your program at the following coordinates:
Scala 2.10
groupId: org.uaparser
artifactId: uap-scala_2.10
version: 0.11.0
Scala 2.11
groupId: org.uaparser
artifactId: uap-scala_2.11
version: 0.11.0
Scala 2.12
groupId: org.uaparser
artifactId: uap-scala_2.12
version: 0.11.0
Scala 2.13
groupId: org.uaparser
artifactId: uap-scala_2.13
version: 0.11.0
import org.uaparser.scala.Parser
val ua = "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3"
val client = Parser.default.parse(ua) // you can also use CachingParser
println(client) // Client(UserAgent(Mobile Safari,Some(5),Some(1),None),OS(iOS,Some(5),Some(1),Some(1),None),Device(iPhone))
The time costs of parsing all the data may be high. To reduce the costs, we can just parse partial data.
import org.uaparser.scala.Parser
val raw = "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3"
val parser = Parser.default
val os = parser.osParser.parse(raw)
println(os) // OS(iOS,Some(5),Some(1),Some(1),None)
val userAgent = parser.userAgentParser.parse(raw)
println(userAgent) // UserAgent(Mobile Safari,Some(5),Some(1),None)
val device = parser.deviceParser.parse(raw)
println(device) // Device(iPhone,Some(Apple),Some(iPhone))
- Piotr Adamski (@mcveat) (Author. Based on the java implementation by Steve Jiang @sjiang and using agent data from BrowserScope)
- Ahmed Sobhi (@humanzz)
- Travis Brown (@travisbrown)
- Nguyen Hong Phuc (@phuc89)