【】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 記事・情報の無断転載を禁止します。

「これがほしかった!厳選サンプルツール集」の注意点
●当サイトはリンクフリーです。
2018/10/21(日)00:05 更新