ページ 1 では、Msxml2.ServerXMLHTTP を使用して Web コンテンツをキャプチャし、ページ 2 では、ADODB.Stream を使用して、キャプチャしたコンテンツをファイルに書き込みます。ASP を理解している人は、ASP が解釈して実行するスクリプト言語であることを知っているはずです。スクリプト プログラムの実行効率は非常に低いことが多く、サイトへのアクセス数が比較的多い場合、サーバーは大量のリソースを消費するため、サイトのアクセス速度が急激に低下します。実行効率を向上させるプログラム、もう 1 つの方法は、Web サイト内の頻繁にアクセスされるページの静的 HTML ファイルを定期的に生成することです。これにより、アクセス速度の問題を非常に効果的に解決できます。もちろん、サーバーの速度がそれほど遅くないことが前提です。それ以外の場合は、何の効果もありません。Msxml2.ServerXMLHTTP コンポーネントを使用して生成したい静的 Web ページを取得し、fso または ado を使用してファイルを書き込む方法を紹介します。この記事の例ではすべて utf -8 エンコーディングが使用されていることに注意してください。gb2312 に変更する場合は、対応する属性を変更する必要があります。まず次の関数を与えます。
<!--'関連する質問については、 http://www.downcodes.comを参照してください。
Function GetURL(URL)
'ダウンロードメイン関数
const 時間間隔=60
'時間間隔を設定
'ダウンロード時間が非常に遅い場合は、120 秒と書き込みます
'応答.LCID=2052
const lResolve=6
'解決ドメイン名のタイムアウト、秒
const lConnect=6
'接続サイトのタイムアウト、秒
const lSend=6
'データ送信リクエストのタイムアウト、秒
const lReceive=40
'ダウンロードデータのタイムアウト、秒
エラー時は再開します 次へ
薄暗い http
Set http = Server.CreateObject("Msxml2.ServerXMLHTTP")
http.setTimeouts l解決*1000、l接続*1000、l送信*1000、l受信*1000
http.Open "GET",URL,False
http.送信
ケース http.readyState を選択してください
ケース0
GetURL="オブジェクトの初期化に失敗しました"
エラークリア
http=何も設定しない
終了関数
ケース1
GetURL="ドメイン名解析タイムアウト/接続サイトタイムアウト"
エラークリア
http=何も設定しない
終了関数
ケース2
GetURL="データ要求がタイムアウトしました。サーバーに障害がありますか?"
エラークリア
http=何も設定しない
終了関数
ケース3
GetURL="データダウンロードタイムアウト/フィードバック待機タイムアウト"
エラークリア
http=何も設定しない
終了関数
ケース4
'ダウンロードに成功しました
エンドセレクト
http.status<>200 の場合
GetURL="ダウンロードに失敗しました"&Err.description
エラークリア
http=何も設定しない
終了関数
終了 IF
http.status="200" の場合、
GetURL=http.ResponseText
'GetURL=保存ファイル()
終了の場合
http=何も設定しない
終了機能
-->
主な機能は、アドレス パラメータの Web ページ ファイルの内容を取得することです。ローカルのテスト アドレスの場合は、メソッド varia=GetURL(" http://www.downcodes.com ") を使用します。 http://localhost/default.aspとしてこの機能を使用します。Response.LCID=2052 属性は Windows Server 2000 ではサポートされていませんが、大きな問題ではなく、通常どおり使用できます。コメントアウトされています。必要に応じてカスタマイズできるタイムアウト属性もいくつかありますが、設定時間が短すぎないように注意してください。そうしないと、ファイルが大きい場合やアドレスのアクセス速度が遅い場合、クロールが失敗する可能性があります。この関数を使用して、生成する Web ページ ファイルのコンテンツをクロールし、コンテンツを変数に保存し、ファイルに書き込まれるのを待ちます。
このクラスは以下に示されており、関数によってキャプチャされたコンテンツを対応するファイルに書き込むために使用されます。これで、生成したい Web ページを直接生成できます。これは非常に便利で、変更する必要はありません。オリジナル ファイル!
Class Htmlmaker
'関連する質問についてはhttp://www.downcodes.comを参照してください。
'/************************
'/プロパティ設定手順
'/foldename "フォルダー名"
'/ 設定されていない場合は、[年、月、日] の時刻形式のフォルダー名が自動的に生成されます
'/ Filename "ファイル名" (接尾辞と拡張子を含む)
'/ 設定されていない場合、[時、分、秒] の時刻形式のファイル名が自動的に生成され、サフィックス .html
'/ Htmlstr "生成されたコードの内容"
'/************************
プライベート HtmlFolder,HtmlFilename,HtmlContent
パブリック プロパティ letfoldename(str)
HtmlFolder=str
End プロパティ
Public プロパティ let Filename(str)
HTMLファイル名=str
End プロパティ
パブリック プロパティ let Htmlstr(str)
HtmlContent=str
終了プロパティ
'/************************
'/ファイル名変換日付関数
'/************************
プライベート関数 Datename1(timestr)
薄暗いs_年、s_月、s_日
s_year=年(timestr)
len(s_year)=2 の場合、s_year="20"&s_year
s_month=month(timestr)
s_month<10 の場合、s_month="0"&s_month
s_day=day(timestr)
s_day<10 の場合、s_day="0"&s_day
Datename1=s_year & s_month & s_day
終了関数
プライベート関数 Datename2(timestr)
薄暗い s_hour、s_分、s_ss
s_hour=時間(timestr)
s_hour<10 の場合、s_hour="0"&s_hour
s_分=分(timestr)
s_分<10の場合、s_分="0"&s_分
s_ss=秒(timestr)
s_ss<10 の場合、s_ss="0"&s_ss
日付名2 = s_hour & s_分 & s_ss
終了関数
'/*************************
'/初期化
'/************************
プライベートサブ class_initialize()
HtmlFolder=日付名1(現在)
HtmlFilename=日付名2(現在)&".html"
HTMLC
End Sub
Private Sub class_terminate()
エンドサブ
'/************************
'/HTMLファイルの生成
'/**********************
Public Sub Htmlmake()
'エラー時は次へ再開
dim ファイルパス、fso、fout
ファイルパス = HtmlFolder&"/"&HtmlFilename
Set fso = Server.CreateObject("Scripting.FileSystemObject")
fso.FolderExists(Server.MapPath(HtmlFolder)) の場合
それ以外
fso.CreateFolder(Server.MapPath(HtmlFolder))
終了の場合
' fout = fso.CreateTextFile(Server.MapPath(ファイルパス),true) を設定します
' fout.WriteLine HtmlContent
'fout.close
dim objFSO、adTypeText、adSaveCreateOverWrite、Charsett、objAdoStream
文字セット = "utf-8"
set objAdoStream = Server.CreateObject("ADODB.Stream")
adTypeText = 2
adSaveCreateOverWrite = 2
objAdoStream.Type = adTypeText
objAdoStream.Open
objAdoStream.Charset = 文字セット
objAdoStream.WriteText(HtmlContent)
objAdoStream.SaveToFile Server.MapPath(ファイルパス),2
objAdoStream.Close
End Sub
'/***********************
'/HTMLファイルの削除
'/************************
パブリックサブHTMLdel()
dim ファイルパス、fso
ファイルパス = HtmlFolder&"/"&HtmlFilename
Set fso = CreateObject("Scripting.FileSystemObject")
if fso.FileExists(Server.MapPath(filepath))
fso.DeleteFile(Server.mappath(ファイルパス))
終了する場合
fso = 何も設定しない
End Sub
エンドクラス
皆さんがよりよく学べるように、具体的な例を挙げてみましょう。Web
サイトのアドレスhttp://www.downcodes.com/から
、そのホームページ (default.asp) から静的 HTML ファイルを生成したいと考えています
。ファイル: makeindex.asp
<!--#include file="function_class.asp"-->
を作成します。
<%
dim インデックスhtmlstr
Indexhtmlstr=GetURL(" http://www.downcodes.com/default.asp ")
dim インデックスファイル名
インデックスファイル名 = "インデックス.htm"
薄暗いアクション統計
len(indexhtmlstr) <200 の場合
Acti&indexfilename&「「&indexhtmlstr&」エラーが発生しました」
それ以外
薄暗いmyhtml
set myhtml= 新しい HTMLmaker
myhtml.foldename = "../.."
myhtml.ファイル名 = インデックスファイル名
myhtml.HTMLdel
myhtml.Htmlstr =indexhtmlstr
myhtml.HTMLmake
myhtml=何も設定しない
アクティ&インデックスファイル名&"ファイル"
終了する場合
応答.書き込みアクション統計
%>
ファイル function_class.asp の内容には、主に上記の関数とファイルを生成するクラスが含まれています。
makeindex.asp を実行して htm ファイルを生成します。