iT邦幫忙

DAY 27
0

建構自己的BigData系列 第 28

建構自己的BigData(26)-處理讀取股市歷史資料

  • 分享至 

  • xImage
  •  

那天找到了讀取股市歷史資料的範例, 今天要來簡單改寫.

        private void button6_Click(object sender, EventArgs e)
        {
            string stock_id = "";

            label1.Text = "0";

            // 讀取所有股票列表
            DataView myDataView = DAL.GetStocksData.GetStocksCode();

            // 如果沒有 C:/Stocks/ 目錄, 則建立
            if (!Directory.Exists("C:/Stocks/")) Directory.CreateDirectory("C:/Stocks/");

            // 所有股票列表
            foreach (DataRowView myDRV in myDataView)
            {
                listBox2.Items.Add(myDRV["code"].ToString());

                stock_id = myDRV["code"].ToString();

                FileStream fs = new FileStream("C:/Stocks/" + stock_id + ".csv", FileMode.Create);
                StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding(950));

                sw.WriteLine("股市代號,日期,收盤價");
                var SQLCommand = string.Empty;
                // 自1999年到2014年
                for (int y = 1999; y <= 2014; y++)
                {
                    // 自1到12月
                    for (int m = 1; m <= 12; m++)
                    {
                        // 讀取 getMonthData
                        List<string> month_data = getMonthData(stock_id, y, m);
                        for (int i = 0; i < month_data.Count; i++)
                        {
                            // 產生 SQLCommand
                            SQLCommand = "INSERT INTO stockshistory (StocksCode,Date,Price) VALUES('";
                            SQLCommand += month_data[i].Replace(",", "','");
                            SQLCommand += "')";

                            int intStatus = GetStocksData.RunSQLCommand(SQLCommand);
                            label1.Text = (Convert.ToDouble(label1.Text) + 1).ToString();
                            // 寫入資料
                            sw.WriteLine(month_data[i]);
                        }
                        // 秀在Console
                        Console.WriteLine(y + "/" + m + (month_data.Count == 0 ? " no data." : " download."));
                    }
                }

                sw.Close();
                fs.Close();
          
  1. Buttom 的程式, 是這樣.

但是我們增加股票代號.

        private static List<string> getMonthData(string stock_id, int year, int month)
        {
            //ref: http://msdn.microsoft.com/zh-tw/library/system.net.webrequest.aspx

            // http://www.twse.com.tw/ch/trading/exchange/STOCK_DAY_AVG/STOCK_DAY_AVG2.php?STK_NO=2330&myear=2014&mmon=10&type=csv

            // Create a request for the URL.
            WebRequest request = WebRequest.Create("http://www.twse.com.tw/ch/trading/exchange/STOCK_DAY_AVG/STOCK_DAY_AVG2.php?STK_NO=" + stock_id + "&myear=" + year + "&mmon=" + month.ToString("0#") + "&type=csv");

            // If required by the server, set the credentials.
            request.Credentials = CredentialCache.DefaultCredentials;

            // Get the response.
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            // Get the stream containing content returned by the server.
            Stream dataStream = response.GetResponseStream();

            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream, Encoding.GetEncoding(950));

            // Read the content.

            List<string> data = new List<string>();

            string title1 = reader.ReadLine();  //98年12月 2002 中鋼 日收盤價及月平均收盤價(元)

            if (title1 == null) //表示沒資料
            {
            }
            else
            {
                reader.ReadLine();  //日期    收盤價

                while (!reader.EndOfStream)
                {
                    data.Add(stock_id.Trim() + "," + reader.ReadLine().Trim());
                }

                data.RemoveAt(data.Count - 1);  //說明:以上成交資料採市場交易時間之資料計算。
                data.RemoveAt(data.Count - 1);  //月平均收盤價    31.18
            }

            // Cleanup the streams and the response.
            reader.Close();
            dataStream.Close();
            response.Close();

            return data;
        }

2.處理抓資料的程式段落, 也是增加股票代號

因為我們將會抓所有上市股票的資料, 所以需要這個欄位加以區分.


上一篇
建構自己的BigData(25)-發送電子郵件
下一篇
建構自己的BigData(27)-將資料塞入MariaDB
系列文
建構自己的BigData31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言