zoukankan      html  css  js  c++  java
  • 关于目前千团大战与我的一些事情

    美国空前成功的团购网站Groupon 获得巨大成功后,2010年新春以来 国内团购网站雨后春笋般的出现了,中国互联网领域突然掀起一股“团购网”创业热潮,上演了目前的千团大战。

    美团网、拉手、爱赴团、聚划算、米团网、窝窝团、赶团网、团宝网、可可网、七七团、KK团。。。。其中 拉手还获得了风投的亲睐,迅速将团购城市从北京伸向全国各大城市。

    本人是在今年4月知道团购这个模式的,起初也想弄一个团购站,但由于要上班,精力有限,还有秒杀网要弄,所以就没有弄团购站了。后来也不知道正在哪看到一个团购导航站点,该站点将其收录的所有团购站的团购信息集中到一块,方便用户查找浏览,我觉得这样挺好,接下来就开始了我的团购网站的开发,为了起个好听的名字,我就叫它"嗨团",是从淘宝网的嗨淘网联想的。

    各大有资源、有平台的门户站点也相继建立起团购站点,都来瓜分这个大蛋糕,腾讯QQ团、搜狐爱家团、新浪团、千橡集团的糯米团 等等。最后孰赢孰输,我想很快就能见分晓了。我们拭目以待。

    如果有兴趣的可以看看我的 嗨团网 域名 http://www.hituan.net/ 只可惜 .com的域名已经被注册了。

    从选择前台,到后台简单开发,用了一个晚上的时间,一直弄到凌晨3点半(杯具 第二天上班迟到,被扣了一百多)。

    本站的所用到的简单技术:

    1、数据缓存 网站自动定时更新

          从数据库读取数据放入cache 记录 并设置过期时间为5分钟后

    代码
      private double createTimeSpan = 300000;//默认为5分钟
            public void ProcessRequest(HttpContext context)
            {
                
    if (System.Web.HttpContext.Current.Cache.Get("createTime"!= null)
                {
                    DateTime createTime 
    = (DateTime)System.Web.HttpContext.Current.Cache.Get("createTime");
                    
    double.TryParse(System.Configuration.ConfigurationManager.AppSettings["createTimeSpan"].ToString(), out createTimeSpan);
                    TimeSpan sp 
    = DateTime.Now - createTime;
                    
    if (sp.TotalMilliseconds > createTimeSpan)
                    {
                        getItemList();
                    }
                }
                
    else
                {
                    getItemList();
                    context.Response.Write(
    "refresh");
                }
            }

      网站前台用Ajax去请求后台文件 每5分钟请求一次(即从API中抓取数据,入库以及更新团购成交量等信息)

          代码:

    代码
     1     function update() {
     2         $.get("UpdateItemList.ashx?rnd=" + Math.random() + """"
     3         function(r) {
     4             if (r == "refresh") {;
     5                 location.href = window.location.href
     6             }
     7         })
     8     }
     9     update();
    10     setInterval(update, 300000);        
     

    2、图片延时加载

      所有团购图片默认不显示,等网页加载完毕后用jQuery遍历去填充图片

    13     if(arrImg!=""){ //arrImg 在后台生成好,已经放到前台了。
    14         var arrImg=imgStr.split("|");
    15         var imgsrc=new Array();
    16         for(var i=0;i<arrImg.length;i++){
    17             imgsrc[i]=arrImg[i];
    18         }
    19         var img=new Image(267,160);
    20         $(function(){
    21             $('.bigImg').each(function(i){
    22                 $(this).get(0).style.display="none";
    23                 img.src="uploadfile/"+imgsrc[i];
    24                 $(this).attr("src",img.src);
    25                 $(this).get(0).style.display="block";
    26             });
    27         });
    28     }

    3、动态采集所有团购站的API数据

      分析API数据 并入库

        

    具体的API格式 可以看这个地方:http://www.hituan.net/API/api.xml

    从API采集数据入库
            /// <summary>
            
    /// 从已知的API获取数据
            
    /// </summary>
            
    /// <returns></returns>
            protected void getItemList()
            {
                DataTable dt 
    = null;
                
    using (DataSet ds = DataAccess.DbHelperSQL.Query("select distinct API,siteID from tbl_API where ispublic ='1'"))
                {
                    
    if (ds != null && ds.Tables[0].Rows.Count > 0)
                    {
                        dt 
    = new DataTable();
                        dt.Columns.Add(
    "siteID", Type.GetType("System.Int32"));
                        dt.Columns.Add(
    "itemURL", Type.GetType("System.String"));
                        dt.Columns.Add(
    "webSiteName", Type.GetType("System.String"));
                        dt.Columns.Add(
    "siteUrl", Type.GetType("System.String"));
                        dt.Columns.Add(
    "city", Type.GetType("System.String"));
                        dt.Columns.Add(
    "title", Type.GetType("System.String"));
                        dt.Columns.Add(
    "image", Type.GetType("System.String"));
                        dt.Columns.Add(
    "startTime", Type.GetType("System.String"));
                        dt.Columns.Add(
    "endTime", Type.GetType("System.String"));
                        dt.Columns.Add(
    "value"typeof(float));
                        dt.Columns.Add(
    "price"typeof(float));
                        dt.Columns.Add(
    "rebate"typeof(float));
                        dt.Columns.Add(
    "bought", Type.GetType("System.Int32"));
                        
    foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            
    string api = dr[0].ToString();
                            
    string siteID = dr[1].ToString();
                            
    if (string.IsNullOrEmpty(api)) { continue; }
                            
    string xmlInfo = getXmlFileString(api).ToLower();
                            
    if (string.IsNullOrEmpty(xmlInfo)) { continue; }
                            
    if (!string.IsNullOrEmpty(xmlInfo))
                            {
                                XmlDocument doc 
    = new XmlDocument();
                                
    try
                                {
                                    doc.LoadXml(xmlInfo);
                                }
                                
    catch
                                {
                                    
    continue;
                                }

                                XmlNodeList nodes 
    = doc.SelectNodes("/urlset/url");
                                
    if (nodes != null)
                                {
                                    
    foreach (XmlNode node in nodes)
                                    {
                                        XmlNode NodeItemURL 
    = node.SelectSingleNode("loc");
                                        XmlNode NodeWebsite 
    = node.SelectSingleNode("data/display/website");
                                        XmlNode NodeSiteUrl 
    = node.SelectSingleNode("data/display/siteurl");
                                        XmlNode NodeCity 
    = node.SelectSingleNode("data/display/city");
                                        XmlNode NodeTitle 
    = node.SelectSingleNode("data/display/title");
                                        XmlNode NodeImage 
    = node.SelectSingleNode("data/display/image");
                                        XmlNode NodeStartTime 
    = node.SelectSingleNode("data/display/starttime");
                                        XmlNode NodeEndTime 
    = node.SelectSingleNode("data/display/endtime");
                                        XmlNode NodeValue 
    = node.SelectSingleNode("data/display/value");
                                        XmlNode NodePrice 
    = node.SelectSingleNode("data/display/price");
                                        XmlNode NodeRebate 
    = node.SelectSingleNode("data/display/rebate");
                                        XmlNode NodeBought 
    = node.SelectSingleNode("data/display/bought");

                                        
    string itemURL = NodeItemURL.InnerText;//具体的团购地址 
                                        string webSiteName = NodeWebsite.InnerText; //网站名称
                                        string siteUrl = NodeSiteUrl.InnerText;//具体城市的站点地址
                                        string city = NodeCity.InnerText; //城市
                                        string title = NodeTitle.InnerText;//团购标题
                                        string image = NodeImage.InnerText;//图片
                                        string startTime = NodeStartTime.InnerText;//开始时间
                                        string endTime = NodeEndTime.InnerText;//结束时间
                                        string value = NodeValue.InnerText;////原价
                                        decimal price = Decimal.Parse(NodePrice.InnerText.Trim());//购买价格
                                        decimal rebate = 0;
                                        
    decimal.TryParse(NodeRebate.InnerText.Trim(), out rebate);//折扣
                                        int bought = Convert.ToInt32(NodeBought.InnerText.Trim());//已经购买人数
                                        DataRow drr = dt.NewRow();
                                        drr[
    "siteID"= siteID;
                                        drr[
    "itemURL"= itemURL;
                                        drr[
    "webSiteName"= webSiteName;
                                        drr[
    "siteUrl"= siteUrl;
                                        drr[
    "city"= city;
                                        drr[
    "title"= title;
                                        drr[
    "image"= image;
                                        drr[
    "startTime"= startTime;
                                        drr[
    "endTime"= endTime;
                                        drr[
    "value"= value;
                                        drr[
    "price"= price;
                                        drr[
    "rebate"= rebate;
                                        drr[
    "bought"= bought;
                                        dt.Rows.Add(drr);
                                    }
                                }
                            }

                        }
                        
    double.TryParse(System.Configuration.ConfigurationManager.AppSettings["createTimeSpan"].ToString(), out createTimeSpan);
                        System.Web.HttpContext.Current.Cache.Add(
    "createTime", DateTime.Now, null, DateTime.Now.AddMilliseconds(createTimeSpan), TimeSpan.Zero, System.Web.Caching.CacheItemPriority.Normal, null);
                        UpdateDataBase(dt);
                    }
                    
    if (dt != null)
                    {
                        dt.Dispose();
                    }

                }
              
            }

    5、首页团片展示 随即动态提取

        随即的从数据库中提取正在团购的信息。

    前台展示的方法:

    代码
     1         private void getItemList()
     2         {
     3             DataTable dt = null;
     4             if (System.Web.HttpContext.Current.Cache.Get("ItemList"!= null)
     5             {
     6                 dt = (DataTable)System.Web.HttpContext.Current.Cache.Get("ItemList");
     7             }
     8             else
     9             {
    10                 int dataGridNum = 33;//团片展示显示的个数默认为33个
    11                 if (System.Web.HttpContext.Current.Cache.Get("datagridNum"!= null)
    12                 {
    13                     dataGridNum = (int)System.Web.HttpContext.Current.Cache.Get("datagridNum");
    14                 }
    15                 else
    16                 {
    17                     int.TryParse(System.Configuration.ConfigurationManager.AppSettings["datagridNum"].ToString(), out dataGridNum);
    18                     System.Web.HttpContext.Current.Cache.Add("dataGridNum", dataGridNum.ToString(), null, DateTime.Now.AddHours(1), TimeSpan.Zero, System.Web.Caching.CacheItemPriority.Normal, null);
    19 
    20                 }
    21                 string SQL = @"select top " + dataGridNum.ToString() + " list.*,site.sitename  from tbl_itemlist list left join tbl_siteList site on list.siteid=site.id where closeDate>getdate() and picpath<>'' Order By NewID() asc,price asc";
    22                 using (DataSet ds = DataAccess.DbHelperSQL.Query(SQL))
    23                 {
    24                     if (ds != null && ds.Tables[0].Rows.Count > 0)
    25                     {
    26                         
    27                         int createTimeSpan = 300000;//5分钟
    28                         if (System.Web.HttpContext.Current.Cache.Get("createTimeSpan"!= null)
    29                         {
    30                             createTimeSpan = Convert.ToInt32(System.Web.HttpContext.Current.Cache.Get("createTimeSpan").ToString());
    31                         }
    32                         else
    33                         {
    34                             int.TryParse(System.Configuration.ConfigurationManager.AppSettings["createTimeSpan"].ToString(), out createTimeSpan);
    35                             System.Web.HttpContext.Current.Cache.Add("createTimeSpan", createTimeSpan.ToString(), null, DateTime.Now.AddHours(1), TimeSpan.Zero, System.Web.Caching.CacheItemPriority.Normal, null);
    36                         }
    37                         dt = ds.Tables[0];
    38                         System.Web.HttpContext.Current.Cache.Add("ItemList", ds.Tables[0], null, DateTime.Now.AddMilliseconds(createTimeSpan), TimeSpan.Zero, System.Web.Caching.CacheItemPriority.Normal, null);
    39                     }
    40                 }
    41             }
    42             if (dt != null)
    43             {
    44                 this.rptItemList.DataSource = dt;
    45                 this.rptItemList.DataBind();
    46                 foreach (DataRow dr in dt.Rows) {
    47                     sb.Append(dr["PicPath"].ToString() + "|");
    48                 }
    49                 if (sb.Length < 1) {
    50                     sb.Append(" ");
    51                 }
    52             }
    53         }

    6、将Unix timestamp 时间戳与目前的时间格式如(2010-10-59 10:59:59)之间的相互转化

        我从有的团购站说 Unix timestamp 与具体的时间之间无法转化

    代码
           /// <summary>
            
    /// 根据时间戳返回团购具体的结束时间
            
    /// </summary>
            
    /// <param name="timeStamp"></param>
            
    /// <returns></returns>
            private string getRealTime(string timeStamp)
            {
                DateTime dtStart 
    = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(197011));
                
    long lTime = long.Parse(timeStamp + "0000000");
                TimeSpan toNow 
    = new TimeSpan(lTime);
                
    return dtStart.Add(toNow).ToString("yyyy-MM-dd hh:mm:ss");

            }
    代码
            private string DateString2TimeSpan(string DateString)
            {
                
    string querySQL = "select datediff(second,'1970/1/1 00:00:00','" + DateString + "')-8*60*60";
                
    return DataAccess.DbHelperSQL.GetSingle(querySQL).ToString();

            }
  • 相关阅读:
    优化!优化!
    JavaScript 错误
    js 学习总结
    JavaScript join() 方法
    JavaScript shift() 方法
    JavaScript split() 方法
    arTemplate解析语法
    getTime 方法
    PHP 5 数据类型
    thinkphp 实现微信公众号开发(二)--实现自定义菜单
  • 原文地址:https://www.cnblogs.com/chjf2008/p/1809005.html
Copyright © 2011-2022 走看看