2012-07-16 57 views
0

我有一個關於輪詢或檢測網站上XML文件更改的問題。我有一個相當硬編碼的系統,它讀取紐約聯儲關於他們日常證券借貸的XML文件。它運行良好,我沒有問題。我的主要問題是我如何在每個工作日輪詢網站的變化。我知道我可以檢查XML文件上的「上次修改」字段(或者在this的案例中,「準備」字段),但我很好奇我如何去做這件事,以便在實際上做出更改時XML網站,我的電腦會自動加載並分析新的XML文件。儘快獲得這些信息對我來說非常重要,因此每X分鐘輪詢一次並不會如我所願。有任何想法嗎?如何在網站更改時自動加載新文件

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Xml; 
using System.IO; 
using System.Xml.Linq; 
using System.Diagnostics; 

namespace ConsoleApplication2 { 
    class Program { 
     static void Main(string[] args) { 
      // XML text reader stuff 
      //XmlReader textReader = XmlReader.Create("http://www.newyorkfed.org/markets/seclend/xml/v3_0/secLendingXML.cfm"); 
      XmlTextReader textReader = new XmlTextReader("http://www.newyorkfed.org/markets/seclend/xml/v3_0/secLendingXML.cfm"); 
      //SyndicationFeed feed = SindicationFeed.Load(textReader); 
      //XmlTextReader textReader = new XmlTextReader("LOCATION"); 
      //string[] Fed_Array = new string[] {"Actual Available to Borrow", "Outstanding Loans", 
      //"Par Submitted", "Par Accepted", "WTD Average Rate"}; 
      int j = 0; 
      int icount = 0; 
      using(StreamWriter writer = new StreamWriter("LOCATION")) 
      //using (StreamWriter writer = new StreamWriter("LOCATION"))  
      while (textReader.Read()) { 
       switch (textReader.NodeType) { 
       case XmlNodeType.Element: 
        for (int i = 0; i < textReader.AttributeCount; i++) { 
         textReader.MoveToAttribute(i); 
         switch (textReader.Name) { 
         case "securityMaturityDate": 
          string textvalmatd = textReader.Value; 
          if (i == 0 && icount == 0) { 
           writer.Write("N/A,"); 
           Console.Write("N/A,"); 
           icount = 1; 
           i = -1; 
          } else { 
           writer.Write(textvalmatd + ","); 
           Console.Write(textvalmatd + ","); 
           icount = 0; 
          } 
          break; 
         case "couponRate": 
          string textvalcoup = textReader.Value; 
          writer.Write(textvalcoup + ","); 
          Console.Write(textvalcoup + ","); 
          break; 
         case "securityType": 
          string textvalsec = textReader.Value; 
          writer.Write(textvalsec + ","); 
          Console.Write(textvalsec + ","); 
          j = 0; 
          break; 
         case "value": 
          string textval = textReader.Value; 
          writer.Write(textval + ","); 
          Console.Write(textval + ","); 
          j = j + 1; 
          if (j > 4) { 
           writer.Write(Environment.NewLine); 
           Console.Write(Environment.NewLine); 
          } 
          break; 

         } 
        } 
        break; 
       } 
      } 
     } 

     private static IDisposable StreamWriter(string p) { 
      throw new NotImplementedException(); 
     } 
    } 
} 

回答

2

除非美聯儲提供了某種事件,指示的是一個新的文件都可以(我懷疑是這種情況),理論上最好的,你可以做的就是下載最新的XML文件,並檢查它是否是新的比前一個。

如果文件每天真的發佈一次,那麼您可以生成自己的統計信息,確切地說,該文件每天發佈。然後在圍繞典型發佈時間的窗口中加強輪詢(不過,請確保在輪詢頻率中不違反任何服務條款)。

+0

謝謝,這似乎是不幸的答案。 – weskpga 2012-07-16 18:20:15

相關問題