Teach you how to climb Yuanqi desktop wallpapers and videos

Development language: nodejs, which is essential for my big front-end

Let’s look at the results first:

What climbed down this time is the mobile video wallpaper, a total of 848 videos

———————————-The official start is below———- ———————–

1. Use fiddler to capture packets and check the interface address.

The interface address is: https://pcwallpaper.zhhainiao.com/v20903/wplive/list

The parameters are

{“login_info”:{},”resolution_support”:0,”wtype_support”:1,”encrypt_support”:”none_encrypt”,”page”:1,”page_size”:24,”cate_id”:2,”tag_id”: null,”sort_type”:2,”common”:{“open_id”:”T562a73fbd3f8ccccf669fd000508da”,”token”:”PdAOr3dfdfdfdsdf6MlC7FP5l2hZTrdTcLKsQpd”,”device_id”:”b3e88773dsdfsdfsdf sdfaac1e61be6d”,”player_version”:115,”platform”:”pc” }}

2. Click on the picture of Yuanqi desktop to view the details, capture the packet and find the details interface

Catch the detailed interface: https://pcwallpaper.zhhainiao.com/mobile/wallpaper/live/detail

The parameters are:

{“login_info”:{},”wid”:368129,”common”:{“open_id”:”T562a73fbdfsdrfd000508da”,”token”:”PdAOsdfsdD6MlC7FP5l2hZTrdTcLKsQpd”,”device_id”:”b3e88773d5d 32sdfsdfac1e61be6d”, “player_version”:115,”platform”:”pc”}}

After analysis, the main parameter change is the wid parameter obtained from the list

3. Write code to recursively obtain all wids in the list.

let getList = async opt => {

$.post("https://pcwallpaper.zhhainiao.com/v20903/wplive/list", {
"login_info": {},
"resolution_support": 0,
"wtype_support": 1,
"encrypt_support": "none_encrypt",
"page": opt.page,
"page_size": 24,
"cate_id": null,
"tag_id": 109,
"sort_type": 2,
"common": {
"open_id": "T562a73fbd3fssd000508da replace it with your own",
"token": "PdAOr3XqiugtdFP5l2hZT replace it with your own d",
"device_id": "b3e88773d5d3226d5 is replaced with your own e6d",
"player_version": 115,
"platform": "pc"
}
}).then(async res => {
if (res.data.data & amp; & amp; res.data.data.list.length > 0) {
for (let item of res.data.data.list) {
let mobile_video = await getMobile({
wid: item.wid
})
if (mobile_video) {
saveVideo({msg:mobile_video + "\r\
"})
}

}
console.log("page" + opt.page + "page")
getList({
page: opt.page + 1
})
} else {
console.log(videos.length)
console.log("It's over")
}
})

}

4. After getting the list data, start requesting the detailed interface

let getMobile = async opt => {

let p = Q.defer();
$.post("https://pcwallpaper.zhhainiao.com/mobile/wallpaper/live/detail", {
"login_info": {},
"wid": opt.wid,
"common": {
"open_id": "T562a73fbd3f8747e62f669fd000508da",
"token": "PdAOr3XqiugtksuYD6MlC7FP5l2hZTrdTcLKsQpd",
"device_id": "b3e88773d5d3226d5656eaac1e61be6d",
"player_version": 115,
"platform": "pc"
}
}).then(res => {
if (res.data & amp; & amp; res.data.data) {

p.resolve(res.data.data.mobile_preview_video)
} else {
p.resolve("")
}

})
return p.promise
}

5. Finally, download the video to local

let saveVideo = async opt=>{
/* learnNode.js */
\t 
\t
\t 
fs.appendFile('D:\work\test\video.txt',opt.msg,(err)=>{
\t 
if(err){
\t 
console.log('Error')
\t 
}else{
\t 
console.log('Append content')
\t 
}
\t 
})
}

// getList({
// page: 1
// })

