Skip to content

Instantly share code, notes, and snippets.

@599316527
Last active June 13, 2018 15:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 599316527/8474f0765930dd34a5a9fb3d0506d6cf to your computer and use it in GitHub Desktop.
Save 599316527/8474f0765930dd34a5a9fb3d0506d6cf to your computer and use it in GitHub Desktop.
下载多玩地图图片块
var path = require('path')
var fs = require('fs')
// 先在浏览器中把地图移动到右下角,一点一点放大,保证每个 level 的最大坐标的图片被请求了
// 然后 network 中 copy all as curl 保存到 urls.txt 里
var maxs = fs.readFileSync(path.join(__dirname, 'urls.txt'), 'utf8').split('\n').map(function (url) {
url = url.trim()
let i = url.indexOf('\'') + 1
return url.substring(i, url.indexOf('\'', i))
}).filter(function (url) {
return /\/\d+\/\d+-\d+\.jpg$/.test(url)
}).reduce(function (ret, url) {
let {x, y, z} = getXYZ(url)
if (x === undefined) {
return ret;
}
if (!ret[z]) {
ret[z] = [0, 0]
}
if (x > ret[z][0]) {
ret[z][0] = x
}
if (y > ret[z][1]) {
ret[z][1] = y
}
return ret;
}, {})
function getXYZ(url) {
let matched = url.match(/\/(\d+)\/(\d+)-(\d+)\.jpg$/)
if (matched) {
return {
z: parseInt(matched[1], 10),
x: parseInt(matched[2], 10),
y: parseInt(matched[3], 10)
}
}
return {}
}
Object.keys(maxs).forEach(function (z) {
console.log(`mkdir ${z}`)
let [maxX, maxY] = maxs[z]
for (var x = 0; x < maxX; x++) {
for (var y = 0; y < maxY; y++) {
let filename = `${z}/${x + 1}-${y + 1}.jpg`
console.log(`curl 'http://img.dwstatic.com/tv/zhuanti/maps/Zelda-Botw/Halar/${filename}' -H 'Referer: http://tv.duowan.com/s/Zelda-Botw/map.html' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36' -H 'DNT: 1' --compressed > ${filename}`)
if (y % 7 == 0) {
console.log(`sleep 1`)
}
}
}
})
var path = require('path')
var fs = require('fs')
var content = fs.readFileSync(path.join(__dirname, 'data/places.json'), 'utf8')
content = content.replace(/\\\n/g, '')
var data = JSON.parse(content)
data.data.map(function (item) {
let {metadata} = item
return metadata.vid
}).filter(a => a).forEach(function (vid, index) {
console.log(`curl 'http://video.duowan.com/jsapi/getVideoInfo?callback=cb&vids%5B%5D=${vid}&_=${Date.now()}' -H 'Referer: http://tv.duowan.com/s/Zelda-Botw/map.html' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36' -H 'DNT: 1' --compressed >> output.txt`)
console.log('echo >> output.txt')
console.log(`curl 'http://video.duowan.com/jsapi/gcvs?callback=cb&vids%5B%5D=${vid}&_=${Date.now()}' -H 'Referer: http://tv.duowan.com/s/Zelda-Botw/map.html' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36' -H 'DNT: 1' --compressed >> output.txt`)
console.log('echo >> output.txt')
if (index % 7 == 0) {
console.log(`sleep 1`)
}
})
var path = require('path')
var fs = require('fs')
var content = fs.readFileSync(path.join(__dirname, 'output.txt'), 'utf8')
var lines = content.split('\n')
var result = {}
for (var i = 0; i < lines.length; i+=2) {
let line = lines[i].trim()
if (!line) {
continue
}
let crypedSrc = lines[i+1].trim()
data = line.substring(3, line.length - 1)
crypedSrc = crypedSrc.substring(3, crypedSrc.length - 1)
try {
data = JSON.parse(data)
} catch (err) {
console.log(data)
console.log(err)
break
}
let videoSrcUrl = decr(crypedSrc)
videoSrcUrl = videoSrcUrl.substring(1, videoSrcUrl.length - 3)
videoSrcUrl = JSON.parse(videoSrcUrl)
let key = Object.keys(data)[0]
let value = data[key]
value.video_src = videoSrcUrl[key]
result[key] = value
}
console.log(JSON.stringify(result, null, 4))
function decr(e) {
var t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@!~*-_.()'".split("");
var o = [];
var n = [];
e.split("").reverse().forEach(function(e, a) {
var i = t.indexOf(e);
if (parseInt((a + 1) % 2) == 1) {
n.push(i)
} else {
var r = parseInt(i - n[(a + 1) / 2 - 1]);
o.push(t[r])
}
});
var a = o.join("").replace(/@/g, "%");
return decodeURIComponent(a)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment