/// <summary> /// 淘宝取价 /// </summary> /// <param name="time">出发时间</param> /// <param name="defCity">出发城市码</param> /// <param name="arrCity">目的城市码</param> /// <param name="hs">航司</param> /// <param name="platid">平台</param> private static void GetPrice(string time, string defCity, string arrCity, string hs, int platid) { var data = new CatchData(); data.Flight = new FlightInfo(); data.Flight.DepDate = time; data.Flight.CatchDate = DateTime.Now; data.Flight.AirLine = defCity + arrCity; data.Flight.PlatId = 1; var str = String.Empty; var url = String.Format( "https://sijipiao.alitrip.com/ie/flight_search_result_poller.do?_ksTS=1474957255322_582&callback=jsonp583&supportMultiTrip=true&searchBy=1280&searchJourney=%5B%7B\"arrCityCode\"%3A\"{0}\"%2C\"arrCityName\"%3A\"%25E6%25BE%25B3%25E9%2597%25A8\"%2C\"depCityCode\"%3A\"{1}\"%2C\"depCityName\"%3A\"%25E5%25B9%25BF%25E5%25B7%259E\"%2C\"depDate\"%3A\"{2}\"%2C\"selectedFlights\"%3A%5B%5D%7D%5D&tripType=0&searchCabinType=0&agentId=-1&searchMode=0&b2g=0&formNo=-1&cardId=&needMemberPrice=true", arrCity, defCity, time); // 取航班号相关数据 str = TryTimeSpan(str, url); var index1 = str.IndexOf("flightItems", StringComparison.Ordinal); var index2 = str.IndexOf("acceptFilters", StringComparison.Ordinal); var start = str.Substring(index1 + 14); var end = str.Substring(index2); str = start.Replace(end, ""); str = "{\"data\":[" + str.Substring(0, str.Length - 3) + "]}"; var obj = JsonHelper.JsonToObject <Rootobject>(str); // 取航班下的代理信息及价格信息 foreach (var item in obj.data) { var uniqKey = item.uniqKey; if (uniqKey.Contains(defCity + arrCity) && hs.Contains(uniqKey.Substring(0, 2))) { var flightNo = uniqKey.Replace(uniqKey.Substring(uniqKey.IndexOf(defCity + arrCity, StringComparison.Ordinal)), ""); Console.WriteLine("-----------------------------{0}------------------------", flightNo); data.Flight.FlightNum = flightNo; data.Flight.CarrierCode = uniqKey.Substring(0, 2); data.AgentList = new List <FlightAgentInfo>(); var startTime = TimeHelper.UnixTimestampToDateTime(item.depTimeStamp).ToShortTimeString().Replace(":", "%3A"); startTime = time + "%20" + startTime + "%3A00"; url = String.Format( "https://sijipiao.alitrip.com/ie/flight_search_result_poller.do?plk=%2522eyJfcWlkIjoiMGE2N2JjYWUxNDc0OTY1NTAyMzk4NDg1MGUiLCJfc2tleSI6IjE5MmVkMGNlNzhlODQwMjJhZDFlOWI2NDE0ZjM5ZTVjIn0%253D%2522&_ksTS=1474965493066_2274&callback=jsonp2275&supportMultiTrip=true&searchBy=1280&searchJourney=%5B%7B%22arrCityCode%22%3A%22{0}%22%2C%22arrCityName%22%3A%22%25E5%2590%2589%25E9%259A%2586%25E5%259D%25A1%22%2C%22depCityCode%22%3A%22{1}%22%2C%22depCityName%22%3A%22%25E5%25B9%25BF%25E5%25B7%259E%22%2C%22depDate%22%3A%22{2}%22%2C%22selectedFlights%22%3A%5B%7B%22marketFlightNo%22%3A%22{3}%22%2C%22flightTime%22%3A%22{4}%22%7D%5D%7D%5D&tripType=0&searchCabinType=0&agentId=-1&searchMode=2&b2g=0&formNo=-1&cardId=&needMemberPrice=true", arrCity, defCity, time, flightNo, startTime); var json = String.Empty; // 提取与价格相关数据 json = TryTimeSpan(json, url); index1 = json.IndexOf("productItems", StringComparison.Ordinal); index2 = json.IndexOf("flightInfos", StringComparison.Ordinal); start = json.Substring(index1 - 1); end = json.Substring(index2 - 2); json = start.Replace(end, ""); json = "{" + json + "}"; // 将json字符串转为对象obj obj = JsonHelper.JsonToObject <Rootobject>(json); int i = 0; // 循环取代理价格 foreach (var pro in obj.productItems) { i++; data.AgentList.Add(new FlightAgentInfo() { AgentPrice = pro.totalAdultPrice, AgentName = pro.agentInfo.showName, AgentRank = i }); // 提取"一路无忧"的价格和排名 if (pro.agentInfo.showName.Contains("一路无忧")) { data.Flight.Rank = i; data.Flight.Price = pro.totalAdultPrice / 100; } Console.WriteLine(pro.agentInfo.showName + "----" + pro.totalAdultPrice / 100 + "----Rank----" + i); } if (data.AgentList.Count != 0) { //序列化对象data str = JsonHelper.ObjectToJson(data); //传数据 SendDataToAdjustPrice(str, platid); } } } }
/// <summary> /// 请求取价 /// </summary> /// <param name="time">出发时间</param> /// <param name="defCity">出发城市码</param> /// <param name="arrCity">目的城市码</param> /// <param name="platid">平台</param> /// <param name="hs">航司</param> private static void RequestPrice(string time, string defCity, string arrCity, int platid, string hs) { // 对象 Dictionary <string, object> obj; // 请求地址 string url; // 响应内容 string str; // cookie内容 var cc = new CookieContainer(); var tryTime = 3; Dictionary <string, FlightNum> flightInfo = null; var data = new CatchData(); data.Flight = new FlightInfo(); data.Flight.DepDate = time; data.Flight.CatchDate = DateTime.Now; data.Flight.AirLine = defCity + arrCity; data.Flight.PlatId = platid; // 取航班信息 while (tryTime > 0) { obj = GetFlightNo(defCity, arrCity, time, hs); var aircraft = JsonHelper.ObjectToJson(obj); flightInfo = JsonHelper.JsonToObject <Dictionary <string, FlightNum> >(aircraft); if (flightInfo.Count != 0) { break; } tryTime--; } #region 循环请求航班取价 for (var i = 0; i < flightInfo.Count; i++) { // 航班号 var flightNo = flightInfo.Values.ToList()[i].segs.Values.ToList()[0].co; Console.WriteLine("-----------------------取到航班号:{0}--------------------", flightNo); // 请求退改签URL参数:pt //var pt = flightInfo.Values.ToList()[i].segs.Values.ToList()[0].pt; data.AgentList = new List <FlightAgentInfo>(); data.Flight.FlightNum = flightNo; data.Flight.CarrierCode = flightInfo.Values.ToList()[i].segs.Values.ToList()[0].ca; url = "http://www.qunar.com"; GetString(url, cc); url = "http://www.qunar.com/twell/cookie/allocateCookie.jsp"; GetString(url, cc); // 代理、价格信息字符串 object pdata = null; while (tryTime > 0) { url = "http://flight.qunar.com/twelli/flight/tags/onewayflight_groupinfo_inter.jsp?&departureCity={0}&arrivalCity={1}&departureDate={2}&returnDate={2}&nextNDays=0&searchType=OneWayFlight&searchLangs=zh&prePay=true&lowReservation=true&locale=zh&from=zdzl&lowestPrice=null&mergeFlag=0&ftime=&fcarrier={3}&fdirect=true&fcity=&fplaneType=&farrAirport=&fdepAirport=&queryID=10.88.170.0%3A-7a4dcf57%3A157416fb45e%3A-793b&serverIP=4hMfchclOOg3ioyJGdUxOxYCG4QhuEQLrX93DLV9rQgVA3TSvGLpcQ%3D%3D&status=1474272625966&_token=57124&deduce=true&flightCode={4}%7C{2}&tabKey=ap&actCode="; url = string.Format(url, defCity, arrCity, time, hs, flightNo); str = GetString(url); str = str.Substring(str.IndexOf("(", StringComparison.Ordinal) + 1).Replace(")", ""); obj = JsonHelper.JsonToObject <Dictionary <string, object> >(str); pdata = str.Contains("priceData") ? obj["priceData"] : null; if (pdata != null) { break; } tryTime--; Thread.Sleep(TimeSpan.FromSeconds(3)); } if (pdata == null) { Console.WriteLine("No Price---------" + flightNo); continue; } // TKP-小骆驼,LPP-低价特惠套餐,LPN-低价特惠 var js = JsonHelper.ObjectToJson(pdata); // priceData 位置 var p = js.Substring(js.IndexOf("A\":", StringComparison.Ordinal) + 3); var res = p.Substring(0, p.Length - 2); var priceData = JsonHelper.JsonToObject <Dictionary <string, FlightBagPrice> >(res); if (priceData.Count == 0) { Console.WriteLine("-------------- No Price Data !!!!!!!!!!!!!!!!!!!!!!!!! " + flightNo); continue; } // 需要排除的字符 var excluedList = new[] { "TPK", "LPP", "LPN" }; foreach (var flightBagPrice in priceData) { var flagstr = flightBagPrice.Key; var bagPrice = flightBagPrice.Value; //var warrpid = flagstr.Split('_')[0]; //var cabin = bagPrice.cabin; // 筛选出符合条件的代理的价格 if (flagstr.StartsWith("tt")) { if (excluedList.Any(flagstr.Contains) || (bagPrice.pinfo == null)) { continue; } // 代理名 var pro = bagPrice.pack == 0 ? "代理" : "打包:" + bagPrice.packWrapperName; //var tag = platid == 2 ? "。T" : "。Z"; //// 退改签 //var tgq = string.Empty; //while (tryTime > 0) //{ // tgq = Tgq(warrpid, bagPrice.pinfo, defCity, arrCity, time, flightNo, cc, pt, cabin); // if (!tgq.Contains("isLimit")) // { // Console.WriteLine("Get TGQ Rule...."); // break; // } // Console.WriteLine("Not Get TGQ Rule!!!!!!"); // Thread.Sleep(TimeSpan.FromSeconds(5)); // tryTime--; //} //// //var rank = tgq.Contains(tag) ? -1 : 0; // 总价 var price = bagPrice.bpr == 0 ? bagPrice.npr + bagPrice.tax : bagPrice.bpr + bagPrice.tax; Console.WriteLine("{0}:价格{1}", pro, price); data.AgentList.Add(new FlightAgentInfo { AgentName = pro, AgentPrice = price, AgentRank = 0 }); Thread.Sleep(TimeSpan.FromSeconds(1)); } } #endregion 循环请求航班取价 if (data.AgentList.Count != 0) { //序列化对象data str = JsonConvert.SerializeObject(data); //传数据 SendDataToAdjustPrice(str, platid); } } }