この機能は、収集時またはオンライン記事の追加時に使用できます。 この機能は、収集時またはオンライン記事の追加時に使用できます。
リモート画像をローカルエリアに保存するために Baidu で検索したコードは少し使いにくいようで、既成の完全なコードがなく、理解できません。
比較的シンプルで使いやすいSNA取材システムFor 3.62(作成者:ansir)から一部の機能を抜粋して使用しました。
以下は機能です
プログラムコード
次のようにコードをコピーします。
<%
'================================================ = =
'関数名:CheckDir2
'機能: フォルダーが存在するかどうかを確認します
'パラメータ: FolderPath ------フォルダアドレス
'================================================ = =
関数 CheckDir2(byval FolderPath)
薄暗いfso
フォルダーパス=サーバー.マップパス(.)&/&フォルダーパス
fso = Server.CreateObject(Scripting.FileSystemObject) を設定します。
fso.FolderExists(FolderPath) の場合
'存在する
CheckDir2 = True
それ以外
「存在しない」
CheckDir2 = 偽
次の場合に終了
fso = 何も設定しない
終了機能
'================================================ = =
'関数名: MakeNewsDir2
'機能: 新しいフォルダーを作成します
'パラメータ: フォルダ名 ------フォルダ名
'================================================ = =
関数 MakeNewsDir2(byval フォルダー名)
薄暗いfso
fso = Server.CreateObject(Scripting.FileSystemObject) を設定します。
fso.CreateFolder(Server.MapPath(.) &/ &フォルダー名)
fso.FolderExists(Server.MapPath(.) &/ &foldername) の場合
MakeNewsDir2 = True
それ以外
MakeNewsDir2 = False
終了の場合
fso = 何も設定しない
終了機能
'================================================ = =
'関数名: DefiniteUrl
'機能: 相対アドレスを絶対アドレスに変換
'パラメータ: PrimitiveUrl ------ 変換する相対アドレス
'パラメータ: ConsultUrl ------現在の Web ページのアドレス
'================================================ = =
関数 DefiniteUrl(Byval PrimitiveUrl,Byval ConsultUrl)
Dim ConTemp、PriTemp、Pi、Ci、PriArray、ConArray
PrimitiveUrl= または ConsultUrl= または PrimitiveUrl=$False$ の場合
DefiniteUrl=$False$
終了関数
終了の場合
Left(ConsultUrl,7)<>HTTP:// および Left(ConsultUrl,7)<>http:// の場合
ConsultUrl= http:// & ConsultUrl
終了の場合
ConsultUrl=Replace(ConsultUrl,://,://)
正しい場合(ConsultUrl,1)<>/ 次に
Instr(ConsultUrl,/)>0 の場合
Instr(Right(ConsultUrl,Len(ConsultUrl)-InstrRev(ConsultUrl,/)),.)>0 の場合
それ以外
ConsultUrl=ConsultUrl & /
終了の場合
それ以外
ConsultUrl=ConsultUrl & /
終了の場合
終了の場合
ConArray=Split(ConsultUrl,/)
Left(PrimitiveUrl,7) = http:// の場合、
DefiniteUrl=Replace(PrimitiveUrl,://,://)
ElseIf Left(PrimitiveUrl,1) = / 次に
DefiniteUrl=ConArray(0) & PrimitiveUrl
ElseIf Left(PrimitiveUrl,2)=./ then
DefiniteUrl=ConArray(0) & Right(PrimitiveUrl,Len(PrimitiveUrl)-1)
ElseIf Left(PrimitiveUrl,3)=../ then
Do While Left(PrimitiveUrl,3)=../
PrimitiveUrl=Right(PrimitiveUrl,Len(PrimitiveUrl)-3)
円周率=円周率+1
ループ
Ci=0 から (Ubound(ConArray)-1-Pi) の場合
DefiniteUrl<> の場合、次に
DefiniteUrl=DefiniteUrl & / & ConArray(Ci)
それ以外
DefiniteUrl=ConArray(Ci)
終了の場合
次
DefiniteUrl=DefiniteUrl & / & PrimitiveUrl
それ以外
Instr(PrimitiveUrl,/)>0 の場合
PriArray=Split(PrimitiveUrl,/)
Instr(PriArray(0),.)>0 の場合
右の場合(PrimitiveUrl,1)=/ 次に
DefiniteUrl=http:// & PrimitiveUrl
それ以外
Instr(PriArray(Ubound(PriArray)-1),.)>0 の場合
DefiniteUrl=http:// & PrimitiveUrl
それ以外
DefiniteUrl=http:// & PrimitiveUrl & /
終了の場合
終了の場合
それ以外
正しい場合(ConsultUrl,1)=/ 次に
DefiniteUrl=ConsultUrl および PrimitiveUrl
それ以外
DefiniteUrl=Left(ConsultUrl,InstrRev(ConsultUrl,/)) & PrimitiveUrl
終了の場合
終了の場合
それ以外
Instr(PrimitiveUrl,.)>0 の場合
正しい場合(ConsultUrl,1)=/ 次に
right(PrimitiveUrl,3)=.cn または right(PrimitiveUrl,3)=com または right(PrimitiveUrl,3)=net または right(PrimitiveUrl,3)=org の場合
DefiniteUrl=http:// & PrimitiveUrl & /
それ以外
DefiniteUrl=ConsultUrl および PrimitiveUrl
終了の場合
それ以外
right(PrimitiveUrl,3)=.cn または right(PrimitiveUrl,3)=com または right(PrimitiveUrl,3)=net または right(PrimitiveUrl,3)=org の場合
DefiniteUrl=http:// & PrimitiveUrl & /
それ以外
DefiniteUrl=Left(ConsultUrl,InstrRev(ConsultUrl,/)) & / & PrimitiveUrl
終了の場合
終了の場合
それ以外
正しい場合(ConsultUrl,1)=/ 次に
DefiniteUrl=ConsultUrl & PrimitiveUrl & /
それ以外
DefiniteUrl=Left(ConsultUrl,InstrRev(ConsultUrl,/)) & / & PrimitiveUrl & /
終了の場合
終了の場合
終了の場合
終了の場合
Left(DefiniteUrl,1)=/ の場合
DefiniteUrl=Right(DefiniteUrl,Len(DefiniteUrl)-1)
次の場合に終了
If DefiniteUrl<> then
DefiniteUrl=Replace(DefiniteUrl,//,/)
DefiniteUrl=Replace(DefiniteUrl,://,://)
それ以外
DefiniteUrl=$False$
終了の場合
終了機能
'================================================ = =
'関数名: ReplaceSaveRemoteFile
'機能: リモートファイルを置換して保存
'パラメータ: ConStr ------ 置換される文字列
'パラメータ: StarStr ----- 先頭
'パラメータ: OverStr -----
'パラメータ:IncluL ------
'パラメータ:IncluR ------
'パラメータ: SaveTf ------ ファイルを保存するかどうか、False は保存しません、True は保存します
'パラメータ: SaveFilePath - 保存フォルダ
'パラメータ: TistUrl----- 現在の Web ページのアドレス
'================================================ = =
関数 ReplaceSaveRemoteFile(ConStr,StartStr,OverStr,IncluL,IncluR,SaveTf,SaveFilePath,TistUrl)
ConStr=$False$ または ConStr= の場合
ReplaceSaveRemoteFile=$False$
終了関数
終了の場合
Dim TempStr,TempStr2,ReF,Matches,Match,Tempi,TempArray,TempArray2,OverTypeArray
ReF = 新しい正規表現を設定します
ReF.IgnoreCase = True
ReF.Global = True
ReF.Pattern = (&StartStr&).+?(&OverStr&)
一致を設定 =ReF.Execute(ConStr)
試合中の各試合について
Instr(TempStr,Match.Value)=0 の場合
TempStr<> の場合、
TempStr=TempStr & $Array$ & Match.Value
それ以外
TempStr=Match.Value
次の場合に終了
終了の場合
次
一致=なしを設定します
ReF=何も設定しない
TempStr= または IsNull(TempStr)=True の場合
ReplaceSaveRemoteFile=ConStr
終了機能
次の場合に終了
IncluL=False の場合
TempStr=Replace(TempStr,StartStr,)
次の場合に終了
InclR=False の場合
Instr(OverStr,|)>0 の場合
OverTypeArray=Split(OverStr,|)
Tempi=0 から Ubound(OverTypeArray) の場合
TempStr=Replace(TempStr,OverTypeArray(Tempi),)
次
それ以外
TempStr=Replace(TempStr,OverStr,)
終了の場合
次の場合に終了
TempStr=Replace(TempStr,,)
TempStr=Replace(TempStr,',)
Dim RemoteFile、RemoteFileurl、SaveFileName、SaveFileType、ArrSaveFileName、RanNum
Right(SaveFilePath,1)=/ の場合、
SaveFilePath=Left(SaveFilePath,Len(SaveFilePath)-1)
終了の場合
SaveTf=True の場合、
CheckDir2(SaveFilePath)=False の場合
MakeNewsDir2(SaveFilePath)=False の場合
SaveTf=False
終了の場合
終了の場合
終了の場合
SaveFilePath=SaveFilePath & /
'画像変換・保存
TempArray=Split(TempStr,$Array$)
Tempi=0 から Ubound(TempArray) の場合
RemoteFileurl=DefiniteUrl(TempArray(Tempi),TistUrl)
RemoteFileurl<>$False$ かつ SaveTf=True の場合、画像を保存します
ArrSaveFileName = Split(RemoteFileurl,.)
SaveFileType=ArrSaveFileName(Ubound(ArrSaveFileName))'ファイルの種類
RanNum=Int(900*Rnd)+100
SaveFileName = SaveFilePath&年(現在)&月(現在)&日(現在)&時間(現在)&分(現在)&秒(現在)&ranNum&.&SaveFileType
SaveRemoteFile(SaveFileName,RemoteFileurl) を呼び出す
ConStr=Replace(ConStr,TempArray(Tempi),SaveFileName)
ElseIf RemoteFileurl<>$False$ かつ SaveTf=False then' 画像を保存しません
SaveFileName=リモートファイルURL
ConStr=Replace(ConStr,TempArray(Tempi),SaveFileName)
終了の場合
RemoteFileUrl<>$False$ の場合、次に
UploadFiles= の場合
UploadFiles=保存ファイル名
それ以外
UploadFiles=アップロードファイル & & 保存ファイル名
次の場合に終了
終了の場合
次
ReplaceSaveRemoteFile=ConStr
終了機能
'================================================ = =
'プロセス名: SaveRemoteFile
'機能: リモートファイルをローカルに保存
'パラメータ: LocalFileName ------ ローカル ファイル名
'パラメータ: RemoteFileUrl ------ リモート ファイル URL
'================================================ = =
sub SaveRemoteFile(ローカルファイル名,リモートファイルURL)
dim 広告、取得、GetRemoteData
取得 = Server.CreateObject(Microsoft.XMLHTTP) を設定します。
検索あり
.Open Get、RemoteFileUrl、False、、
。送信
GetRemoteData = .ResponseBody
で終わる
取得 = なしを設定します
Ads = Server.CreateObject(Adodb.Stream) を設定します。
広告あり
.Type = 1
。開ける
.Write GetRemoteData
.SaveToFile サーバー.MapPath(ローカルファイル名),2
。キャンセル()
。近い()
で終わる
「広告=なし」を設定します
エンドサブ
'================================================ = =
'プロセス名: GetImg
'機能: 記事の最初の写真を取得します
'パラメータ: str ------ 記事の内容
'パラメータ: strpath ------ 画像を保存するパス
'================================================ = =
関数 GetImg(str,strpath)
set objregEx = 新しい正規表現
objregEx.IgnoreCase = true
objregEx.Global = true
zzstr=&strpath&(.+?)/.(jpg|gif|png|bmp)
objregEx.Pattern = zzstr
マッチを設定 = objregEx.execute(str)
試合の各試合ごとに
retstr = retstr &|& Match.Value
次
if retstr<> then
Imglist=split(retstr,|)
Imgone=replace(Imglist(1),strpath,)
GetImg=イムゴン
それ以外
GetImg=
終了する場合
終了関数
%>
以下は例です
プログラムコード
次のようにコードをコピーします。
<form id=form1 name=form1 method=post action=?action=test>
<textarea name=bodycols=50 rows=5 id=body>
<img height=180 src=http://cimg2.163.com/cnews/2006/8/21/200608210738371d0a8.jpg width=240 border=0 />
<img class=leftsrc=http://news.163.com/img/netease_logo.gif width=114 />
<img height=60 src=http://cimg2.163.com/cnews/2006/8/18/2006081811465369976.jpg width=120 border=0 />
<img height=60 /></textarea>
<入力タイプ=送信名=送信値=送信/>
</form>
<%
request.QueryString(action)=test の場合
'画像を開始する文字列
FilesStartStr=src=
'画像の最後にある文字列
FilesOverStr=gif|jpg|bmp
'写真を保存するフォルダー
ファイルパス=qq
' 画像が保存されている Web サイトの URL を取得し、それが絶対パスであるか相対パスであるかを自動的に判断します。この例では、画像が絶対アドレスであるため、../images/123 の場合は NEWURL は役に立ちません。 gif では、NEWURL を指定する必要があります。
ニュースURL=http://news.163.com
'記事の内容を取得する
内容 =リクエスト.フォーム(本文)
'写真の保存を開始します
Content=ReplaceSaveRemoteFile(Content,FilesStartStr,FilesOverStr,False,True,True,FilesPath,NewsUrl)
'ニュースの最初の写真のサムネイルを作成する
if GetImg(Content,FilesPath)<> then
Imgsrc=GetImg(コンテンツ,ファイルパス)
Imgsrc=replace(Imgsrc,ファイルパス,)
Jpeg = Server.CreateObject(Persits.Jpeg) を設定します。
パス = Server.MapPath(&FilesPath&) & /&Imgsrc&
Jpeg.オープンパス
'画像の幅が 120 以下、高さが 90 以下の場合、サムネイルは作成されません。
Jpeg.OriginalWidth<=120 かつ Jpeg.Height<=90 の場合
Jpeg.Width = Jpeg.OriginalWidth
Jpeg.Height = Jpeg.OriginalHeight
Smallimg=ファイルパス&&GetImg(コンテンツ,ファイルパス)
それ以外
'画像の幅と高さ/2
Jpeg.Width = Jpeg.OriginalWidth / 2
Jpeg.Height = Jpeg.OriginalHeight / 2
Jpeg.Save Server.MapPath(&FilesPath&) & /small_&Imgsrc&
Smallimg=&FilesPath&/small_&Imgsrc&
終了する場合
終了する場合
'結果を表示
response.Write(ニュースの最初の写真は:)
response.Write(<img src=&FilesPath&/&GetImg(Content,FilesPath)&>)
response.Write(<br>ニュースの最初の写真のサムネイルは次のとおりです:)
応答.Write(<img src=&Smallimg&>)
response.Write(<br>新しいニュース コンテンツ (画像はローカルのもの):<br>)
応答.書き込み(コンテンツ)
Response.End()
終了する場合
%>