0

Webサイト上のXMLファイルの変更のポーリングまたは検出について質問があります。私は以下のかなりハードコーディングされたシステムを持っており、ニューヨーク連銀から毎日の証券貸付に関するXMLファイルを読み取ります。それはうまく機能していて、私はそれで問題はありません。私の主な質問は、平日の変更についてWebサイトをどのようにポーリングするかです。XMLファイルの「LastModified」フィールド(この場合は「Prepared」フィールド)を確認できることは理解していますが、実際に変更が加えられたときにこれを行う方法に興味があります。 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();
        }
    }
}
4

1 に答える 1

2

FRBが新しいファイルが利用可能であることを示す何らかのイベントを提供しない限り(これは事実ではないと思います)、理論的に最善の方法は、最新のXMLファイルをダウンロードして、以前のファイルよりも新しいかどうかを確認することです。

ファイルが実際に1日に1回リリースされる場合は、ファイルが毎日リリースされる正確な時期に関する独自の統計を生成できます。その典型的なリリース時間を取り巻くウィンドウでポーリングを強化します(ただし、ポーリング頻度の利用規約に違反しないようにしてください)。

于 2012-07-16T17:53:49.913 に答える