Hi Everyone I\'m working with the next url and I have to get the key-values params from this url the url could be in the next formats:
http://www.espn.com/watch/?gameId=
You could do something like this... I'm assuming that _
denotes that the next 2 elements are a key/value pair... I also changed the code to handle multile values in a query param (ie: k=a&k=b
) which is perfectly valid.
def parseUrlStringToMap(URI uri) {
if (uri.query) {
uri.query.split('&')*.split("=").inject([:].withDefault { [] }) { m, v ->
m[v[0]] << v[1]
m
}.collectEntries { k, v -> v.size() == 1 ? [k, v[0]] : [k, v] }
} else {
// I'm going to assume that key/values come after '_' paths
def paths = uri.path.split('/')
paths[paths.findIndexValues { it == '_' }.collect { (it+1)..(it+2) }].collate(2).collectEntries()
}
}
println parseUrlStringToMap(URI.create('http://www.espn.com/watch/?gameId=1234&league=nfl&lang=es'))
println parseUrlStringToMap(URI.create('http://www.espn.com/fantasy/story/_/id/24664478/_/key/value/fantasy-soccer-la-liga-fantasy-transfer-market-matchweek-4'))
import java.nio.file.Paths
def u=new URL("http://www.espn.com/fantasy/story/id/24664478/fantasy-soccer-la-liga-fantasy-transfer-market-matchweek-4")
def p = Paths.get(u.getPath())
println p[2]
println p[3]
prints
id
24664478