Greasy Fork is available in English.

FindSrcPic_lib(uumt测试版)

批量找图代码库,以优优美图网站做执行测试

// ==UserScript==
// @name        FindSrcPic_lib(uumt测试版)
// @namespace   https://greasyfork.org/users/14059
// @author      setycyas
// @homepage    http://blog.sina.com.cn/u/1365265583
// @description 批量找图代码库,以优优美图网站做执行测试
// @include     http://www.uumt.cc/*
// @version     1.00
// @grant       GM_registerMenuCommand
// @grant       GM_xmlhttpRequest
// @require     http://code.jquery.com/jquery-2.1.1.min.js
// @run-at      document-end
// @license     MIT
// ==/UserScript==

/****************************************
############ FindSrcPic_lib ################
批量找图代码库
主函数是FindSrcPic
给出例如uumt之类的图片站的图集首地址(形如http://*.html)
自动获取整个图集的所有图片地址并存放于_FindSrcPic_Result中
每次更新_FindSrcPic_Result都会刷新显示结果的文本框的文本
查找结束前,也可以通过立即显示结果菜单先看看找到的图片地址
如果有些请求没返回,会一直处于查找状态,只能刷新页面恢复
未查找状态了,这是目前的一个不足.但是只要参数正确一般没问题
****************************************/

var _FindSrcPic_Result="";//存放找到的图片地址
var _FindSrcPic_ResponNum=0;//已返回或超时的响应数目
var _FindSrcPic_IsRunning=0;//是否运行中,0表示非运行中

//添加显示结果的显隐div
AddMaskDiv("_FindSrcPic_ResultDiv","<br/><b>找到的图片地址:</b><br/><br/><textarea id=_FindSrcPic_ResultTextArea></textarea><br/>");
$('#_FindSrcPic_ResultTextArea').css({'width':'70%','height':'70%'});

function FindSrcPic(startURL,picSrcReg,picNum){
  
  //查看startURL是否合法
  if(!startURL.match(/^http:.*html$/)){
    alert("FindSrcPic需要输入格式化的地址才能正确运行!");
    return;
  }
  
  //查看是否查找中
  if(_FindSrcPic_IsRunning>0){
    alert("上次寻找仍进行中,请不要急于重新查找,可尝试先看看已找到的结果");
    return;
  }
  
  //开始查找前初始化记录变量
  _FindSrcPic_Result="";
  _FindSrcPic_ResponNum=0;
  _FindSrcPic_IsRunning=1;
  $('#_FindSrcPic_ResultTextArea').val(_FindSrcPic_Result);
  
  //开始遍历发送消息,获取图片链接.遍历地址的形式如需改变就改这里
  console.log("开始批量发送请求");
  for(var i=1;i<picNum+1;i++){
    
    var picURL;
    if(i==1){
      picURL=startURL;
    }else{
      picURL=startURL.substr(0,startURL.length-5)+"_"+i+".html";
    }
    
    
    $.get(    
     picURL,
     {},     
     function(data) {
      _FindSrcPic_ResponNum++;
       
    var temp2=data.match(picSrcReg);
      if(temp2){       
       _FindSrcPic_Result+=temp2[1]+"\n";
       $('#_FindSrcPic_ResultTextArea').val(_FindSrcPic_Result);
       console.log("返回一个成功的请求,找到图片: "+temp2[1]);
      }else{
       console.log("返回一个成功的请求,但找不到图片");
      }
      console.log("目前已返回请求数/总请求数 ="+_FindSrcPic_ResponNum+"/"+picNum);
       
      if(_FindSrcPic_ResponNum==picNum){
       $('#_FindSrcPic_ResultDiv').css({display:'block'});
       _FindSrcPic_IsRunning=0;
      }
     }
    );
    console.log("已发送请求: "+picURL);
  }
  
}

//从bodyHTML中,通过picNumReg正则表达式找到图片总数,返回-1表示找不到
function _GetPicNum(bodyHTML,picNumReg){
  
  var temp;
  if(temp=bodyHTML.match(picNumReg)){
    return temp[1]-0;
  }else{
    return -1;
  }
  
}

/****************************************
############ MaskDiv_lib ################
显示覆盖原页面的上层div的库
主函数是AddMaskDiv,添加目标div
除了目标div外,内部html的css,绑定函数等需自行
另外处理
****************************************/

//添加一个隐藏的层,maskDivId为该层的div的Id,maskDivInnerHTML为内部html
//至于css则需要在外部添加.函数只管maskDiv的css,以及额外赠送的一个重新隐藏该层的按钮
//最后注册一个GM菜单用于显示该层
function AddMaskDiv(maskDivId,maskDivInnerHTML){
  
  var htmlAppend='<div id=' + maskDivId +">"+maskDivInnerHTML+"<br/>&nbsp;&nbsp;<input type=button id="+maskDivId+"_return value=Return></input><br /></div>";
  $('body').append(htmlAppend);
  $('#'+maskDivId).css({'position':'fixed','left':'10%','top':'10%','width':'70%','height':'70%','background-color':'#ffffff','z-index':'10001','display':'none','text-align':'center','border':'1px solid #00F'});
  $('#'+maskDivId+'_return').click(function(){$('#'+maskDivId).css({display:'none'});});
  GM_registerMenuCommand('显示'+maskDivId,function(){$('#'+maskDivId).css({display:'block'});});
 
}

/****************************************
以下是本库在uumt的实现与测试,复制库时不需要复制下面内容
****************************************/

//注册菜单
GM_registerMenuCommand('uumt找图',uumt_FindPic);

console.log("setycyas的批量找图代码库,uumt批量找图测试脚本成功加载!");

function uumt_FindPic(){
  
  //在当前页查找图集的图片总数,修改查找图片总数的方法就改这里的正则表达式
  var uumt_PicNum=_GetPicNum(document.getElementsByTagName("body")[0].innerHTML,/<ul><li><a>共(\d+)图:/);
  if(uumt_PicNum<0){
    alert("在本页找不到图片总数信息");
    return;
  }
  
  //用当前页地址格式化图集查找的首页地址
  var startURL=window.location.href;
  if(startURL.substr(startURL.length-1,1)=="#"){
    startURL=startURL.substr(0,dir.length-1);
  }
  if(startURL.substr(startURL.length-1,1)=="/"){
    startURL+="index.html";
  }
  console.log("经过格式化,图集首页地址是: "+startURL);
  
  //开始查找,修改从网页中提取图片地址的方法,就改这里的正则表达式
  FindSrcPic(startURL,/<div class="articleBody">\s{0,1}<p align="center">.*<img[^>]*src="([^>]*jpg)"/,uumt_PicNum);
  
}