// url - US date // .htm - UK format public List<string> GenerateLinks(JSONLinks jsl, int startyear, int ftsymbol, int interval) { string url1 = "http://markets.ft.com/RESEARCH/Remote/UK/InteractiveChart/DrawInteractiveChart?"; DateTime dstart; DateTime dend; DateTime now = DateTime.Now; if (startyear == 1) // check { Console.WriteLine("No date data: " + ftsymbol); return null; } dstart = new DateTime(startyear, 1, 1); dend = new DateTime(dstart.Year + interval, 1, 1); if (dend.Year >= now.Year) { dend = new DateTime(now.Year, 12, 31); } int counter = 0; List<string> urls = new List<string>(); // http://markets.ft.com/research/InteractiveChart?symbol=205778&options={"StartDate":"01/15/2008","EndDate":"06/24/2013","LowerIndicator":[{"Args":[{"Type":0,"Value":14}],"Code":21,"UID":696010770}],"UpperIndicator":[],"Overlay":[2,1,0],"ChartStyle":3,"ChartScale":1,"CursorStyle":1,"Interval":6,"Duration":10,"Comparison":[],"PortfolioName":null,"Width":950,"Height":400,"ActiveTool":null} // date format is US, even though in interactive format is UK for (; ; ) { string url2 = @"symbol=zzz&options={""StartDate"":""xxx"",""EndDate"":""yyy"",""LowerIndicator"":[],""UpperIndicator"":[],""Overlay"":[0,1,2],""ChartStyle"":3,""ChartScale"":1,""CursorStyle"":1,""Interval"":6,""Duration"":9,""Comparison"":[],""PortfolioName"":null,""Width"":950,""Height"":400,""ActiveTool"":null}"; url2 = url2.Replace("xxx", dstart.ToShortDateString()); url2 = url2.Replace("yyy", dend.ToShortDateString()); url2 = url2.Replace("zzz", ftsymbol.ToString()); string finalurl = url1 + url2; urls.Add(finalurl); JSONParam p = new JSONParam(); p.startdate = dstart; p.enddate = dend; p.url = finalurl; jsl.m_jsonparam.Add(p); dstart = dend; if (dstart.Year == now.Year && dstart.Month == 12 && dstart.Day == 31) break; else { dend = new DateTime(dstart.Year + interval, 1, 1); if (dend.Year >= now.Year) { dend = new DateTime(now.Year, 12, 31); } } counter++; } return urls; }
public void LoadAndAnalyze(string chartfile, int ftsymbol) { string data; try { data = File.ReadAllText(chartfile); } catch { return; } // date contained in json file is UK format // CreateSpecificCulture("fr-FR") - parse UK date format Match m = Regex.Match(data, @"data-uk-date=\\""true\\"" value=\\""(.+?)\\"""); // start date if (!m.Success) return; DateTime earliest = DateTime.Parse(m.Groups[1].Value, CultureInfo.CreateSpecificCulture("fr-FR")); bool skip = false; JSONLinks j = new JSONLinks(); j.FTid = ftsymbol; List<string> urls = GenerateLinks(j, earliest.Year, ftsymbol, 3); string dir = "JSON"; Directory.CreateDirectory(dir); for (int a = 0; a < urls.Count; a++) { StringBuilder s = new StringBuilder(); s.Append(dir + "\\"); s.Append(ftsymbol + "."); s.Append("json" + a + "."); s.Append("htm"); j.thispart = a; j.totalparts = urls.Count; if (forceoverwrite == false) { if (File.Exists(s.ToString())) { Console.WriteLine("Skipping: " + ftsymbol); skip = true; break; } } m_threaded.Queue(urls[a], s.ToString(), j); } if (skip == false) Console.WriteLine("Queued: " + ftsymbol + ", total parts: " + j.totalparts); }