您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
search user braodcast, result show in console
当前为
// ==UserScript== // @name search user broadcast for douban // @namespace harryhare.github.io // @version 0.1 // @description search user braodcast, result show in console // @author harryhare // @license GPL 3.0 // @match https://www.douban.com/people/*/statuses** // @grant GM_getValue // @grant GM_setValue // ==/UserScript== const gm_key="douban_user_status"; const interval=1000; var stop_signal=false; var search_text; var search_page; var max_page; var user_name; var old_data; var cached_status; var cached_ids_set; var latest_cached_id=""; var latest_cached_time=""; var result_container; var status_container; var search_button; var stop_button; var page=1; var statuses=[]; function getContent(response){ var target_string=search_text.value; var parser=new window.DOMParser(); var xmlDoc=parser.parseFromString(response,"text/html"); //xmlDoc.getElementsByTagName('textarea')[0].innerHTML; var statuse_nodes=xmlDoc.querySelectorAll("div.stream-items div.new-status.status-wrapper"); //console.log(statuses); for (var i=0;i<statuse_nodes.length;i++){ var status= statuse_nodes[i]; var content=status.querySelector("div.status-item div.mod div.bd"); var create_time=status.querySelector("div.status-item div.mod div.bd div.actions span.created_at"); var status_id=status.getAttribute('data-sid'); console.log("new status id: ",status_id); if(cached_ids_set.has(status_id)){ //search in cached data for(let data of cached_status){ var cached_status=parser.parseFromString(data,"text/html").body.firstChild; var text=status.innerHTML; if(content.search(target_string)!=-1){ result_container.append(status); } } //merge console.log("new statuses: "); console.log(statuses); console.log("cached status: "); console.log(cached_status); statuses.push(...cached_status) console.log("merged status: "); console.log(statuses); return true; } //change time until now to post time if(create_time){ var create_time_a=create_time.querySelector("a"); if(create_time_a){ create_time_a.innerHTML=create_time.getAttribute('title'); statuses.push(status.outerHTML); } } var text=status.innerHTML; if(text.search(target_string)!=-1){ result_container.append(status); } } return statuse_nodes.length<20; } function visit(){ var xhr=new XMLHttpRequest(); var url="/people/"+user_name+"/statuses?p="+page; console.log('visit',url); status_container.innerHTML="正在搜索第"+page+"页..."; xhr.open("GET",url,true); xhr.onreadystatechange = function (){ if(xhr.readyState != 4 || xhr.status != 200 ){ return; } console.log("recv:",url); //console.warn(xhr.responseText); let reach_end=getContent(xhr.responseText); if(page<max_page && reach_end==false && stop_signal==false){ page++; var interval_id = window.setInterval(()=>{ window.clearInterval(interval_id); visit(); },interval); }else{ finish(); } }; xhr.send(); } var mode="" function finish(){ //save old_data[user_name]=statuses; GM_setValue(gm_key,old_data); //show finish console.log("done"); search_button.disabled=false; stop_button.disabled=true; status_container.innerHTML="搜索完成"; } function on_search(){ console.log("do search"); console.log("search text: ",search_text.value); console.log("max page: ",search_page.value); console.log("target user name: ",user_name); old_data=GM_getValue(gm_key); console.log(old_data); if(!old_data){ old_data=new Map(); } //find the lastest status id in old_data cached_status=[]; cached_ids_set=new Set(); if(old_data[user_name] && old_data[user_name].length>0){ cached_status=old_data[user_name]; var parser=new window.DOMParser(); //var node=parser.parseFromString(old_data[user_name][0],"text/html").body.firstChild; //latest_cached_id=node.getAttribute('data-sid'); //var create_time_node=node.querySelector("div.status-item div.mod div.bd div.actions span.created_at"); //latest_cached_time=node.getAttribute('title'); //console.log("last cached status id: ",latest_cached_id); for(let data of cached_status){ var node=parser.parseFromString(data,"text/html").body.firstChild; var id=node.getAttribute('data-sid'); cached_ids_set.add(id); } } //limit cache pages max_page=parseInt(search_page.value); if(!max_page||max_page<=1){ max_page=10; } //disable search button and show progress result_container.innerHTML=""; search_button.disabled=true; stop_button.disabled=false; stop_signal=false; //start visit page=1; statuses=[]; visit(); } function on_clean(){ console.log("clean cache data"); GM_setValue(gm_key,{}); } function on_stop(){ stop_signal=true; } function test(){ console.log(search_text.value); console.log(search_page.value); console.log(user_name); } (function() { 'use strict'; var reg=/https?:\/\/www.douban.com\/people\/([^\/]+)\/statuses.*/g; var result=reg.exec(window.location); if(!result || result.length!=2){ console.warn("error url"); return; } user_name=result[1]; var p_node=document.querySelector("body div#wrapper div#content div.clearfix div.aside"); var container=document.createElement('div'); container.style='display: -webkit-flex; display: flex; flex-direction: column;'; p_node.append(container); var title=document.createElement('div'); title.innerHTML="搜索友邻广播"; container.append(title); //inputs var search_container=document.createElement('div'); search_container.style='display: -webkit-flex; display: flex; flex-direction: row;'; container.append(search_container); var text1=document.createElement('div'); text1.innerHTML="关键字:"; search_container.append(text1); search_text=document.createElement('input'); search_container.append(search_text); var page_container=document.createElement('div'); page_container.style='display: -webkit-flex; display: flex; flex-direction: row;'; container.append(page_container); var text2=document.createElement('div'); text2.innerHTML="最大页数:"; page_container.append(text2); search_page=document.createElement('input'); page_container.append(search_page); search_page.value='10'; //buttons var button_container=document.createElement('div'); button_container.style='display: -webkit-flex; display: flex; flex-direction: row;'; container.append(button_container); search_button=document.createElement('button'); search_button.innerHTML="search"; search_button.onclick=on_search; search_button.id="search"; button_container.append(search_button); stop_button=document.createElement('button'); stop_button.innerHTML="stop searching"; stop_button.onclick=on_stop; stop_button.id="stop"; stop_button.disabled=true; button_container.append(stop_button); var clean_button=document.createElement('button'); clean_button.innerHTML="clean cache"; clean_button.onclick=on_clean; clean_button.id="clean"; button_container.append(clean_button); //var test_button=document.createElement('button'); //test_button.innerHTML="test"; //test_button.onclick=test; //test_button.id="test"; //button_container.append(test_button); //results status_container=document.createElement('div'); container.append(status_container); result_container=document.createElement('div'); container.append(result_container); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址