【】Top
【】VB.NET
【】VB6.0
【】メールマガジンの購読
【】メールマガジンの解除
【】会社概要
【】お問い合わせ
姉妹サイト「バーチャルコネクション!」はこちらです。
姉妹サイト「七福神のメールでビンゴ!」はこちらです。
●24時間365日の安心をあなたにAT-LINK専用サーバ・サービスお勧めのサーバです。
|
|
|
|
|
URLを絶対URLへ変換する
|
|
【 URLを絶対URLへ変換する 】
【注意書き】 ●VB.NET を使っているものとします。 ●動作環境は、Windows XX を使用しているとします。
.NET でも、相対URLを絶対URLへ変換するすることが可能です。
この機能を使えば、簡単に、 ダウンロードしたドキュメントの相対URLを絶対URLへ変換 するアプリケーションを作成することが可能です
フォームに次の様なコードを記述します
-----------VB.NETコーディングここから-------------------
1.フォームに、ラベルコントロール、 テキストボックスコントロール、 ボタンコントロール を配置します。 下記は、デフォルトのオブジェクトの名前と配置を示しています。
┏━━━━━━━━━┓┏━━━━━━━━━┓ ┃Label1 ┃┃TextBox1 ┃ ┗━━━━━━━━━┛┗━━━━━━━━━┛
┏━━━━━━━━━┓┏━━━━━━━━━┓ ┃Label2 ┃┃TextBox2 ▲┃ ┗━━━━━━━━━┛┃ ▼┃ ┗━━━━━━━━━┛
┏━━━━━━━━━┓┏━━━━━━━━━┓ ┃Label3 ┃┃TextBox3 ▲┃ ┗━━━━━━━━━┛┃ ▼┃ ┗━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━┓ ┃TextBox4 ▲┃ ┃ ▼┃ ┗━━━━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━┓ ┃Button1 ┃ ┗━━━━━━━━━┛
2.テキストボックスコントロール TextBox2 , TextBox3 , TextBox4 は、それぞれ 複数行の入力とするため、 Multiline プロパティ を True にします。(複数行) ScrollBars プロパティを Both にします。(スクロールバー)
3.ボタンコントロールの Button1 text プロパティに「取得」と記述します。
ラベルコントロールの Label1 text プロパティに「URL」と記述します。
ラベルコントロールの Label2 text プロパティに「HTML」と記述します。
ラベルコントロールの Label3 text プロパティに「HTML変換後」と記述します。
※説明用のためです。必須ではありません。
┏━━━━━━━━━┓┏━━━━━━━━━┓ ┃URL ┃┃TextBox1 ┃ ┗━━━━━━━━━┛┗━━━━━━━━━┛
┏━━━━━━━━━┓┏━━━━━━━━━┓ ┃HTML ┃┃TextBox2 ▲┃ ┗━━━━━━━━━┛┃ ▼┃ ┗━━━━━━━━━┛
┏━━━━━━━━━┓┏━━━━━━━━━┓ ┃HTML変換後 ┃┃TextBox3 ▲┃ ┗━━━━━━━━━┛┃ ▼┃ ┗━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━┓ ┃TextBox4 ▲┃ ┃ ▼┃ ┗━━━━━━━━━━━━━━━━━━━━┛
4.ボタンコントロールをダブルクリックして、 ボタンのクリックイベントの編集を開始して、 フォームの宣言部に、次のコードを記述します。
Imports System Imports System.io Imports System.Net Imports System.Text
さらに、次のコードを記述します。
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim strUrl As String 'URL
Dim myWebClient As New WebClient 'Web Dim myDatabuffer As Byte() 'バッファバイト配列
Dim strHtml As String
'URLをセットします strUrl = TextBox1.Text
'ページソースの取得 'Stream or DownloadData を使い分けて比較してください 'コメントをつけたり、はずして使ってみます
''DownloadDataを使ったやり方------------------ここから 'URLからデータを取り出します myDatabuffer = myWebClient.DownloadData(strUrl) 'エンコードしています strHtml = Encoding.Default.GetString(myDatabuffer) ''DownloadDataを使ったやり方------------------ここまで
''Stream を使ったやり方-----------------------ここから 'Dim st As Stream 'st = myWebClient.OpenRead(strUrl) 'Dim sr As StreamReader = New StreamReader(st, _ ' Encoding.GetEncoding("Shift_JIS")) 'strHtml = sr.ReadToEnd() ''Stream を使ったやり方-----------------------ここまで
'ページソースを表示しています TextBox2.Text = strHtml
'絶対URLに補完しています strHtml = Cov_HtmlUrl(strHtml)
'変換後のページソースを表示しています TextBox3.Text = strHtml
Catch webEx As WebException 'エラー TextBox4.Text = webEx.ToString()
End Try
End Sub
Function Cov_HtmlUrl(ByVal PistrHtml As String) As String
'文字列を取り出して、src または hrefの記述以降をブランクか、 'クォートが現れるまでをURLとします。
Dim strOldUrl As String '変換前のUIRL Dim strNewUrl As String '変換後のUIRL Dim lngHtmlLen As Long 'ページソースの文字列数 Dim lngHtmlLenWork As Long 'ページソースの文字位置
Dim strGetHtmlStr As String 'ページソースから取り出した文字 Dim strGetHtmlStrCov As String '変換したページソース文字列
Dim intUrlstring As String '0:Other 1:Url
Dim uriBaseUri As Uri 'Uriクラス(ベースurl) Dim uriNewUri As Uri 'Uriクラス(新url)
lngHtmlLen = PistrHtml.Length
uriBaseUri = New Uri(TextBox1.Text)
Do lngHtmlLenWork = lngHtmlLenWork + 1 If lngHtmlLenWork > lngHtmlLen Then Exit Do
intUrlstring = 0 ' href であるかどうかをチェックします If Mid(PistrHtml, lngHtmlLenWork, 5) = " href" Then intUrlstring = 1 strGetHtmlStr = Mid(PistrHtml, lngHtmlLenWork, 5) lngHtmlLenWork = lngHtmlLenWork + 4 ElseIf Mid(PistrHtml, lngHtmlLenWork, 4) = " src" Then intUrlstring = 1 strGetHtmlStr = Mid(PistrHtml, lngHtmlLenWork, 4) lngHtmlLenWork = lngHtmlLenWork + 3 Else strGetHtmlStr = Mid(PistrHtml, lngHtmlLenWork, 1) End If strGetHtmlStrCov = strGetHtmlStrCov + strGetHtmlStr
If intUrlstring = 1 Then 'urlであるとき次の引用符、またはスペース、 'または>までループします '次の文字列がスペースであり続けるか、=までループします Do lngHtmlLenWork = lngHtmlLenWork + 1 If lngHtmlLenWork > lngHtmlLen Then Exit Do
strGetHtmlStr = Mid(PistrHtml, lngHtmlLenWork, 1) strGetHtmlStrCov = strGetHtmlStrCov + _ strGetHtmlStr If Mid(PistrHtml, lngHtmlLenWork, 1) = " " Then ElseIf Mid(PistrHtml, lngHtmlLenWork, 1) _ = "=" Then Exit Do End If Loop strOldUrl = "" strNewUrl = ""
Do lngHtmlLenWork = lngHtmlLenWork + 1 If lngHtmlLenWork > lngHtmlLen Then Exit Do
strGetHtmlStr = Mid(PistrHtml, lngHtmlLenWork, 1)
If Mid(PistrHtml, lngHtmlLenWork, 1) _ = " " Then 'ループの終わりです
Exit Do ElseIf _ Mid(PistrHtml, lngHtmlLenWork, 1) = """" Then '引用符はスキップします() ElseIf _ Mid(PistrHtml, lngHtmlLenWork, 1) = ">" Then 'ループの終わりです uriNewUri = New Uri(uriBaseUri, strOldUrl) strNewUrl = uriNewUri.ToString TextBox4.Text &= strOldUrl & " → 変換後" TextBox4.Text &= strNewUrl & vbCrLf
Exit Do Else 'urlでない strOldUrl = strOldUrl + strGetHtmlStr End If Loop strGetHtmlStrCov = strGetHtmlStrCov & """" & _ strNewUrl & """" & strGetHtmlStr
End If
Loop
Return strGetHtmlStrCov End Function
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.Text = "http://anetm.com/m/dev/"
TextBox2.Text = "変換前のソースをここに表示します" TextBox3.Text = "変換後のソースをここに表示します" TextBox4.Text = "変換されたURLログ" + vbCrLf
End Sub
5.ビルドして実行します。
6.フォームに表示された URLの右側のテキストに 閲覧したい URLを入力します。 ※デフォルトでは http://anetm.com/m/dev/
7.フォームに表示された「取得」のボタンを押します
8.指定した URLサイトからページソースがダウンロードされ、 記述されている相対URLの部分が、絶対URLに置き換えられて テキストボックスへ表示されることを確認できます。
----------VB.NETコーディングここまで-------------------
本サンプルでは、Form1_Load イベントに 初期設定のテキストを設定しています。
ページソースの取得では、Stream で行う方法と DownloadData で行う方法の2種類を記述しています。 どちらか片方のコメントをつけかえることで、 双方をお試しいただけます。
''DownloadDataを使ったやり方------------------ここから 'URLからデータを取り出します myDatabuffer = myWebClient.DownloadData(strUrl) 'エンコードしています strHtml = Encoding.Default.GetString(myDatabuffer) ''DownloadDataを使ったやり方------------------ここまで
''Stream を使ったやり方-----------------------ここから Dim st As Stream st = myWebClient.OpenRead(strUrl) Dim sr As StreamReader = New StreamReader(st, _ Encoding.GetEncoding("Shift_JIS")) strHtml = sr.ReadToEnd() ''Stream を使ったやり方-----------------------ここまで
変換されたURLログ
../images/ivcon.gif → 変換後 http://anetm.com/m/images/ivcon.gif ../oubo.htm → 変換後 http://anetm.com/m/oubo.htm ../ → 変換後 http://anetm.com/m/ ./ → 変換後 http://anetm.com/m/dev/
といった具合に相対URLが絶対URLに変換されます。
URLの変換には、Uri クラスを使用しています
相対URLを絶対URLへ変換 uriNewUri = New Uri(uriBaseUri, strOldUrl)
変換したURLをストリングへ変換 strNewUrl = uriNewUri.ToString
|
http://anetm.com/dev/d.cgi?SC=DTDTL&o=Omw
Copyright(c)2001-2004 Ai Net Makoto 記事・情報の無断転載を禁止します。
|
|
|
|
|
|
|