1. รับที่อยู่ของภาพในหน้าต้นฉบับ
-
ฟังก์ชัน PicStr(str)
ตั้ง objRegExp = Regexp ใหม่ 'ตั้งค่าวัตถุการกำหนดค่า
objRegExp.IgnoreCase = True 'ละเว้นตัวพิมพ์
objRegExp.Global = True 'ตั้งค่าสำหรับการค้นหาข้อความแบบเต็ม
objRegExp.Pattern = <IMG.+?> 'เพื่อให้แน่ใจว่าสามารถดึงที่อยู่ของรูปภาพได้อย่างถูกต้อง การกำหนดค่าจะถูกแบ่งออกเป็นสองระดับ: ขั้นแรกให้ค้นหาแท็ก <IMG> ภายใน จากนั้นดึงข้อมูลที่อยู่ของรูปภาพภายใน ฟังก์ชัน getimgs ที่อยู่เบื้องหลังมันคือการนำฟังก์ชันหลังไปใช้ Functional
strs=ตัดแต่ง(str)
Set Matches =objRegExp.Execute(strs) 'เริ่มดำเนินการกำหนดค่า
สำหรับการแข่งขันแต่ละครั้งในการแข่งขัน
PicStr = PicStr &getimgs( Match.Value ) 'ทำการจับคู่รอบที่สอง
ต่อไป
'รูปภาพทั้งหมดมีลักษณะเช่นนี้ src=http://picture address ดังนั้นคุณจึงสามารถได้รับที่อยู่รูปภาพที่แน่นอนเช่นนี้
ฟังก์ชั่นสิ้นสุด
ฟังก์ชั่น getimgs (str)
getimgs=
ตั้งค่า objRegExp1 = Regexp ใหม่
objRegExp1.IgnoreCase = จริง
objRegExp1.Global = จริง
objRegExp1.Pattern = http://.+? 'รับที่อยู่ด้านใน'
ตั้งค่า mm=objRegExp1.Execute(str)
สำหรับแต่ละไม้ขีด 1 มม
getimgs=getimgs&||&left(Match1.Value,len(Match1.Value)-1) 'รวมที่อยู่ภายในเข้าด้วยกันเพื่อใช้ในภายหลัง
ต่อไป
ฟังก์ชั่นสิ้นสุด
-
ประการที่สอง ดาวน์โหลดรูปภาพและบันทึกบนเซิร์ฟเวอร์
-
ฟังก์ชั่น getHTTPage(url)
เมื่อเกิดข้อผิดพลาดดำเนินการต่อต่อไป
http สลัว
ตั้งค่า http=server.createobject(MSXML2.XMLHTTP) 'ใช้วิธี xmlhttp เพื่อรับเนื้อหาของรูปภาพ
Http.open GET, url, false
Http.ส่ง()
ถ้า Http.readystate<>4 แล้ว
ฟังก์ชั่นทางออก
สิ้นสุดถ้า
getHTTPPage=Http.responseBody
ตั้งค่า http=nothing
ถ้า err.number<>0 แล้ว err.Clear
ฟังก์ชั่นสิ้นสุด
'ได้รับเนื้อหาของภาพแล้วและจำเป็นต้องบันทึก มันให้ความรู้สึกว่าสามารถทำได้ด้วย FSO แต่จริงๆ แล้วมันไม่ได้ผล ด้วยวิธีนี้ โปรแกรมบันทึกจะเกิดข้อผิดพลาดเนื่องจาก FSO ไม่รองรับการสตรีม ดังนั้นเราจึงต้องเรียกวัตถุอื่น: ADO.STREM กระบวนการเฉพาะมีดังนี้:
ฟังก์ชั่นบันทึกภาพ (จาก, tofile)
geturl สลัว, objStream, imgs
geturl=ตัดแต่ง(จาก)
imgs=gethttppage(geturl)'กระบวนการรับเนื้อหาเฉพาะของรูปภาพ
ตั้งค่า objStream = Server.CreateObject(ADODB.Stream)' หากต้องการสร้างวัตถุ ADODB.Stream ต้องใช้ ADO 2.5 ขึ้นไป
objStream.Type =1'เปิดในโหมดไบนารี
objStream.เปิด
objstream.write imgs' เขียนเนื้อหาสตริงลงในบัฟเฟอร์
objstream.SaveToFile server.mappath(tofile),2'-เขียนเนื้อหาที่บัฟเฟอร์ลงในไฟล์
objstream.Close()'ปิดวัตถุ
ตั้งค่า objstream=nothing
ฟังก์ชั่นสิ้นสุด
'ดังนั้นเพียงแค่ใช้การวนซ้ำเพื่อบันทึกรูปภาพทั้งหมดในที่อยู่ที่เพิ่งได้รับ กระบวนการเฉพาะมีดังนี้:
arrimg=split(PicStr(str),||) 'แยกสตริงและรับรายการที่อยู่ภายใน
ทั้งหมดimg=
นิวอิมม์=
สำหรับ i=1 ถึง ubound (arrimg)
ถ้า arrimg(i)<> และ instr(allimg,arrimg(i))<1 แล้ว 'ดูว่าภาพนี้ถูกดาวน์โหลดแล้วหรือไม่
fname=baseurl&cstr(i&mid(arrimg(i),instrrev(arrimg(i),.)))
saveimage(arrimg(i),fname)' เพื่อบันทึกที่อยู่ โปรดดูขั้นตอนข้างต้น
allimg=allimg&||&arrimg(i) 'สตริงกลับที่อยู่ของภาพที่บันทึกไว้เพื่อกำหนดที่อยู่ที่จะแทนที่
newimg=newimg&||&fname 'สตริงกลับที่อยู่ในเครื่อง
สิ้นสุดถ้า
ต่อไป
'ขั้นตอนที่สามคือการแทนที่ที่อยู่เดิม กระบวนการเฉพาะมีดังนี้:
arrnew=split(newimg,||) 'รับรายการที่อยู่รูปภาพต้นฉบับ
arrall=split(allimg,||) 'รับรายการที่อยู่ของรูปภาพที่บันทึกไว้
สำหรับ i=1 ถึง ubound(arrnew) 'ดำเนินการวนซ้ำเพื่อแทนที่ที่อยู่เดิม
strs=แทนที่(strs,arrall(i),arrnew(i))
ต่อไป
-