// $.post("https://pcwallpaper.zhhainiao.com/mobile/wallpaper/live/detail", {"login_info":{},"wid":359624,"common":{"open_id":" T562a73fbd3f8747e62f669fd000508da","token":"PdAOr3XqiugtksuYD6MlC7FP5l2hZTrdTcLKsQpd","device_id":"b3e88773d5d3226d5656eaac1e61be6d","player_version": 115,"platform":"pc"}}).then(res => {
// console.log(res.data.data.mobile_video)
// })
let idx = 0;
let downVideo=async opt=>{
let p = Q.defer();
$({
url:opt.url,
responseType: 'stream'
}).then(
(resp) => {
idx++
const writer = fs.createWriteStream("D:\work\test\videos" + idx + ".mp4")
resp.data.pipe(writer)
writer.on('finish', () => {
console.log("Complete",idx)
p.resolve(1)
})
writer.on('error', (e) => {
\t\t\t\t
p.resolve("")
})
}
)
\t
return p.promise
}

Finally, some video links are invalid and need to be dealt with. Below is the complete code, some of which are commented, because the functions used in each step are different and require some basic knowledge to modify.

let $ = require("axios")
const {
async
} = require("q");
var Q = require('q');
let fs = require('fs');
let videos = []

let getList = async opt => {

$.post("https://pcwallpaper.zhhainiao.com/v20903/wplive/list", {
"login_info": {},
"resolution_support": 0,
"wtype_support": 1,
"encrypt_support": "none_encrypt",
"page": opt.page,
"page_size": 24,
"cate_id": null,
"tag_id": 109,
"sort_type": 2,
"common": {
"open_id": "T562a73fbd3f8747e62f669fd000508da",
"token": "PdAOr3XqiugtksuYD6MlC7FP5l2hZTrdTcLKsQpd",
"device_id": "b3e88773d5d3226d5656eaac1e61be6d",
"player_version": 115,
"platform": "pc"
}
}).then(async res => {
if (res.data.data & amp; & amp; res.data.data.list.length > 0) {
for (let item of res.data.data.list) {
let mobile_video = await getMobile({
wid: item.wid
})
if (mobile_video) {
saveVideo({msg:mobile_video + "\r\
"})
}

}
console.log("page" + opt.page + "page")
getList({
page: opt.page + 1
})
} else {
console.log(videos.length)
console.log("It's over")
}
})

}


let getMobile = async opt => {

let p = Q.defer();
$.post("https://pcwallpaper.zhhainiao.com/mobile/wallpaper/live/detail", {
"login_info": {},
"wid": opt.wid,
"common": {
"open_id": "T562a73fbd3f8747e62f669fd000508da",
"token": "PdAOr3XqiugtksuYD6MlC7FP5l2hZTrdTcLKsQpd",
"device_id": "b3e88773d5d3226d5656eaac1e61be6d",
"player_version": 115,
"platform": "pc"
}
}).then(res => {
if (res.data & amp; & amp; res.data.data) {

p.resolve(res.data.data.mobile_preview_video)
} else {
p.resolve("")
}

})
return p.promise
}

let saveVideo = async opt=>{
/* learnNode.js */
\t 
\t
\t 
fs.appendFile('D:\work\test\video.txt',opt.msg,(err)=>{
\t 
if(err){
\t 
console.log('Error')
\t 
}else{
\t 
console.log('Append content')
\t 
}
\t 
})
}

 getList({
 page: 1
 })

// $.post("https://pcwallpaper.zhhainiao.com/mobile/wallpaper/live/detail", {"login_info":{},"wid":359624,"common":{"open_id":" T562a73fbd3f8747e62f669fd000508da","token":"PdAOr3XqiugtksuYD6MlC7FP5l2hZTrdTcLKsQpd","device_id":"b3e88773d5d3226d5656eaac1e61be6d","player_version": 115,"platform":"pc"}}).then(res => {
// console.log(res.data.data.mobile_video)
// })
let idx = 0;
let downVideo=async opt=>{
let p = Q.defer();
$({
url:opt.url,
responseType: 'stream'
}).then(
(resp) => {
idx++
const writer = fs.createWriteStream("D:\work\test\videos" + idx + ".mp4")
resp.data.pipe(writer)
writer.on('finish', () => {
console.log("Complete",idx)
p.resolve(1)
})
writer.on('error', (e) => {
\t\t\t\t
p.resolve("")
})
}
)
\t
return p.promise
}

let readText = async opt=>{
let txt = fs.readFileSync("D:\work\test\video.txt","utf-8")
let arr = txt.split("\r\
")
console.log(arr)
for(let item of arr){
await downVideo({url:item})
console.log(arr.length)
}
}
//readText()