足球彩票指数及比分数据采集系统
前言
很多朋友喜欢足彩,面对网站每期大量对阵却苦于无法找到一种稳定下注的方法,其实开盘指数及临场前指数的变化,各种蕴藏玄机,本系统采集新浪足彩每期指数,生成各种指数数据,并形成每期报表,便于下注者投注参考。通过本系统可生成球队所有对阵比赛数据、及其赢盘指数规律数据,数据可以导出excel表格,方便使用者二次提取。
运行程序链接:https://pan.baidu.com/s/1yETSldYwSv8kf5NIqGvasA%20
提取码:ddxq
界面
功能实现
1.网页抓取
通过网页抓取,提取每期开盘及最新变动指数、赢盘指数、比分数据
主要代码:(贴代码比写文字简单,有兴趣的看注解吧)
1 {/** 2 3 Date:2014-3-20 4 5 Author:吴chunyuan转载请注明出处 6 7 **/} 8 9 procedure TFxlcj.Caiji_xl(OperNum:integer); {本程序主要处理环节: 采集新浪数据 0-初始化 1-盘中 体球网采集:3-联赛球队 4-期数系列 } 10 var Rp_Count,Get_Web,LineCount,c,i,j,backStart,Count_ws ,Count_qx:integer; 11 ThreadId1:DWORD; 12 Ret_Get_bszl:TArr; 13 // Fmt :TCharFormat2; 14 begin 15 Get_Web:=1; 16 if Eqhao.Text='' then 17 begin 18 if OperNum<4 then 19 begin 20 SendtoMain('采集窗口提示:请输入期号如130808'); 21 exit; 22 end; 23 end; 24 25 Csh_qpfx(OperNum); {初始化期号} 26 Edit2.CopyToClipboard; //将剪切板初始化 27 sleep(20); 28 RichEdit1.PlainText := true; 29 //WebBrowser1.SetFocus; 30 31 { if WebBrowser1.ReadyState > READYSTATE_LOADING then 32 begin 33 WebBrowser1.stop; 34 WebBrowser1.SetFocus; 35 end else 36 begin 37 SendtoMain('取网页异常,请重来1!'); 38 exit; 39 end; 40 } 41 WebBrowser1.SetFocus; 42 43 Rp_Count:=0; {初始化重负复制网页的次数,因为有时复制不成功 上限20次} 44 45 Repeat {复制网页以提取数据} 46 47 try 48 webbrowser1.ExecWB(OLECMDID_SELECTALL,0); 49 webbrowser1.ExecWB(OLECMDID_COPY,0); 50 // WebBrowser1.ExecWB(OLECMDID_UNDO, 0); 51 Get_Web:=0; 52 except 53 SendtoMain('复制网页异常,请重来!'); 54 Get_Web:=1; 55 end; 56 57 if Get_Web=0 then 58 begin 59 richedit1.Lines.Clear; 60 //richedit1.SetFocus; 61 richedit1.PasteFromClipboard; 62 WebBrowser1.ExecWB(OLECMDID_UNDO, OLECMDEXECOPT_DODEFAULT); //取消全选 63 c:=0; {寻找选择区域的起点位置} 64 // backStart := RichEdit1.SelStart; //备份光标位置 65 RichEdit1.SelStart := c; //寻找选择区域的起点位置 66 // initializeCriticalSection(CS); //没初始化会 提示访问ntdll.dll模块出错 67 LineCount:=RichEdit1.Lines.Count; 68 SendtoMain('采集失败,请重来!'); 69 end; 70 Rp_Count:=Rp_Count+1; 71 until ((LineCount>100) or (Rp_Count>2) ); //重复不超2次 72 73 { 74 75 WebBrowser1.ExecWB(OLECMDID_SELECTALL, OLECMDEXECOPT_DODEFAULT); //全选网页 76 WebBrowser1.ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT); //复制网页 77 WordDocu.Range.Paste; //word文档粘贴 78 WebBrowser1.ExecWB(OLECMDID_UNDO, OLECMDEXECOPT_DODEFAULT); //取消全选 79 } 80 81 if Rp_Count>20 then exit; 82 83 {采集期数序列} 84 85 setlength(Ret_Get_bszl,18); {初始化数组} 86 87 if OperNum=4 then //取期号序列 88 begin 89 for i:=10 to 50 do 90 begin 91 Ret_Get_bszl:=Get_bszl(2,i); 92 if (Ret_Get_bszl[0]<>'1.0') and (length(Ret_Get_bszl[0])=6) then 93 begin 94 Eqhao.Text:=Ret_Get_bszl[0]; 95 ComboBox2.Items.Clear; 96 for j:=0 to 9 do 97 ComboBox2.Items.Add(Ret_Get_bszl[j]); 98 ComBobox2.ItemIndex:=0; 99 //Memo1.Lines.Clear; 100 SendtoMain('取期号序列成功:'); 101 SendtoMain(Ret_Get_bszl[0]+' '+Ret_Get_bszl[1]+' '+Ret_Get_bszl[2]+' '+Ret_Get_bszl[3]+' '+Ret_Get_bszl[4]+' '+Ret_Get_bszl[5]+' '+Ret_Get_bszl[6]+' '+Ret_Get_bszl[7]+' '+Ret_Get_bszl[8]+' '+ Ret_Get_bszl[9]); 102 exit; 103 end; 104 end; 105 end; 106 107 {开始采集数据} 108 if OperNum<4 then 109 begin 110 if OperNum=0 then 111 SendtoMain('初始化采集中....') else 112 SendtoMain('盘中采集中....'); 113 Count_ws:=0; //未赛场数 114 Count_qx:=0; 115 for i:=0 to LineCount-1 do 116 begin 117 118 j:=Caiji_xl_cjoneline(OperNum,i); 119 if j=0 then Count_ws:=Count_ws+1; 120 if j=2 then Count_qx:=Count_qx+1; 121 sleep(5); 122 application.ProcessMessages; //使用简单多线程 123 124 end; 125 if Count_ws>0 then 126 SendtoMain('采集完毕,未赛场数:'+inttostr(Count_ws-1)+',取消场数:'+inttostr(Count_qx)) else 127 SendtoMain('采集失败!'); 128 129 130 131 end; 132 133 RichEdit1.SelStart := backStart ; //恢复光标位置 134 //webbrowser1.SetFocus; 135 // WebBrowser1.ExecWB(OLECMDID_UNDO,0); // OLECMDEXECOPT_DODEFAULT 136 end; 137 138 主要过程、函数:(贴两个好了。。) 139 140 function TFxlcj.Caiji_xl_cjoneline(OperNum:integer;Num:integer):integer; //返回 0- 无比分 1-有比分 2-取消 3-其他 141 var rs,i:integer; 142 Ret_Get_bszl,sparr:TArr; 143 fMainMessage,s,strpk,strbf,strypoz,strypsp:string; 144 begin 145 // EnterCriticalSection(CS); 146 rs:=3; 147 setlength(Ret_Get_bszl,18); 148 i:=Num; 149 Ret_Get_bszl:= Get_bszl(1,i); {取每条比赛记录,返回个字段值} 150 151 {取期号,没用到 if ( i>=24) and (i<=24) then 152 begin 153 strno:=GetFieldValue(' ',richedit1.Lines.Strings[i],1); 154 end;} 155 156 if i>=130 then //从网页131行开始取比赛资料 157 begin 158 if length(Ret_Get_bszl[1])=1 then {是比赛记录 将进行:取数-插入bslsz } 159 begin 160 g_IfInsert:=IfInsert_bslsz(Ret_Get_bszl[0],Ret_Get_bszl[3],Ret_Get_bszl[5]); 161 if g_IfInsert<0 then exit; 162 163 if Ret_Get_bszl[9]<>'' then {无比分} 164 begin 165 rs:=0; 166 //SendtoMain(strdate+','+str2+','+str3+','+str4+','+str5+','+str6+','+str7+','+str81+','+str82+','+str83+','+str10+','+str11+','+str12); 167 try 168 if g_IfInsert=0 then 169 s := Format('insert into bslsz (bsrq,xh,bssj,lsmc,zd,rangqiu,kd,sp1,sp2,sp3,xsp1,xsp2,xsp3,qhao) values (%s,%d,%s,%s,%s,%d,%s,%f,%f,%f,%f,%f,%f,%s)', 170 ['#'+Ret_Get_bszl[0]+'#',strtoint(Ret_Get_bszl[2]),quotedstr(Ret_Get_bszl[4]),quotedStr(Ret_Get_bszl[3]),quotedStr(Ret_Get_bszl[5]),strtoint(Ret_Get_bszl[6]),quotedStr(Ret_Get_bszl[7]),strtofloat(Ret_Get_bszl[8]),strtofloat(Ret_Get_bszl[9]),strtofloat(Ret_Get_bszl[10]),strtofloat(Ret_Get_bszl[14]),strtofloat(Ret_Get_bszl[15]),strtofloat(Ret_Get_bszl[16]),Quotedstr(Eqhao.Text)]); 171 g_insertflag:=1; 172 173 except 174 //exit; 175 g_insertflag:=0; 176 SendtoMain('无SP'); 177 end; 178 179 if ( (g_IfInsert>0) and (OperNum=0)) or (OperNum=1) then {无比分,更新最新xsp--重新初始化 } 180 Update_sp(Ret_Get_bszl[0],Ret_Get_bszl[3],Ret_Get_bszl[5],Ret_Get_bszl[8],Ret_Get_bszl[9],Ret_Get_bszl[10],Ret_Get_bszl[14],Ret_Get_bszl[15],Ret_Get_bszl[16],OperNum); {修改xsp1,xsp2,xsp3} 181 182 {OperNum=1 无比分,更新最新xsp--盘中 } 183 {修改xsp1,xsp2,xsp3} 184 end; 185 186 187 if Ret_Get_bszl[9]='' then {有比分} 188 begin 189 rs:=1; 190 try 191 strpk:= Return_pank(strtoint(Ret_Get_bszl[6]),strtoint(Ret_Get_bszl[8]),strtoint(Ret_Get_bszl[10])); 192 strbf:= Return_bf(strtoint(Ret_Get_bszl[8]),strtoint(Ret_Get_bszl[10])); 193 except 194 SendtoMain('errcode:2,'+Ret_Get_bszl[5]); 195 exit; 196 end; 197 198 //SendtoMain(Ret_Get_bszl[0]+','+Ret_Get_bszl[2]+','+Ret_Get_bszl[3]+','+Ret_Get_bszl[4]+','+Ret_Get_bszl[5]+','+Ret_Get_bszl[6]+','+Ret_Get_bszl[7]+','+Ret_Get_bszl[8]+':'+Ret_Get_bszl[10]+','+Ret_Get_bszl[11]+','+Ret_Get_bszl[12]+','+Ret_Get_bszl[13]+','+Ret_Get_bszl[14]+','+Ret_Get_bszl[15]+','+Ret_Get_bszl[16]+strpk+','+strbf); 199 fMainMessage:=Ret_Get_bszl[2]+' '+Ret_Get_bszl[3]+' '+Ret_Get_bszl[5]+'--'+Ret_Get_bszl[7]+' '+Ret_Get_bszl[8]+':'+Ret_Get_bszl[10]+' '+strpk+','+strbf; 200 SendtoMain(fMainMessage); 201 if g_IfInsert=0 then 202 try 203 204 s := Format('insert into bslsz (bsrq,xh,bssj,lsmc,zd,rangqiu,kd,zdrq,kdrq,sp1,sp2,sp3,xsp1,xsp2,xsp3,pjg,bfjg,qhao) values (%s,%d,%s,%s,%s,%d,%s,%d,%d,%f,%f,%f,%f,%f,%f,%s,%s,%s)', 205 ['#'+Ret_Get_bszl[0]+'#',strtoint(Ret_Get_bszl[2]),quotedstr(Ret_Get_bszl[4]),quotedStr(Ret_Get_bszl[3]),quotedStr(Ret_Get_bszl[5]),strtoint(Ret_Get_bszl[6]),quotedStr(Ret_Get_bszl[7]),strtoint(Ret_Get_bszl[8]),strtoint(Ret_Get_bszl[10]),strtofloat(Ret_Get_bszl[11]),strtofloat(Ret_Get_bszl[12]),strtofloat(Ret_Get_bszl[13]),strtofloat(Ret_Get_bszl[14]),strtofloat(Ret_Get_bszl[15]),strtofloat(Ret_Get_bszl[16]),quotedStr(strpk),quotedStr(strbf),Quotedstr(Eqhao.Text)]); 206 207 except 208 showmessage('e:'+s); 209 exit; 210 end; 211 212 if g_IfInsert>0 then 213 begin 214 setlength(sparr,13); 215 sparr:=Bslsz_sp(Ret_Get_bszl[0],Ret_Get_bszl[3],Ret_Get_bszl[5]); { sp1,nsp1,sp2,nsp2,sp3,nsp3,xsp1,nxsp1,xsp2,nxsp2,xsp3,nxsp3} 216 //SendtoMain(sparr[0]); 217 if strpk='赢' then {取最新SP 如果数据库最新 sp 或欧指为-1.0 取网页最新值 2013-7-30 } 218 begin strypoz:=Ret_Get_bszl[11]; strypsp:=Ret_Get_bszl[14]; end; 219 220 221 if strpk='平' then 222 begin strypoz:=Ret_Get_bszl[12]; strypsp:=Ret_Get_bszl[15]; end; 223 224 if strpk='负' then 225 begin strypoz:=Ret_Get_bszl[13]; strypsp:=Ret_Get_bszl[16]; end; 226 227 if strpk='取消' then 228 begin rs:=2;strypoz:='-1.0'; strypsp:='-1.0'; end; {2013-11-4增加,否则Update_bslsz 无数据,出错} 229 230 231 try 232 Update_bslsz(Ret_Get_bszl[0],Ret_Get_bszl[3],Ret_Get_bszl[5],strtoint(Ret_Get_bszl[8]),strtoint(Ret_Get_bszl[10]),strpk,strbf,strypsp,strypoz); 233 except 234 SendtoMain('errcode:update_bslsz'+strypsp+','+strypoz); 235 exit; 236 end; 237 end; 238 end; 239 240 if g_IfInsert=0 then 241 Insert_bslsz(s); 242 end;{插入结束} 243 // RichEdit1.SelLength := 0; //恢复选择 244 245 end; 246 result:=rs; 247 // LeaveCriticalSection(CS); 248 end; 249 250 251 252 253 Function TFxlcj.Get_bszl(Flag:Integer;Row:Integer):TArr; {取每行比赛资料,Flag=1比赛资料 2-取期序列} 254 var 255 str1,str2,str3,str4,str5,str6,str7,str8,str81,str82,str83,str9,str91,str92,str93,str10,str11,str12:string; 256 pos1:integer; 257 begin 258 259 str82:=''; 260 RichEdit1.SelLength := length(richedit1.Lines.Strings[Row]); //获得选择当前行的长度 261 str1:= GetFieldValue(' ',richedit1.Lines.Strings[Row],1); 262 str2:= GetFieldValue(' ',richedit1.Lines.Strings[Row],2); 263 if Flag=2 then {取期数系列} 264 begin 265 266 // SendtoMain(str1+','+str2); 267 268 Result[0]:='1.0'; 269 Result[1]:='1.0'; 270 Result[2]:='1.0'; 271 Result[3]:='1.0'; 272 Result[4]:='1.0'; 273 Result[5]:='1.0'; 274 Result[6]:='1.0'; 275 Result[7]:='1.0'; 276 Result[8]:='1.0'; 277 Result[9]:='1.0'; 278 Result[10]:='1.0'; 279 Result[11]:='1.0'; 280 Result[12]:='1.0'; 281 Result[13]:='1.0'; 282 Result[14]:='1.0'; 283 Result[15]:='1.0'; 284 Result[16]:='1.0'; 285 if copy(str2,1,4)='当前' then 286 begin 287 Result[0]:=str1; 288 Result[1]:=copy(str2,5,6); 289 Result[2]:=copy(str2,11,6); 290 Result[3]:=copy(str2,17,6); 291 Result[4]:=copy(str2,23,6); 292 Result[5]:=copy(str2,29,6); 293 Result[6]:=copy(str2,35,6); 294 Result[7]:=copy(str2,41,6); 295 Result[8]:=copy(str2,47,6); 296 Result[9]:=copy(str2,53,6); 297 298 end; 299 exit; 300 end; 301 302 303 str3:= GetFieldValue(' ',richedit1.Lines.Strings[Row],3); 304 str4:= GetFieldValue(' ',richedit1.Lines.Strings[Row],4); 305 str5:= GetFieldValue(' ',richedit1.Lines.Strings[Row],5); 306 pos1:=pos('(',str5); {去除主队(中)} 307 if pos1>0 then str5:=copy(str5,1,pos1-1); 308 str6:= GetFieldValue(' ',richedit1.Lines.Strings[Row],6); 309 str7:= GetFieldValue(' ',richedit1.Lines.Strings[Row],7); 310 str8:= GetFieldValue(' ',richedit1.Lines.Strings[Row],8); 311 pos1:=pos('-',str8); 312 313 if pos1>0 then {未有比分,无欧指} 314 begin 315 str81:='-1.0'; 316 str82:='-1.0'; 317 str83:='-1.0'; 318 end; 319 {begin 根据str8长度判断 =12 ; >12 ; <12且 <>'---' ; } 320 321 if length(str8)=12 then {有大于12的情况 :1.192.1912.19} 322 begin 323 str81:=copy(str8,1,4); 324 str82:=copy(str8,5,4); 325 str83:=copy(str8,9,4); 326 end; 327 328 if str8='---' then 329 begin 330 str81:='-1.0'; 331 str82:='-1.0'; 332 str83:='-1.0'; 333 end; 334 335 336 if (length(str8)>12) then {有大于12的情况 :1.19 2.19 12.19} 337 begin 338 if (length(GetFieldValue('.',str8,1))=1) and (length(GetFieldValue('.',str8,2))=3) and (length(GetFieldValue('.',str8,3))=4) then 339 begin 340 str81:=copy(str8,1,4); 341 str82:=copy(str8,5,4); 342 str83:=copy(str8,9,5); 343 end; 344 {12.11 1.23 3.23} 345 if (length(GetFieldValue('.',str8,1))=2) and (length(GetFieldValue('.',str8,2))=3) and (length(GetFieldValue('.',str8,3))=3) then 346 begin 347 str81:=copy(str8,1,5); 348 str82:=copy(str8,6,4); 349 str83:=copy(str8,10,4); 350 end; 351 352 {12.11 11.23 3.23} 353 if (length(GetFieldValue('.',str8,1))=2) and (length(GetFieldValue('.',str8,2))=4) and (length(GetFieldValue('.',str8,3))=3) then 354 begin 355 str81:=copy(str8,1,5); 356 str82:=copy(str8,6,5); 357 str83:=copy(str8,11,4); 358 end; 359 360 361 {1.11 21.23 3.23} 362 if (length(GetFieldValue('.',str8,1))=1) and (length(GetFieldValue('.',str8,2))=4) and (length(GetFieldValue('.',str8,3))=3) then 363 begin 364 str81:=copy(str8,1,4); 365 str82:=copy(str8,5,5); 366 str83:=copy(str8,10,4); 367 end; 368 369 {1.11 21.23 13.23} 370 if (length(GetFieldValue('.',str8,1))=1) and (length(GetFieldValue('.',str8,2))=4) and (length(GetFieldValue('.',str8,3))=4) then 371 begin 372 str81:=copy(str8,1,4); 373 str82:=copy(str8,5,5); 374 str83:=copy(str8,10,5); 375 end; 376 377 378 379 380 end; 381 382 383 if (length(str8)<12) and (trim(str8)<>'---') then {有比分 如果* -腰斩不取} 384 begin 385 str81:= GetFieldValue(':',str8,1); 386 str82:=''; { str82='' 无比分的标志} 387 str83:= GetFieldValue(':',str8,2); 388 if trim(str8)='*' then 389 begin 390 str81:='-1'; 391 str83:='-1'; 392 end; 393 394 end; 395 396 {end 根据str8长度判断 =12 ; >12 ; <12且 <>'---' ; } 397 398 str9:= GetFieldValue(' ',richedit1.Lines.Strings[Row],9) ; {SP} 399 {begin 根据str9长度判断 =12 ; >12 } 400 if length(str9)=12 then 401 begin 402 str91:=copy(str9,1,4); 403 str92:=copy(str9,5,4); 404 str93:=copy(str9,9,4); 405 end; 406 407 if length(str9)>12 then {有大于12的情况 :1.192.1912.19} 408 begin 409 if (length(GetFieldValue('.',str9,1))=1) and (length(GetFieldValue('.',str9,2))=3) and (length(GetFieldValue('.',str9,3))=4) then 410 begin 411 str91:=copy(str9,1,4); 412 str92:=copy(str9,5,4); 413 str93:=copy(str9,9,5); 414 end; 415 {12.111.233.23} 416 if (length(GetFieldValue('.',str9,1))=2) and (length(GetFieldValue('.',str9,2))=3) and (length(GetFieldValue('.',str9,3))=3) then 417 begin 418 str91:=copy(str9,1,5); 419 str92:=copy(str9,6,4); 420 str93:=copy(str9,10,4); 421 end; 422 423 {1.1121.233.23} 424 if (length(GetFieldValue('.',str9,1))=1) and (length(GetFieldValue('.',str9,2))=4) and (length(GetFieldValue('.',str9,3))=3) then 425 begin 426 str91:=copy(str9,1,4); 427 str92:=copy(str9,5,5); 428 str93:=copy(str9,10,4); 429 end; 430 431 end; 432 {end根据str9长度判断 =12 ; >12 } 433 434 {begin 以下取 str10,str11,str12 ,str91,str,92,str93} 435 if length(str9)>=12 then {有比分时的nsp} 436 begin 437 str10:= GetFieldValue(' ',richedit1.Lines.Strings[Row],11); 438 str11:= GetFieldValue(' ',richedit1.Lines.Strings[Row],12); 439 str12:= GetFieldValue(' ',richedit1.Lines.Strings[Row],13); 440 if length(str10)=1 then str10:='-1.0'; 441 if length(str11)=1 then str11:='-1.0'; 442 if length(str12)=1 then str12:='-1.0'; 443 end; 444 445 446 if str9='---' then {有比分时无oz-20130814} 447 begin 448 str91:='-1.0'; 449 str92:='-1.0'; 450 str93:='-1.0'; 451 str10:= GetFieldValue(' ',richedit1.Lines.Strings[Row],11); 452 str11:= GetFieldValue(' ',richedit1.Lines.Strings[Row],12); 453 str12:= GetFieldValue(' ',richedit1.Lines.Strings[Row],13); 454 if length(str10)=1 then str10:='-1.0'; 455 if length(str11)=1 then str11:='-1.0'; 456 if length(str12)=1 then str12:='-1.0'; 457 end; 458 459 if length(str8)>=12 then {无比分nsp} 460 begin 461 str10:= GetFieldValue(' ',richedit1.Lines.Strings[Row],10); 462 str11:= GetFieldValue(' ',richedit1.Lines.Strings[Row],11); 463 str12:= GetFieldValue(' ',richedit1.Lines.Strings[Row],12); 464 if trim(str10)='-' then str10:='-1.0' ; 465 if trim(str11)='-' then str11:='-1.0' ; 466 if trim(str12)='-' then str12:='-1.0' ; 467 end; 468 {end 取 str10,str11,str12 ,str91,str,92,str93} 469 470 if length(str1)>4 then{取比赛日期} 471 g_strdate:=str1; 472 473 {返回各字段到TArr } 474 Result[0]:=g_strdate; 475 Result[1]:=str1; 476 Result[2]:=str2; 477 Result[3]:=str3; 478 Result[4]:=str4; 479 Result[5]:=str5; 480 Result[6]:=str6; 481 Result[7]:=str7; 482 Result[8]:=str81; 483 Result[9]:=str82; 484 Result[10]:=str83; 485 Result[11]:=str91; 486 Result[12]:=str92; 487 Result[13]:=str93; 488 Result[14]:=str10; 489 Result[15]:=str11; 490 Result[16]:=str12; 491 492 if Result[11]='' then Result[11]:='1.0'; 493 if Result[12]='' then Result[12]:='1.0'; 494 if Result[13]='' then Result[13]:='1.0'; 495 if Result[14]='' then Result[14]:='1.0'; 496 if Result[15]='' then Result[15]:='1.0'; 497 if Result[16]='' then Result[16]:='1.0'; 498 499 end; 500 501 function TFxlcj.Caiji_xl_cjoneline(OperNum:integer;Num:integer):integer; //返回 0- 无比分 1-有比分 2-取消 3-其他 502 var rs,i:integer; 503 Ret_Get_bszl,sparr:TArr; 504 fMainMessage,s,strpk,strbf,strypoz,strypsp:string; 505 begin 506 // EnterCriticalSection(CS); 507 rs:=3; 508 setlength(Ret_Get_bszl,18); 509 i:=Num; 510 Ret_Get_bszl:= Get_bszl(1,i); {取每条比赛记录,返回个字段值} 511 512 {取期号,没用到 if ( i>=24) and (i<=24) then 513 begin 514 strno:=GetFieldValue(' ',richedit1.Lines.Strings[i],1); 515 end;} 516 517 if i>=130 then //从网页131行开始取比赛资料 518 begin 519 if length(Ret_Get_bszl[1])=1 then {是比赛记录 将进行:取数-插入bslsz } 520 begin 521 g_IfInsert:=IfInsert_bslsz(Ret_Get_bszl[0],Ret_Get_bszl[3],Ret_Get_bszl[5]); 522 if g_IfInsert<0 then exit; 523 524 if Ret_Get_bszl[9]<>'' then {无比分} 525 begin 526 rs:=0; 527 //SendtoMain(strdate+','+str2+','+str3+','+str4+','+str5+','+str6+','+str7+','+str81+','+str82+','+str83+','+str10+','+str11+','+str12); 528 try 529 if g_IfInsert=0 then 530 s := Format('insert into bslsz (bsrq,xh,bssj,lsmc,zd,rangqiu,kd,sp1,sp2,sp3,xsp1,xsp2,xsp3,qhao) values (%s,%d,%s,%s,%s,%d,%s,%f,%f,%f,%f,%f,%f,%s)', 531 ['#'+Ret_Get_bszl[0]+'#',strtoint(Ret_Get_bszl[2]),quotedstr(Ret_Get_bszl[4]),quotedStr(Ret_Get_bszl[3]),quotedStr(Ret_Get_bszl[5]),strtoint(Ret_Get_bszl[6]),quotedStr(Ret_Get_bszl[7]),strtofloat(Ret_Get_bszl[8]),strtofloat(Ret_Get_bszl[9]),strtofloat(Ret_Get_bszl[10]),strtofloat(Ret_Get_bszl[14]),strtofloat(Ret_Get_bszl[15]),strtofloat(Ret_Get_bszl[16]),Quotedstr(Eqhao.Text)]); 532 g_insertflag:=1; 533 534 except 535 //exit; 536 g_insertflag:=0; 537 SendtoMain('无SP'); 538 end; 539 540 if ( (g_IfInsert>0) and (OperNum=0)) or (OperNum=1) then {无比分,更新最新xsp--重新初始化 } 541 Update_sp(Ret_Get_bszl[0],Ret_Get_bszl[3],Ret_Get_bszl[5],Ret_Get_bszl[8],Ret_Get_bszl[9],Ret_Get_bszl[10],Ret_Get_bszl[14],Ret_Get_bszl[15],Ret_Get_bszl[16],OperNum); {修改xsp1,xsp2,xsp3} 542 543 {OperNum=1 无比分,更新最新xsp--盘中 } 544 {修改xsp1,xsp2,xsp3} 545 end; 546 547 548 if Ret_Get_bszl[9]='' then {有比分} 549 begin 550 rs:=1; 551 try 552 strpk:= Return_pank(strtoint(Ret_Get_bszl[6]),strtoint(Ret_Get_bszl[8]),strtoint(Ret_Get_bszl[10])); 553 strbf:= Return_bf(strtoint(Ret_Get_bszl[8]),strtoint(Ret_Get_bszl[10])); 554 except 555 SendtoMain('errcode:2,'+Ret_Get_bszl[5]); 556 exit; 557 end; 558 559 //SendtoMain(Ret_Get_bszl[0]+','+Ret_Get_bszl[2]+','+Ret_Get_bszl[3]+','+Ret_Get_bszl[4]+','+Ret_Get_bszl[5]+','+Ret_Get_bszl[6]+','+Ret_Get_bszl[7]+','+Ret_Get_bszl[8]+':'+Ret_Get_bszl[10]+','+Ret_Get_bszl[11]+','+Ret_Get_bszl[12]+','+Ret_Get_bszl[13]+','+Ret_Get_bszl[14]+','+Ret_Get_bszl[15]+','+Ret_Get_bszl[16]+strpk+','+strbf); 560 fMainMessage:=Ret_Get_bszl[2]+' '+Ret_Get_bszl[3]+' '+Ret_Get_bszl[5]+'--'+Ret_Get_bszl[7]+' '+Ret_Get_bszl[8]+':'+Ret_Get_bszl[10]+' '+strpk+','+strbf; 561 SendtoMain(fMainMessage); 562 if g_IfInsert=0 then 563 try 564 565 s := Format('insert into bslsz (bsrq,xh,bssj,lsmc,zd,rangqiu,kd,zdrq,kdrq,sp1,sp2,sp3,xsp1,xsp2,xsp3,pjg,bfjg,qhao) values (%s,%d,%s,%s,%s,%d,%s,%d,%d,%f,%f,%f,%f,%f,%f,%s,%s,%s)', 566 ['#'+Ret_Get_bszl[0]+'#',strtoint(Ret_Get_bszl[2]),quotedstr(Ret_Get_bszl[4]),quotedStr(Ret_Get_bszl[3]),quotedStr(Ret_Get_bszl[5]),strtoint(Ret_Get_bszl[6]),quotedStr(Ret_Get_bszl[7]),strtoint(Ret_Get_bszl[8]),strtoint(Ret_Get_bszl[10]),strtofloat(Ret_Get_bszl[11]),strtofloat(Ret_Get_bszl[12]),strtofloat(Ret_Get_bszl[13]),strtofloat(Ret_Get_bszl[14]),strtofloat(Ret_Get_bszl[15]),strtofloat(Ret_Get_bszl[16]),quotedStr(strpk),quotedStr(strbf),Quotedstr(Eqhao.Text)]); 567 568 except 569 showmessage('e:'+s); 570 exit; 571 end; 572 573 if g_IfInsert>0 then 574 begin 575 setlength(sparr,13); 576 sparr:=Bslsz_sp(Ret_Get_bszl[0],Ret_Get_bszl[3],Ret_Get_bszl[5]); { sp1,nsp1,sp2,nsp2,sp3,nsp3,xsp1,nxsp1,xsp2,nxsp2,xsp3,nxsp3} 577 //SendtoMain(sparr[0]); 578 if strpk='赢' then {取最新SP 如果数据库最新 sp 或欧指为-1.0 取网页最新值 2013-7-30 } 579 begin strypoz:=Ret_Get_bszl[11]; strypsp:=Ret_Get_bszl[14]; end; 580 581 582 if strpk='平' then 583 begin strypoz:=Ret_Get_bszl[12]; strypsp:=Ret_Get_bszl[15]; end; 584 585 if strpk='负' then 586 begin strypoz:=Ret_Get_bszl[13]; strypsp:=Ret_Get_bszl[16]; end; 587 588 if strpk='取消' then 589 begin rs:=2;strypoz:='-1.0'; strypsp:='-1.0'; end; {2013-11-4增加,否则Update_bslsz 无数据,出错} 590 591 592 try 593 Update_bslsz(Ret_Get_bszl[0],Ret_Get_bszl[3],Ret_Get_bszl[5],strtoint(Ret_Get_bszl[8]),strtoint(Ret_Get_bszl[10]),strpk,strbf,strypsp,strypoz); 594 except 595 SendtoMain('errcode:update_bslsz'+strypsp+','+strypoz); 596 exit; 597 end; 598 end; 599 end; 600 601 if g_IfInsert=0 then 602 Insert_bslsz(s); 603 end;{插入结束} 604 // RichEdit1.SelLength := 0; //恢复选择 605 606 end; 607 result:=rs; 608 // LeaveCriticalSection(CS); 609 end;
2.数据分析
比赛结束,根据采集到的数据生成分析数据,包括:每期胜、负、平的场数,计算赢盘平均指数,数据展示每项指标提供排序,可以得出每期赢盘规律性结果。