示例#1
0
        /// <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);
                    }
                }
            }
        }
示例#2
0
        /// <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);
                }
            }
        }