巧用JS复制网页内容
最近公司想整理下业务,看看有什么漏掉的订单。万网,息壤的业务比较多。万网的可以导出csv,而息壤就悲剧了。好几百页,只能一条一条的复制,郁闷。受QQ云输入法的影响,将JS保存到收藏夹,点击链接执行JS,加载外部JS创建表单,通过DOM获取内容,提交到本地的数据库。剩下的就好处理了。
1、新建收藏夹项目,路径填写:
javascript:(function(){$tmp=document.createElement("script");$tmp.src='http://192.168.99.29/_app/xirang.js';document.getElementsByTagName("head")[0].appendChild($tmp);})();
2、本地架设好服务器,xirang.js内容如下:
(function(){
$tmp=document.createElement("div");
$tmp.innerHTML=' <form action="http://192.168.99.29/_app/xirang.asp" style="display:none" method="post" id="__tmp_form"><textarea name="txtdb"></textarea></form>';
document.getElementsByTagName("body")[0].appendChild($tmp);}
)();
hostlist = (function(){
_t=document.getElementsByTagName("table");
for(i=0;i<_t.length;i++){
if(_t[i].getAttribute("className") == "listtable"){
return _t[i];
}
}
return "";
})();
if(typeof(hostlist) == "object"){
__tmp_frm = document.getElementById("__tmp_form");
__tmp_frm.txtdb.value = hostlist.innerHTML;
__tmp_frm.submit();
}else{
if(confirm("没有找到数据,点确定返回第一页")){
location.href = "http://www.xrnet.cn/store/member.php?module=mysite&start_item=0&search=&sort_order=expiry_date&sort_order_desc=1";
};
};
3、现在点击收藏夹中的项目,主机列表的内容(HTML代码)就到了一个表单中,并提交到了:http://192.168.99.29/_app/xirang.asp。
4、建立一个xirang.asp,保存内容。
set conn = server.createobject("ADODB.Connection")
conn.open "provider=microsoft.jet.oledb.4.0;data source=" & server.mappath("xirang.mdb")
set rs = server.createobject("ADODB.Recordset")
frmstr = request.servervariables("HTTP_REFERER")
if frmstr = "" then
rs.open "select txt from txtdb",conn,1,1
do while not rs.eof
response.write rs(0)
response.flush()
rs.movenext
loop
else
tmpstr = "<table width=""100%"" border=""1"">" & request.form("txtdb") & "</table>"
stanum = split(mid(frmstr,instr(frmstr,"start_item")+11),"&")(0)
if isnumeric(stanum) then stanum = cLng(stanum) else stanum = 0
nxtnum = stanum + 20
rs.open "select * from txtdb",conn,3,2
rs.addnew
rs("txt") = tmpstr
rs("pag") = stanum
rs.update
rs.close
set rs = nothing
set conn = nothing
response.redirect "http://www.xrnet.cn/store/member.php?module=mysite&start_item=" & nxtnum & "&search=&sort_order=expiry_date&sort_order_desc=1"
end if
5、不停的点击收藏夹的,直到最后一页。
6、直接用浏览器打开,http://192.168.99.29/_app/xirang.asp,就导出了列表的数据。 另存为网页,改后缀名为.xls,用excel打开,另存为excel格式。用access/mssql导入,有脚本处理就可以了。这些不在本文的讨论范围,不提供代码。
这种方法,可以保存任何内容。本人现在对外接单,如果有网站程序开发/重构的需求,欢迎和我联系。QQ:77068320
PHP分页(页码)函数
09年的时候写过一个ASP输出分页页面的函数,分享两个ASP分页(页码)函数(http://www.miaoqiyuan.cn/p/asp-yema-fenye)。在开发中,省了不少力气,今天在些一个php的分页(页码)函数,供以后工作用。和ASP版本的参数,函数名都一样。
<?php
/*
#函数:csPage
#功能:返回页面列表
*/
Function csPage($iPage,$aPage,$urlStart,$urlEnd){
$tmp = "";
if($iPage == 1 && $aPage == 1){
$tmp = "<strong> 1/1 </strong>";
}else{
if($iPage == 1){
$tmp = "<span> |< </span><span> << </span>";
}else{
$tmp = '<a title="首页" href="' . $UrlStart . 1 . $urlEnd . '"> |< </a><a title="上一页" href="' . $UrlStart . ($iPage-1) . $urlEnd . '"> << </a>';
}
$tmp .= "<strong> " . $iPage . "/" . $aPage . " </strong>";
if($iPage == $aPage){
$tmp .= '<span> >> </span><span> >| </span>';
}else{
$tmp .= '<a title="下一页" href="' . $urlStart . ($iPage+1) . $urlEnd .' "> >> </a><a title="尾页" href="' . $urlStart . $aPage . $urlEnd . '"> >| </a>';
}
}
return $tmp;
}
?>
用FileDB快速开发生成静态系统
最近要用到一套ASP生成静态的小系统,虽然说程序简单,但是写起来还是比较繁琐的,正好前几天写过一个:ASP文件存储方案(http://www.miaoqiyuan.cn/p/asp-filedb),用改类,可以直接快速开发生成ASP的系统。
'加载模板 '对于模板,不了解的,可以参考我以前写过的文章,当然也可以用任何asp的模板系统 set p = new MYW3_TPL p.LoadTpl "tpl/chengyu.html" p.assign "Title","猫七" p.assign "WebHome",WebHome p.assign "WebSkin",WebSkin '/index.html url = "index" '/home/index.html 'url = "home::index" '/home/1/2/333.html 'url = "home::1::2::333" '生成静态 ‘使用FileDB类,超级简单 set f = new FileDB f.DBPath = "/" f.idxKey = url f.save(p.outHtml)
需要对FileDB的类做一下小的修改
Private Function getPath()
Dim tmp
getPath = replace(idxKey,"::","/") & ".html"
End Function
ASP文本存储方案-FileDB
四月份做个一个短信系统,当时为了节省成本(使用万网的空间,不带SQL数据库空间便宜),使用了ASP+Access开发,最近需要升级,增加一个短信接口。发现现在Access的数据库竟然有170MB。我的天啊,因为查询比较少,不是很耗资源,所以没有检查出来。
仅仅六个月,数据库竟然到了170MB。随着客户业务的增长,可能再过六个月就要到500MB了,真恐怖。主要占空间大小的,就是存储的短信的发送号码,思考再三,决定将所有的保存到文本文件中。于是写下了一个暂时成为FileDB的asp类。
Class FileDB
Dim fso,IdxKey,DBPath
Private Sub Class_Initialize
Set fso = Server.CreateObject("Scripting.FileSystemObject")
idxKey = "demo::test"
DBPath = "DataCenter/File_DB/"
End Sub
Private Function getPath()
Dim tmp
getPath = replace(idxKey,"::","/") & ".html"
End Function
Private Function checkFile(byref fname)
fname = Server.Mappath(DBPath & getPath())
checkFile = fso.fileexists(fname)
End Function
Private Sub createPathName(byval idxKey)
Dim TmpPa
TmpPa = Server.Mappath(DBPath & idxKey)
if not fso.folderexists(TmpPa) then
if instr(idxKey,"\") > 0 then Call createPathName(left(idxKey,instrrev(idxKey,"\")-1))
fso.createfolder(TmpPa)
end if
End Sub
Public Function getTxt()
if checkFile(fname) then
set Txt = fso.getfile(fname)
if Txt.size = 0 then
Tmp = ""
else
Tmp = fso.opentextfile(fname).readall
end if
set Txt = Nothing
getTxt = Tmp
else
getTxt = ""
end if
End Function
Public Function remove()
if checkFile(fname) then
fso.deletefile fname
end if
End Function
Public Function Save(byval content)
if checkFile(fname) then
set fpo = fso.opentextfile(fname,2)
else
idxKey = replace(idxKey,"::","\")
if instr(idxKey,"\")>0 then Call createPathName(left(idxKey,instrrev(idxKey,"\")-1))
set fpo = fso.createtextfile(fname)
end if
fpo.write content
fpo.close
set fpo = nothing
End Function
End Class
因为时间比较紧,而且代码比较简单,就不加注释了,实际就是简化了文本文件的操作方法。
<% Server.ScriptTimeOut=10000 %>
<%
'数据库链接代码
set fdb = new FileDB
fdb.DBPath = "../DataCenter/sms_DB/"
conn.open constr
set rs = server.createobject("ADODB.Recordset")
'得到所有没有转换的数据
rs.open "select * from sendlog where send_mob not like '%::%'",conn,3,2
do while not rs.eof
'FileDB 数据存放路径,日期::MD5(ID)
idxStr = split(Rs("send_date")," ")(0) & "::" & md5(Rs("send_id"))
fdb.IdxKey = idxStr
fdb.Save(Rs("send_mob"))
Rs("send_mob") = idxStr
rs.update
rs.movenext
loop
rs.close
conn.close
'数据库压缩过程,不是重点,再次不再多述
compactdata(DataPath)
%>
减肥成功,所有数据转存到FileDB中。
执行一下,所有数据就转存好了,读取的时候很简单,指定了 idxStr,用getTxt()即可得到内容。
set fdb = new FileDB
fdb.DBPath = "../DataCenter/sms_DB/"
'../DataCenter/sms_DB/aaa/1111.txt
fdb.idxKey = "aaa::1111"
str1 = fdb.getTxt()
'../DataCenter/sms_DB/bbb/ccc/ddd/eee.txt
fdb.idxKey = "bbb:ccc::ddd:eee"
str2 = fdb.getTxt()
'删除 ../DataCenter/sms_DB/bbb/ccc/ddd/eee.txt
fdb.remove()
'因为文件不存在,得到的值就是空字符串
str3 = fdb.getTxt()
'将内容保存到../DataCenter/sms_DB/bbb/ccc/ddd/eee.txt,因为不存在则创建,如果存在,则修改。
fdb.save("11111")
2010年10月24日更新小Bug,修复了idxKey 定于数据存放在根目录,就会报错的错误
ASP版本 文件转十六进制
最近接了一个彩信接口的网站,需要将 文本文件、图片文件 转换成 HexString,通过Form提交,.net、php、javascript的函数网上一抓一大把,asp的却不好找,今天我就来写一个asp版本的hexstring转换函数,为了方便以后用,直接写成类。
class bin2txt
dim adostream
private sub class_initialize
set adostream = server.createobject("ADODB.Stream")
adostream.type = 1
adostream.mode = 3
end sub
public sub open(fn)
adostream.open
adostream.LoadFromFile fn
end sub
public function getHex(t)
dim tmp,hexstr,binstr
binstr = adostream.read()
for i = 1 to lenB(binstr)
tmp = hex(ascB(midB(binstr,i,1)))
if len(tmp) = 1 then tmp = "0" & tmp
hexstr = hexstr & tmp & t
next
getHex = hexstr
end function
public function getOct(t)
dim tmp,octstr,binstr
binstr = adostream.read()
for i = 1 to lenB(binstr)
tmp = (ascB(midB(binstr,i,1)))
if len(tmp) = 2 then tmp = "0" & tmp
if len(tmp) = 1 then tmp = "00" & tmp
octstr = octstr & tmp & t
next
getOct = octstr
end function
end class
使用方法,很简单,代码如下:
set f = new bin2txt
f.open server.mappath("sms/1.jpg")
response.write f.getHex()
彩信添加桢也添加玩函数
'addpage
'pid:帧编号
'showtime:帧展示时间
function addpage(pid,showtime,ttype,tfile,ptype,pfile,mtype,mfile)
addpage = "&d" & pid & "=" & showtime
if ttype <> "" and ptype <> "" then
f.open server.mappath(tfile)
addpage = addpage & "&tt" & pid & "=" & ttype &_
"&tv" & pid & "=" & f.getHex()
end if
if ptype <> "" and ptype <> "" then
f.open server.mappath(ptype)
addpage = addpage & "&pt" & pid & "=" & ptype &_
"&pv" & pid & "=" & f.getHex()
end if
if mtype <> "" and mtype <> "" then
f.open server.mappath(mtype)
addpage = addpage & "&mt" & pid & "=" & mtype &_
"&mv" & pid & "=" & f.getHex()
end if
end function
set f = new bin2txt
f.open server.mappath("sms/title.txt")
sendstr = "id=***&pwd=***&subject=" & f.getHex()
sendstr = sendstr & addpage(1,5,"txt","sms/1.txt","jpg","sms/1.jpg","","")
sendstr = sendstr & addpage(2,5,"txt","sms/2.txt","jpg","sms/2.jpg","","")
response.write openApi("http://118.144.76.79:8080/mmsServer/sendMms",sendstr)



