Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 168
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Mit YahooFinance Aktiendaten downloaden


Autor: Gast
Sprache: VB.NET
Bewertung:
noch nicht bewertet
Anzahl der Aufrufe: 5007
  
Kick it on dotnet-kicks.de  

Beschreibung:

Mit YahooFinance lassen sich relativ leicht und kostenlos Aktienkurse downloaden.
Man muss eine systematisch zusammengesetzte URL aufrufen und bekommt eine .csv-Datei zurück. Ich benutze hier ohne Umwege einen Stream zum Laden der Daten, welcher dann Stück für Stück ausgelesen wird.


Abgelegt unter: Yahoo, Finance, Download, Quotes, Aktien.



Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
Imports System.Net
Imports System.IO

'''''' <summary>
'''''' Managed den Quotes-Download von YahooFinance
'''''' </summary>
'''''' <remarks></remarks>
Public Class YahooFinanceQuotes
    Public Event DownloadCompleted(ByVal values() As QuoteData)
    Public Event Timeout()

    Private WithEvents m_WC As WebClient
    Private WithEvents m_Timeout As Timer

    '''''' <summary>
    '''''' Startet den Download von YahooFinance
    '''''' </summary>
    '''''' <param name="idList">Eine Auflistung der Yahoo-IDs der verschiedenen Unternehmen</param>
    '''''' <param name="timeout">Zeitspanne bis der Download abgebrochen wird in ms</param>
    '''''' <remarks></remarks>
    Public Sub StartDownload(ByVal idList() As String, Optional ByVal timeout As Integer = 10000)
        ''URL zusammen setzen
        Dim url As String = "http://finance.yahoo.com/d/quotes.csv?s="
        ''IDs hinzufügen
        For Each s As String In idList
            url &= s & "+"
        Next
        url &= "&f="
        ''Das Wichtigste: Die Symbolkombination
        ''Alle Symbole z.B. unter "http://www.gummy-stuff.org/Yahoo-data.htm"
        url &= "nl1poc1p2ghjkva2"

        ''Download starten
        m_WC = New WebClient
        m_Timeout = New Timer
        m_Timeout.Interval = timeout
        m_Timeout.Start()
        m_WC.OpenReadAsync(New Uri(url))
    End Sub

    Private Sub m_Quotes_OpenReadCompleted(ByVal sender As Object, ByVal e As System.Net.OpenReadCompletedEventArgs) Handles m_WC.OpenReadCompleted
        Try
            m_Timeout.Stop()
            m_Timeout.Dispose()

            Dim quotes As New List(Of QuoteData)
            Dim sr As New StreamReader(e.Result)

            While sr.Peek <> -1
                ''Row aufteilen
                Dim rowStr() As String = sr.ReadLine.Split(Char.Parse(","))
                Dim values As New List(Of Double)
                Dim sd As New QuoteData

                ''Liste mit Werten der Row erstellen
                For i As Integer = 0 To rowStr.Count - 1
                    rowStr(i) = rowStr(i).ToString.Replace("""", "")
                    rowStr(i) = rowStr(i).ToString.Replace("%", "")
                    If i = 0 Then
                        sd.Name = rowStr(i)
                    Else
                        If rowStr(i).ToString = "N/A" Then
                            ''"N/A" sendet Yahoo, wenn kein Wert zur Verfügung steht
                            values.Add(0)
                        Else
                            ''Die Daten liegen im englischen Format vor
                            Dim ci As New Globalization.CultureInfo("en-US")
                            values.Add(Double.Parse(rowStr(i).ToString, Globalization.NumberStyles.Currency, ci))
                        End If
                    End If
                Next

                ''Wertzuweisung in Abstimmung zur Symbolkombination
                sd.Value = values(0)
                sd.Close = values(1)
                sd.Open = values(2)
                sd.ChangeNominal = values(3)
                sd.ChangePercent = values(4)
                sd.LowDay = values(5)
                sd.HighDay = values(6)
                sd.LowYear = values(7)
                sd.HighYear = values(8)
                sd.Volume = values(9)
                sd.VolumeO = values(10)

                quotes.Add(sd)
            End While

            ''Event auslösen
            RaiseEvent DownloadCompleted(quotes.ToArray)
            e.Result.Close()
            m_WC.Dispose()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub m_Timeout_Tick() Handles m_Timeout.Tick
        ''Download bei Erreichen des Timeouts unterbrechen
        If m_WC IsNot Nothing AndAlso m_WC.IsBusy Then
            m_WC.CancelAsync()
        End If
        m_Timeout.Stop()
        m_Timeout.Dispose()
        RaiseEvent Timeout()
    End Sub

End Class


Public Structure QuoteData
    Public Name As String
    Public Value As Double
    Public Close As Double
    Public Open As Double
    Public ChangeNominal As Double
    Public ChangePercent As Double
    Public LowDay As Double
    Public HighDay As Double
    Public LowYear As Double
    Public HighYear As Double
    Public Volume As Double
    Public VolumeO As Double
End Structure




'''''' <summary>
'''''' Beispielanwendung: Form mit einem ListView(5 Columns: Name, Value, Open, High, Low) und einem Button
'''''' </summary>
'''''' <remarks></remarks>
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim y As New YahooFinanceQuotes
        AddHandler y.DownloadCompleted, AddressOf DownloadCompleted
        ''Die IDs für Adidas, Alianz und BASF
        Dim id() As String = New String(2) {"ADS.DE", "ALV.DE", "BAS.DE"}
        ''oder DAX, TECDAX und MDAX
        ''Dim id() As String = New String(2) {"^GDAXI", "^TECDAX", "^MDAXI"}
        y.StartDownload(id)
    End Sub

    Private Sub DownloadCompleted(ByVal quotes() As QuoteData)
        For Each q As QuoteData In quotes
            ListView1.Items.Add(New ListViewItem(New String(4) {q.Name, q.Value.ToString("n"), q.Open.ToString("n"), q.HighDay.ToString("n"), q.LowDay.ToString("n")}))
        Next
    End Sub
End Class


Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)



schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.