' ******************************************************************************
' **
' ** Yahoo Finance Managed
' ** Written by Marius Häusler 2010
' ** It would be pleasant, if you contact me when you are using this code.
' ** Contact: YahooFinanceManaged@gmail.com
' ** Project Home: http://code.google.com/p/yahoo-finance-managed/
' **
' ******************************************************************************
' **
' ** Copyright 2010 Marius Häusler
' **
' ** Licensed under the Apache License, Version 2.0 (the "License");
' ** you may not use this file except in compliance with the License.
' ** You may obtain a copy of the License at
' **
' ** http://www.apache.org/licenses/LICENSE-2.0
' **
' ** Unless required by applicable law or agreed to in writing, software
' ** distributed under the License is distributed on an "AS IS" BASIS,
' ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
' ** See the License for the specific language governing permissions and
' ** limitations under the License.
' **
' ******************************************************************************
Namespace RSS
''' <summary>
''' Class for downloading RSS feeds
''' </summary>
''' <remarks></remarks>
Public Class FeedDownload
Inherits Base.DataDownload
Public Event AsyncDownloadCompleted(ByVal sender As Base.Download, ByVal ea As FeedDownloadCompletedEventArgs)
Private mXmlParser As New ImportExport.XML
Public Overloads Function Download(ByVal url As String) As FeedResponse
Return Me.ToResponse(MyBase.Download(url))
End Function
Public Overloads Sub DownloadAsync(ByVal url As String, Optional ByVal userArgs As Object = Nothing)
MyBase.DownloadAsync(url, New AsyncDownloadArgs(userArgs) With {.URL = url})
End Sub
''' <summary>
''' Default constructor
''' </summary>
''' <remarks></remarks>
Public Sub New()
Me.TextEncoding = System.Text.Encoding.UTF8
End Sub
Private Sub DownloadAsync_Completed(ByVal sender As Base.Download, ByVal ba As Base.DataDownloadCompletedEventArgs) Handles MyBase.AsyncDataBaseDownloadCompleted
Dim dlArgs As AsyncDownloadArgs = DirectCast(ba.UserArgs, AsyncDownloadArgs)
Dim args As New FeedDownloadCompletedEventArgs(dlArgs.UserArgs, Me.ToResponse(ba.Response), dlArgs.URL)
RaiseEvent AsyncDownloadCompleted(Me, args)
End Sub
Friend Function ToResponse(ByVal resp As Base.DataResponse) As FeedResponse
Dim feeds As New List(Of Feed)
Dim culture As New Globalization.CultureInfo("en-US")
Dim lst() As XmlNode = mHelper.GetResultsFromXml(resp.Result, "channel")
For Each f As XmlNode In lst
feeds.Add(mXmlParser.ToFeed(f))
Next
Return New FeedResponse(resp.Connection, feeds.ToArray)
End Function
Private Class AsyncDownloadArgs
Inherits Base.DownloadEventArgs
Public URL As String
Public Sub New(ByVal userArgs As Object)
MyBase.New(userArgs)
End Sub
End Class
End Class
Public Class FeedDownloadCompletedEventArgs
Inherits Base.DownloadCompletedEventArgs
Private mURL As String = String.Empty
Public ReadOnly Property URL() As String
Get
Return mURL
End Get
End Property
Public Overloads ReadOnly Property Response() As FeedResponse
Get
Return TryCast(MyBase.Response, FeedResponse)
End Get
End Property
Friend Sub New(ByVal userArgs As Object, ByVal resp As FeedResponse, ByVal url As String)
MyBase.New(userArgs, resp)
mURL = url
End Sub
End Class
Public Class FeedResponse
Inherits Base.Response
Public Overloads ReadOnly Property Result() As Feed()
Get
Return TryCast(MyBase.Result, Feed())
End Get
End Property
Friend Sub New(ByVal info As Base.ConnectionInfo, ByVal result() As Feed)
MyBase.New(info, result)
End Sub
End Class
End Namespace