第一次做采集Json的还简单一些但是XML的简直了.........
JSON
1 //采集数据 2 public string GetBetRecordToRepository()//随便你返回什么 3 { 4 try 5 { 6 DateTime startTime = DateTime.Now; 7 var Date = startTime; //日期中的时间段 8 string playDate = Date.ToString("yyyy-MM-ddTHH:mm:ss");//开始时间,设置时间格式 9 Date = Date.AddMinutes(-15);//时间间隔,有什么比限制15分钟采集一次,调试的时候返回空更丧的呢!! 10 string endDate = Date.ToString("yyyy-MM-ddTHH:mm:ss");//结束时间 11 int k = 0;//因为我是15分钟采集,所以设置变量确定时间 12 for (int j = 0; j < Time;)//Time是采集时间比如为48,那就是采集当前时间到昨天的当前时间 13 { 14 k += 1; 15 if (k == 4)//一小时 16 { 17 j += 1; 18 k = 0; 19 } 20 23 // //日期 24 // var Date = DateTime.Now.AddHours(Time); //打注释的是另一种方法使用do{}while()循环,注意我在写这个的时候为了区分所以do是从当前时间往回采集所以使用do应改为-15 25 //var NowDate = DateTime.Now; 26 ////日期中的时间段 27 //string playDate = Date.ToString("yyyy-MM-ddTHH:mm:ss");//开始时间 28 //Date = Date.AddMinutes(15); 29 //string endDate = Date.ToString("yyyy-MM-ddTHH:mm:ss");//结束时间 30 //do 31 //{ 32 //设置路径获取值 33 string PostUrl = "采集路径"; 34 string JsonStr = "采集参数"; 35 string retData = string.Empty; 36 retData = UtilsHelper.HttpWebRequest(PostUrl, JsonStr, Encoding.UTF8, contentType: "application/json", method: "POST");//请求服务器,详细请看我另一篇(.NET接入接口) 37 //判断返回值是否为空 38 if (retData != "[]")//判断根据自己的判断
39 { 40 //实例化表 41 42 string Sql = string.Empty; 43 string St = retData.ToString(); 44 var C = from c in St 45 where 46 c == '}' 47 select c; 48 int Count = C.Count();//获取返回Json个数 49 string S = retData; 50 int index1, index2;//记录Json开始和结束位置 51 string Str; 52 //循环取值 53 for (int i = 0; i < Count; i++) 54 { 55 index1 = S.IndexOf("{"); 56 index2 = S.IndexOf("}"); 57 Str = S.Substring(index1, index2 - i); 58 S = S.Replace(Str, ""); 59 JObject jo = (JObject)JsonConvert.DeserializeObject(Str);//将返回的字符串转换为Jaon格式 60 Table Bmodel = new Table();//实例化一个表
Bmodel.id=Convert.toInt32(jo["id"].tostring()); 62 Bmodel.username = jo["name"].ToString();
............................................ 93 //生成SQl语句,查看是否已经有该数据 94 Sql = "select count(*) from Table where ID='" + Bmodel.id + "'"; 95 if (Convert.ToInt32(DbHelperSQL.GetSingle(Sql)) == 0) 96 { 97 Sql = "INSERT INTO Table(ID,username,....." + 99 "VALUES("+Bmodel.id+",'"+Bmodel.username+"',......)";//注意将值的类型与数据库对应 104 } 105 else 106 { 107 Sql = "UPDATE AGBetOrder SET username='" + Bmodel.username + "',...... where ID=" + Bmodel.id ; 108 }110 //执行SQl语句 111 DbHelperSQL.ExecuteSql(Sql); 112 } 113 } 114 //重新获取日期中的下一个时间段 115 playDate = Date.ToString("yyyy-MM-ddTHH:mm:ss");//开始时间 116 Date = Date.AddMinutes(-15); 117 endDate = Date.ToString("yyyy-MM-ddTHH:mm:ss");//结束时间 118 119 //} while (Date < NowDate); 120 //return MSMPRetMsgFactory.SucceedMsg(); 121 } 122 } 123 catch (Exception ex) 124 { 125 LogHelper.WriteErrorLog(ex);//抓取错误 126 return "NO"; 127 } 128 return "OK"; 129 }
XML 1 public string GetBetRecordToRepository 2 { 3 try
4 { 5 DateTime startTime = DateTime.Now;//当前时间 6 for (int i = 0; i < Time; i += 4)//时间段 7 { 8 startTime = startTime.AddHours(-4); 9 DateTime endTime = startTime.AddHours(4); 10 11 string url = "采集地址"; 12 string retData = UtilsHelper.HttpWebRequest(url, null, Encoding.UTF8);
XmlDocument a = new XmlDocument(); 23 a.LoadXml(retData); 24 XmlNode inputNode; 25 string SQL_base; 26 string Str = retData; 27 string r = Str.Replace("normal_wager_", ""); 28 int count = ((Str.Length - r.Length) / 13) / 2; 29 30 if (retData.IndexOf("success") > 0) 31 { 32 //创建一个实体类 33 STable Smodel = new STable(); 34 //创建一个XmlDocument类型数据 35 XmlDocument XmlD = new XmlDocument(); 36 XmlD.LoadXml(retData); 37 inputNode = XmlD.SelectSingleNode("success"); 38 //获取节点,将节点转换为元素,便于得到节点的属性值 39 XmlNodeList XnA = inputNode.ChildNodes;//1 40 XmlNodeList XnB = XnA.Item(1).ChildNodes; 41 //取值放入实体类 42 Smodel.request_tid = Convert.ToInt32(XnB.Item(0).InnerText);//搜索起点 43 Smodel.latest_tid = XnB.Item(1).InnerText;//搜索起点 44 //获取节点,将节点转换为元素,便于得到节点的属性值 46 XnB = XnA.Item(4).ChildNodes; 47 XmlNodeList XnC = XnB.Item(0).ChildNodes;//3.1 48 //取值放入实体类 49 Smodel.normal_parlay = XnC.Item(0).InnerText;//普通注单/过关注单 50 for (int j = 1; j <= count; j++) 51 { 52 XnB = XnA.Item(2).ChildNodes; 53 //取值放入实体类 54 Smodel.total_wager = Convert.ToInt32(XnB.Item(1).InnerText) + j - 1;//注单总数 55 56 //创建一个实体类 57 STable Smodel2 = new STable(); 58 59 //获取节点,将节点转换为元素,便于得到节点的属性值 60 XmlNodeList XnD = XnC.Item(j).ChildNodes;//3.2 61 //取值放入实体类 62 Smodel2.play_type = XnD.Item(0).InnerText;//游戏编号
.......................................................
101 //生成Sql语句 102 SQL_base = "SELECT COUNT(*) from STable WHERE transactionid='" + Smodel2.transactionid + "'";//查询是否已经有这一条记录 103 if (Convert.ToInt32(DbHelperSQL.GetSingle(SQL_base)) == 1) 104 SQL_base = "UPDATE STable set request_tid=" + Smodel.request_tid + ",............."; 105 else 106 SQL_base = "insert into STable(................)VALUES(............)";108 //执行SQl语句 109 DbHelperSQL.ExecuteSql(SQL_base); 110 } 111 } 112 } 113 } 114 catch (Exception err) 115 { 116 LogHelper.WriteErrorLog(err); 117 } 118 return MSMPRetMsgFactory.SucceedMsg(); 119 }
PS:Json呢是直接就键值对取值,XML呢要一层一层的分开取值,绕得晕乎乎的,小菜一只,请多多指教