| 【】Top
 
 【】VB.NET
 【】VB6.0
 
 【】メールマガジンの購読
 【】メールマガジンの解除
 
 
 
 
 
 
 【】会社概要
 
 【】お問い合わせ
 
 
 姉妹サイト「バーチャルコネクション!」はこちらです。
 
 姉妹サイト「七福神のメールでビンゴ!」はこちらです。
 
 
   
 ●24時間365日の安心をあなたにAT-LINK専用サーバ・サービスお勧めのサーバです。
 
 
 | 
 
               
                |  |  |  |   
                |  | 
   
 
   
    | 
  
        http://anetm.com/dev/d.cgi?SC=DTDTL&o=Omw 
        
  
                 
               
                 
                  | 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
 
 
 
 |  
  
             
   
 Copyright(c)2001-2004 Ai Net Makoto 記事・情報の無断転載を禁止します。  |  |  |   
                |  |  |  |  |