YourFileHostのFLVのURLを探す

YourFileHostのFLVへのパスを探すコードをうpしてみる。

Imports System.Text.RegularExpressions
Public Class ModYourFileHost

    Private Sub New()

    End Sub
    ''' <summary>
    ''' YourFileHostからFLVのURLを取得します。
    ''' </summary>
    ''' <param name="url">YourFileHostのUrl</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function Read(ByVal url As String) As ModYourFileHost

        Dim instance As New ModYourFileHost

        '// ムービーのパラムを検索
        Dim r As New Regex("<param name=""movie"" value="".*?>")
        Dim mc As MatchCollection = r.Matches(GetResponse(url))

        If mc.Count > 0 Then
            instance.FileName = GetFilename(url)
            If instance.FileName.Length > 0 Then
                instance.FlvUrl = FindFlvUrl(System.Web.HttpUtility.UrlDecode(mc(0).Value))
                instance.ThumbnailUrl = GetThumbnailUrl(FindAPIUrl(System.Web.HttpUtility.UrlDecode(mc(0).Value)))
            End If
        End If

        Return instance
    End Function
    Private Shared Function GetFilename(ByVal url As String) As String
        '// ファイル名を取得します。
        Dim r As New Regex("file=.*?\.")
        Dim mc As MatchCollection = r.Matches(url)

        If mc.Count > 0 Then
            Return mc.Item(0).Value.Replace("file=", "").Replace(".", "") & ".flv"
        End If

        Return ""
    End Function

    Private Shared Function FindFlvUrl(ByVal target As String) As String
        '// FLVのパスを取得する
        Dim r As New Regex("videoembed_id=.*?search_url")
        Dim mc As MatchCollection = r.Matches(target)

        If mc.Count > 0 Then
            Return mc.Item(0).Value.Replace("videoembed_id=", "").Replace("&search_url", "")
        End If

        Return ""
    End Function

    Private Shared Function FindAPIUrl(ByVal target As String) As String
        '// ビデオの文字列からAPIのパスを取得する
        Dim r As New Regex("video=.*?search_url")
        Dim mc As MatchCollection = r.Matches(target)

        If mc.Count > 0 Then
            Return mc.Item(0).Value.Replace("video=", "").Replace("&search_url", "")
        End If

        Return ""
    End Function

    Private Shared Function GetThumbnailUrl(ByVal apiUrl As String) As String
        '// APIの結果からサムネイルのパスを取得する
        Dim result As String = System.Web.HttpUtility.UrlDecode(GetResponse(apiUrl))

        Dim r As New Regex("photo=.*?jpg")
        Dim mc As MatchCollection = r.Matches(result)

        If mc.Count > 0 Then
            Return mc.Item(0).Value.Replace("photo=", "")
        End If

        Return ""
    End Function

    Private m_fileName As String             '// 保存するファイル名
    Private m_flvUrl As String               '// FLVのURL
    Private m_thumbnailUrl As String         '// サムネイルのURL
    Public Property FileName() As String
        Get
            Return m_fileName
        End Get
        Set(ByVal value As String)
            m_fileName = value
        End Set
    End Property
    Public Property FlvUrl() As String
        Get
            Return m_flvUrl
        End Get
        Set(ByVal value As String)
            m_flvUrl = value
        End Set
    End Property
    Public Property ThumbnailUrl() As String
        Get
            Return m_thumbnailUrl
        End Get
        Set(ByVal value As String)
            m_thumbnailUrl = value
        End Set
    End Property

    ''' <summary>
    ''' HTTPのレスポンスデータを取得します。
    ''' </summary>
    ''' <param name="url"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Shared Function GetResponse(ByVal url As String) As String
        Dim webreq As System.Net.WebRequest = System.Net.WebRequest.Create(url)
        '// 10秒でタイムアウト
        webreq.Timeout = 10 * 1000
        Using webres As System.Net.WebResponse = webreq.GetResponse()
            Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("euc-jp")
            Using st As System.IO.Stream = webres.GetResponseStream()
                Dim result As String = ""
                Using sr As New System.IO.StreamReader(st, enc)
                    result = sr.ReadToEnd()
                End Using
                Return result
            End Using
            webres.Close()
        End Using

        Return Nothing
    End Function
End Class