Last active
June 13, 2018 15:23
-
-
Save 599316527/8474f0765930dd34a5a9fb3d0506d6cf to your computer and use it in GitHub Desktop.
下载多玩地图图片块
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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`) | |
} | |
} | |
} | |
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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`) | |
} | |
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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