Imports System Imports System.Collections.Generic Imports System.Globalization Imports System.Text Imports Jssk.Util Imports Jssk.CastaNet ''' ''' Wcpeクラス ''' ''' CastaNetにアタッチする「WCPE」放送局のクラスです。ICNStationインターフェースを実装します。 ''' ''' ''' TELLA ''' ''' 2006/08/08 新規作成 ''' 2007/09/05 修正(プロパティ追加等) ''' Public Class Wcpe : Implements ICNStation Private eHeaderTexts As String() Private eDispName As String = "WCPE" Private eDispInfo As String = "[WCPE] http://theclassicalstation.org/" & vbNewLine & _ "WCPEはクラシック音楽放送における" & vbNewLine & _ "素晴らしさに捧げられた非営利的で、" & vbNewLine & _ "独立していて、リスナーによって" & vbNewLine & _ "支持されたステーションです。" & vbNewLine & _ "(WCPEサイトより)" Private eStreamUrl As String = "mms://rx-wes-sea150.rbn.com/farm/pull/tx-rbn-sea08:1259/wmtencoder/wcpe/wcpeint/wmlive/wcpewin.asf" Private ePlayListUrlPart As String = "http://theclassicalstation.org/music/@DayOfTheWeek@.shtml" Private eCodePage As Integer = Encoding.Default.CodePage ' システムデフォルト Private eTimeDiff As Integer = -13 ' 日付文字列を日付に変換するためのDateTimeFormatInfo Dim eDtfi As DateTimeFormatInfo = New DateTimeFormatInfo() ' PlayListUrlが呼ばれたときに渡された日本時間に対応する現地時間の日付 Private eDateLcl As DateTime ''' ''' コンストラクタです。 ''' Sub New() Me.eDtfi.FullDateTimePattern = "MMMM d, yyyy" ' 例:August 8, 2006 End Sub #Region "// プロパティ //////////////////////////////////////////////////" '//////////////////////////////////////////////////////////////////////////////// '// プロパティ '//////////////////////////////////////////////////////////////////////////////// ''' ''' 番組表のヘッダーテキストを設定・取得します。 ''' ''' ヘッダーテキスト Property HeaderTexts() As String() Implements ICNStation.HeaderTexts Set(ByVal value As String()) Me.eHeaderTexts = value End Set Get Return Me.eHeaderTexts End Get End Property ''' ''' CastaNetの「放送局選択」コンボボックス等に表示する放送局名を設定・取得します。 ''' ''' 放送局名 Property DispName() As String Implements ICNStation.DispName Set(ByVal value As String) Me.eDispName = value End Set Get Return Me.eDispName End Get End Property ''' ''' CastaNetの情報アイコンを指したとき等に表示される放送局の情報を設定・取得します。 ''' ''' 放送局の情報 Property DispInfo() As String Implements ICNStation.DispInfo Set(ByVal value As String) Me.eDispInfo = value End Set Get Return Me.eDispInfo End Get End Property ''' ''' 放送を聴くためのストリームのURLを設定・取得します。 ''' ''' ストリームURL Property StreamUrl() As String Implements ICNStation.StreamUrl Set(ByVal value As String) Me.eStreamUrl = value End Set Get Return Me.eStreamUrl End Get End Property ''' ''' 番組表を取得するためのURLの一部を設定・取得します。 ''' ''' 番組表取得URLの一部 Property PlayListUrlPart() As String Implements ICNStation.PlayListUrlPart Set(ByVal value As String) Me.ePlayListUrlPart = value End Set Get Return Me.ePlayListUrlPart End Get End Property ''' ''' 番組表の読み込み時に指定する文字セットのWindowsコードページ値を設定・取得します。 ''' ''' Windowsコードページ値 Property CodePage() As Integer Implements ICNStation.CodePage Set(ByVal value As Integer) Me.eCodePage = value End Set Get Return Me.eCodePage End Get End Property ''' ''' 日本との時差を設定・取得します。 ''' ''' 日本との時差(h) Property TimeDiff() As Integer Implements ICNStation.TimeDiff Set(ByVal value As Integer) Me.eTimeDiff = value End Set Get Return Me.eTimeDiff End Get End Property #End Region #Region "// Public メソッド ////////////////////////////////////////////////////////////" '//////////////////////////////////////////////////////////////////////////////// '// Public メソッド '//////////////////////////////////////////////////////////////////////////////// ''' ''' 指定された日本時間に対応する番組表を取得するためのURLを返します。 ''' ''' ※ CastaNetから引数で渡された日本時間を適宜加工してURLを組み立てて返すことになると思います。 ''' ※ 必要に応じてURLエンコードを行ってください。 ''' ''' ''' 日本時間 ''' 番組表取得URL Function PlayListUrl(ByVal dTimeJpn As DateTime) As String Implements ICNStation.PlayListUrl ' 指定された日本時間から現地時間を取得する Dim dTimeLcl As DateTime = dTimeJpn.AddHours(Me.eTimeDiff) ' 現地の曜日を文字列(小文字)で取得する Dim dow As DayOfWeek = dTimeLcl.DayOfWeek() Dim dowStr As String = [Enum].GetName(GetType(DayOfWeek), dow).ToLower() ' sunday ' monday ' tuesday ' wednesday ' thursday ' friday ' saturday ' このあと引き続いて呼ばれるPlayListメソッドのために現地日付を保存する Me.eDateLcl = dTimeLcl.Date Return Me.ePlayListUrlPart.Replace("@DayOfTheWeek@", dowStr) End Function ''' ''' 番組表を返します。 ''' ''' CastaNetがPlayListUrl()メソッドを呼び出して得たURLにアクセスし、読み込んだテキストを引数で渡します。 ''' ''' 必要な情報が1回で取得できないときは、第3引数のnextUrlに次のURLを渡したうえで、Nothingを返してください。 ''' CastaNetはそのURLにアクセスして情報を取得し、再度第1引数に渡してこのメソッドを呼び出します。 ''' 何回目の呼び出しかは第2引数で知ることができます。 ''' 最終的に必要な情報がそろったら、下記のようなリストを作成して返してください。 ''' ''' 番組表は、以下の項目順で格納された文字列配列をList(Of String())に格納して返してください。 ''' ''' +----------+--------+--------+--------+--------+-----------------+ ''' | (0) | (1) | (2) | (3) | (4) | (5) | ''' +----------+--------+--------+--------+--------+-----------------+ ''' | 現地時刻 | 作曲者 | 曲名 | 演奏者 | CD番号 | CD購入サイトURL | ''' +----------+--------+--------+--------+--------+-----------------+ ''' ''' ※ 「現地時刻」はDateTimeに変換できる正しい文字列をセットしてください。 ''' ※ 「現地時刻」は時刻部分だけをセットしてください。(例:"12:01 am") ''' ※ 情報の無い項目にはNothingをセットしてください。 ''' ※ 各レコードの格納順は自由です。時間等でソートされている必要はありません。 ''' ※ HTMLデコードはCastaNet本体側で行いますので、実装クラスでは特に必要ありません。 ''' ''' ''' 番組表の情報を含んだテキスト ''' CastaNetからこのメソッドが呼ばれた回数、最初は0 ''' 次の情報の取得先URL ''' 番組表を格納したList、取得できなかったときは要素数を0にして返す、さらに情報が欲しいときはNothingを返す Function PlayList(ByVal playListText As String, ByVal callCount As Integer, ByRef nextUrl As String) As List(Of String()) Implements ICNStation.PlayList ' 番組表を格納するListを用意する Dim playList_ As List(Of String()) = New List(Of String())() ' 渡されたテキストから日付部分を取り出す(例:August 8, 2006) Dim dTimeLclStr As String = ComUtil.GetSubstring(playListText, "", ":", 0) ' 日付文字列から日付に変換する Dim dateLcl As DateTime = Convert.ToDateTime(dTimeLclStr, Me.eDtfi) ' 直前に呼ばれたPlayListUrlメソッドで保存した現地日付と異なる場合はここで戻る If dateLcl <> Me.eDateLcl Then Return playList_ ' 曲目リストが含まれている部分を取り出す Dim tuneList As String = ComUtil.GetSubstring(playListText, "", "", 0) ' すべてのタグについて繰り返す Dim idx As Integer = 0 Do ' @@ 各種情報を取り出す @@ ' 曲情報全体 Dim tuneInfo As String = ComUtil.GetSubstring(tuneList, "", "", idx, idx) If tuneInfo Is Nothing Then Exit Do ' 番組表の1レコードの一次元配列を作成する Dim playListArran(5) As String ' すべてのタグについて繰り返す Dim cdNo As String = String.Empty Dim idx2 As Integer = 0 Dim itemIdx As Integer = 0 Do While itemIdx < 8 Dim item As String = ComUtil.GetSubstring(tuneInfo, "", "", idx2, idx2) Select Case itemIdx Case 0 ' とばし Case 1 ' 放送時刻 playListArran(0) = item Case 2 ' CDサイトURL Dim cdUrl As String = ComUtil.GetSubstring(item, " ''' 任意情報を受け取ります。 ''' ''' CastaNetは、各放送局の設定ファイルの [COption]Info キーに設定されている文字列を ''' このメソッドを呼び出して実装クラスに渡します。 ''' このメソッドは、CastaNetが実装クラスのインスタンスを生成した直後に呼び出します。 ''' ''' 任意情報の使用目的や書式などは、このインターフェースの実装者が自由に決めてください。 ''' ''' ''' 情報の文字列 Sub OptionInfo(ByVal info As String) Implements ICNStation.OptionInfo ' 現バージョンでは実装なし End Sub #End Region End Class