| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- // 监听拦截到的数据
- window.dataList = [
- ["昵称","发布时间","ID","时长","粉丝","关注","关注率","喜欢","喜欢率","热度","标题","链接"]
- ]
- function timestampToDateTime(timestamp) {
- // 将秒时间戳转换为毫秒(JavaScript Date 需要毫秒时间戳)
- const date = new Date(timestamp * 1000);
-
- const year = date.getFullYear();
- const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,所以要+1
- const day = String(date.getDate()).padStart(2, '0');
- const hours = String(date.getHours()).padStart(2, '0');
- const minutes = String(date.getMinutes()).padStart(2, '0');
- const seconds = String(date.getSeconds()).padStart(2, '0');
-
- return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
- }
- window.onInterceptedData = function (data) {
- window.systemInfo = data
- if (data.url.includes('https://douhot.douyin.com/douhot/v1/material/video_billboard')) {
- const dataTemp = JSON.parse(data.responseBody)
- console.log(dataTemp)
- dataTemp.data.objs.forEach(element => {
- window.dataList.push([element.nick_name, timestampToDateTime(element.publish_time), element.item_id, element.item_duration, element.fans_cnt, element.follow_cnt, element.follow_rate, element.like_cnt, element.like_rate, element.score, element.item_title, "https://www.douyin.com/jingxuan?modal_id=" + element.item_id])
- });
- loadData()
- }
- if (data.url.includes('data_trends/trends?option=9')) {
- console.log(data)
- const itemID = data.url.split('/')[6]
- if (data.responseBody) {
- const dataTemp = JSON.parse(data.responseBody)
- console.log(dataTemp)
- for (let index = 0; index < window.dataList.length; index++) {
- const element = window.dataList[index];
- if (window.dataList[index][2] == itemID) {
- window.dataList[0] = window.dataList[0].concat(dataTemp.data.map((e)=>{return e.date}))
- window.dataList[index] = window.dataList[index].concat(dataTemp.data.map((e)=>{return e.value}))
- }
- }
- }
-
-
- }
- };
- let owoLoadList = []
- function loadCSS (url) {
- if (owoLoadList.includes(url)) {
- return
- }
- owoLoadList.push(url)
- var link = document.createElement("link");
- link.rel = "stylesheet";
- link.type = "text/css";
- link.href = url;
- document.getElementsByTagName("head")[0].appendChild(link);
- }
- setTimeout(() => {
- var box = document.getElementsByClassName('puge-box')
- if (!box[0]) {
- var insertElement = document.createElement("div");
- insertElement.style.display = 'none'
- insertElement.classList.add('puge-box')
- insertElement.style.zIndex = '9665'
- insertElement.style.width = '300px'
- insertElement.style.height = '560px'
- insertElement.style.position = 'fixed'
- insertElement.style.right = '0'
- insertElement.style.top = '0'
- insertElement.style.fontSize = '18px'
- insertElement.style.lineHeight = '30px'
- insertElement.style.padding = '10px'
- insertElement.style.backgroundColor = 'white'
- document.body.appendChild(insertElement);
- if (window.pugeCreated) {
- window.pugeCreated(insertElement)
- window.pugeCreated = null
- }
- }
-
- }, 1000)
- var box = document.getElementsByClassName('puge-menu')
- if (!box[0]) {
- var insertElement = document.createElement("div");
- insertElement.classList.add('puge-menu')
- insertElement.innerHTML = `
- <div class="puge" style="position: fixed;
- width: 40px;
- height: 40px;
- right: 10px;
- bottom: 120px;
- z-index: 9666;
- color: white;" onclick="owostart()"><svg t="1619252746615" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="19612" width="40" height="40"><path d="M622.7968 89.7024l60.1088 124.1088c15.9744 36.0448 52.0192 60.1088 92.16 66.048l134.144 20.0704c100.1472 14.0288 138.1376 136.192 68.096 208.2816l-98.0992 94.1056c-28.0576 28.0576-42.0864 68.096-36.0448 106.0864l22.016 134.144c15.9744 100.1472-86.1184 174.1824-176.2304 128.2048l-120.1152-62.0544c-36.0448-18.0224-76.0832-18.0224-112.128 0L334.4384 972.8c-90.112 46.08-192.2048-28.0576-176.2304-128.2048l22.016-134.144c7.9872-40.0384-6.0416-80.0768-36.0448-106.0864L46.08 508.2112c-72.0896-72.0896-32.0512-192.2048 68.096-208.2816l134.144-20.0704c40.0384-6.0416 74.1376-30.0032 92.16-66.048l60.1088-124.1088c50.0736-90.112 176.2304-90.112 222.208 0" fill="#FED44A" p-id="19613"></path><path d="M404.5824 89.7024l-60.1088 124.1088c-15.9744 36.0448-52.0192 60.1088-92.16 66.048l-134.144 20.0704c-62.0544 10.0352-102.0928 60.1088-104.1408 112.128 18.0224-98.0992 220.2624-22.016 312.4224-14.0288 94.1056 10.0352 120.1152-74.1376 120.1152-74.1376s20.0704-100.1472 44.032-226.304c18.0224-102.0928 86.1184-58.0608 110.1824-40.0384C544.768-0.4096 444.6208 11.6736 404.5824 89.7024" fill="#FFDE73" p-id="19614"></path><path d="M574.7712 784.5888c-74.1376-50.0736-140.1856 0-140.1856 0S362.496 848.6912 278.4256 928.768c-86.1184 80.0768-118.1696-33.9968-118.1696-33.9968 18.0224 72.0896 102.0928 116.1216 174.1824 76.0832l122.1632-62.0544c36.0448-18.0224 76.0832-18.0224 112.128 0L690.8928 972.8c56.1152 30.0032 118.1696 11.9808 152.1664-32.0512 2.048-7.9872 3.9936-14.0288 7.9872-20.0704-67.9936 66.1504-200.192-86.016-276.2752-136.0896" fill="#FEC54A" p-id="19615"></path><path d="M466.6368 103.7312c15.9744 3.9936 26.0096 18.0224 22.016 36.0448l-28.0576 126.1568c-3.9936 15.9744-18.0224 26.0096-36.0448 22.016-15.9744-3.9936-26.0096-18.0224-22.016-36.0448l28.0576-128.2048c3.9936-15.9744 20.0704-23.9616 36.0448-19.968" fill="#FFF2CA" p-id="19616"></path><path d="M375.3984 530.8416c-29.2864 0-53.0432-18.7392-53.0432-41.984 0-23.1424 23.7568-41.984 53.0432-41.984s53.0432 18.7392 53.0432 41.984c0 23.1424-23.7568 41.984-53.0432 41.984z m260.9152 0c-29.2864 0-53.0432-18.7392-53.0432-41.984 0-23.1424 23.7568-41.984 53.0432-41.984s53.0432 18.7392 53.0432 41.984c0 23.1424-23.7568 41.984-53.0432 41.984z m-190.464 74.6496c-2.56-3.6864-3.3792-8.192-2.56-12.4928 0.9216-4.3008 3.584-8.0896 7.2704-10.4448 7.8848-5.12 18.432-3.072 23.8592 4.608 12.288 17.7152 26.2144 25.8048 43.1104 25.8048s30.8224-8.0896 43.1104-25.8048c5.4272-7.68 15.9744-9.728 23.8592-4.608 3.7888 2.3552 6.4512 6.144 7.2704 10.4448 0.9216 4.3008 0 8.9088-2.56 12.4928-18.3296 26.5216-42.7008 40.6528-71.7824 40.6528-28.8768-0.1024-53.248-14.1312-71.5776-40.6528z m0 0" fill="#92410E" p-id="19617"></path></svg></div>
- `
- document.body.appendChild(insertElement);
- }
- function clearData() {
- window.dataList = [
- ["昵称","发布时间","ID","时长","粉丝","关注","关注率","喜欢","喜欢率","热度","标题"]
- ]
- loadData()
- }
- function loadData() {
- if (window.yhqd) window.yhqd.innerText = `已获取数据数量:${window.dataList.length - 1}`
- }
- // 保存CSV
- function fake_click(obj) {
- var ev = document.createEvent("MouseEvents");
- ev.initMouseEvent(
- "click", true, false, window, 0, 0, 0, 0, 0
- , false, false, false, false, 0, null
- );
- obj.dispatchEvent(ev);
- }
- function download(name, data) {
- var urlObject = window.URL || window.webkitURL || window;
- var downloadData = new Blob([data]);
- var save_link = document.createElementNS("http://www.w3.org/1999/xhtml", "a")
- save_link.href = urlObject.createObjectURL(downloadData);
- save_link.download = name;
- fake_click(save_link);
- }
- function saveCSV (name, data) {
- let saveData = ''
- data.forEach(element => {
- if (element) {
- saveData += element.join(',')
- saveData += '\r\n'
- }
- });
-
- var urlObject = window.URL || window.webkitURL || window;
-
- var downloadData = new Blob(['\ufeff' + saveData], { type: 'text/csv,charset=UTF-8'});
- var save_link = document.createElementNS("http://www.w3.org/1999/xhtml", "a")
- save_link.href = urlObject.createObjectURL(downloadData);
- save_link.download = name;
- fake_click(save_link);
- }
- function saveData() {
- saveCSV ("output.csv", window.dataList)
- }
- function owostart () {
- const box = document.getElementsByClassName('puge-box')[0]
- // alert(box.style.display)
- if (box.style.display == 'none') {
- box.style.display = 'block'
- if (window.pugeCreated) {
- window.pugeCreated(document.getElementsByClassName('puge-box')[0])
- window.pugeCreated = null
- }
- } else {
- box.style.display = 'none'
- }
- loadData()
- window.loadingDialog = function () {
- return
- }
- }
- function logPanel (el, max) {
- if (el) {
- el.innerHTML = '<ul class="log-panel-w" style="height:300px;overflow: auto;"></ul>'
- setTimeout(() => {
- this.$el = el.querySelector('.log-panel-w')
- }, 0);
- }
- this.max = max || 100
- this.list = []
- this.add = function (text) {
- if (!text) text = ''
- var time = new Date();
- let hours = time.getHours()
- if (hours <= 9) hours = '0' + hours
- let minutes = time.getMinutes()
- if (minutes <= 9) minutes = '0' + minutes
- let seconds = time.getSeconds()
- if (seconds <= 9) seconds = '0' + seconds
- this.list.push([`${hours}:${minutes}:${seconds}`, text])
- if (this.list.length > this.max) {
- this.list = this.list.slice(1)
- }
- this.make()
- }
- this.make = function () {
- let newHtml = ''
- for (let index = this.list.length - 1; index >= 0; index--) {
- const element = this.list[index];
- newHtml += `<li><span>${element[0]}</span>${element[1]}</li>`
- }
- setTimeout(() => {
- this.$el.innerHTML = newHtml
- }, 0);
- }
- }
- function saveData2() {
- for (let index = 1; index < window.dataList.length; index++) {
- const element = window.dataList[index];
- setTimeout(() => {
- location.href='https://douhot.douyin.com/m/#/pages/video/detail/index?video_id=' + element[2]
- }, 5 * index * 1000);
- }
- setTimeout(() => {
- saveCSV ("output.csv", window.dataList)
- }, 5 * (window.dataList.length) * 10000);
- }
- setTimeout(() => {
- if (document.querySelector('.puge-box')) document.querySelector('.puge-box').innerHTML = `
- <h5 style="color:black;" id="yhqd">已获取数据数量:0</h5>
- <div class="owo button" onclick="clearData();" style=" background-color: #009fe9; text-align: center; line-height: 40px; margin-bottom:2px;">清理数据</div>
- <div class="owo button" onclick="saveData();" style=" background-color: #009fe9; text-align: center; line-height: 40px; margin-bottom:2px;">导出数据</div>
- <div class="owo button" onclick="saveData2();" style=" background-color: #009fe9; text-align: center; line-height: 40px; margin-bottom:2px;">获取小时数据</div>
- `
- }, 2000);
|