Я сделал php-приложение, которое извлекает данные с веб-сайта html, используя xmldom, и сохраняет их в базе данных, затем извлекает данные и выполняет некоторые сложные вычисления. и после выдачи выходной базы данных обрезаются.
Я использовал цикл while для управления строками данных. но это занимает много времени, когда строка данных увеличивается. Так что же быстрее цикл для ускорения приложения?
хмлдо вещь отстой?
вот код извлечения данных
<?php
ini_set('mysql.connect_timeout', 3600);
ini_set('default_socket_timeout', 3600);
ini_set('max_execution_time', '3600');
include "connection.php";
$s9="TRUNCATE TABLE `tbl_share_cost_details`";
$q9=mysqli_query($conn,$s9) or die("ERRRO99:".mysqli_error($conn));
$start = microtime(true); // Time Calculation Start
//$s="SELECT * FROM `tbl_company_share` WHERE id>=1 AND id<=50";
$s="SELECT * FROM `tbl_company_share` WHERE `code_name` IN ( ".$sharename.")";
$q=mysqli_query($conn,$s) or die("ERRRO:".mysqli_error($conn));
$sql="INSERT INTO `tbl_share_cost_details`(`share_name`, `price`, `bid_price_qty`,`offer_price_qty`, `change_price`, `change_price_percentage`, `high_of_day`, `low_of_day`, `open_price`, `buy`, `sell`, `hold`, `added_datetime`) VALUES ";
while($row = mysqli_fetch_array($q)){
$company_name = $row['company_name'];
$code_name = $row['code_name'];
$nse_code = $row['nse_code'];
$has_nse_code = $row['has_nse_code'];
if($has_nse_code==1){
$url="http://www.moneycontrol.com/stocks/cptmarket/compsearchnew.php?search_data=&cid=&mbsearch_str=&topsearch_type=1&search_str=".$nse_code;
} else {
$url="http://www.moneycontrol.com/stocks/cptmarket/compsearchnew.php?search_data=&cid=&mbsearch_str=&topsearch_type=1&search_str=".$code_name;
}
//echo $url; die;
libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTMLFile($url);
$xpath = new DOMXpath($doc);
$elements2 = $xpath->query('//span[@id="Nse_Prc_tick"]');
$elements33 = $xpath->query('//span[@class="gr_15 uparw_pc"]');
if($elements2->length > 0) {
$price = $elements2->item(0)->nodeValue;
} else {
$price ='';
}
if($elements33->length > 0) {
//echo 'xx'.$elements33->item(0)->nodeValue;
}
//Todays Changeable Price
$p=$doc->getElementById('n_changetext');
$priceStr = @$p->nodeValue;
$priceArr = explode("(",$priceStr);
$change_price = $priceArr[0];
$change_price_percentage = @rtrim($priceArr[1],")");
//Todays Bid PRICE (QTY.)
$p9=$doc->getElementById('n_bidprice_qty');
$priceStr = @$p9->nodeValue;
$priceArr = explode("(",$priceStr);
//echo "<br>"; echo $priceArr[0].'Bid PRICE';
//echo "<br>"; echo rtrim($priceArr[1],")").'Bid PRICE';
$bid_price_qty = @rtrim($priceArr[1],")");
//Todays Offer PRICE (Qty.)
$p99=$doc->getElementById('n_offerprice_qty');
$priceStr = @$p99->nodeValue;
$priceArr = explode("(",$priceStr);
//echo "<br>"; echo $priceArr[0].'Offer PRICE';
//echo "<br>"; echo rtrim($priceArr[1],")").'Offer PRICE';
$offer_price_qty = @rtrim($priceArr[1],")");
//Todays Open Price
$p11=$doc->getElementById('n_open');
$open_price = @$p11->nodeValue;
//Todays Lowest Price
$p12=$doc->getElementById('n_low_sh');
$low_of_day = @$p12->nodeValue;
//Todays Highest Price
$p13=$doc->getElementById('n_high_sh');
$high_of_day = @$p13->nodeValue;
//Getting BUY Percentage
$classname1="pl_txt";
$nodesss = $xpath->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname1 ')]");
//echo "<pre>"; print_r($nodesss);
$buy = @$nodesss->item(0)->nodeValue;
//Getting SELL Percentage
$classname2="pl_txt rtxt";
$nodesss = $xpath->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname2 ')]");
//echo "<pre>"; print_r($nodesss);
$sell = @$nodesss->item(0)->nodeValue;
//Getting HOLD Percentage
$classname3="pl_txt grytxt";
$nodesss = $xpath->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname3 ')]");
//echo "<pre>"; print_r($nodesss);
$hold = @$nodesss->item(0)->nodeValue;
//===========START SHARE PRICE SHOWING SUCCESS & FAILIOR Code ON 01/10/2016==============================================
$ss="SELECT * FROM `tbl_buy_product_profit_loss` WHERE share_name='".$code_name."'";
$qq=mysqli_query($conn,$ss) or die("ERRRO21:".mysqli_error($conn));
if(mysqli_num_rows($qq)>0){
$Rsq = mysqli_fetch_array($qq);
$price_suggested_at = $Rsq['price_suggested_at'];
$increment_price_val = ($price_suggested_at +((0.3 * $price_suggested_at)/100)); // 0.3% Increment Value
$decrement_price_val = ($price_suggested_at -((0.4 * $price_suggested_at)/100)); // 0.4% Decrement Value
if($price>=$increment_price_val){
$msg='Success';
$cc=($price-$price_suggested_at);
$profit_percent = ($cc/$price_suggested_at)/100;
//===========START DATA INTO product_profit_loss TABLE======================================
$ins="INSERT INTO `tbl_buy_product_profit_loss` SET `share_name`='".$code_name."',`price_suggested_at`='".$price_suggested_at."',`datetime`='".date("Y-m-d H:i:s")."',`price_sold_at`='".$price."',`profit`='".$profit_percent."',`loss`='',`message`='".$msg."'";
$qq=mysqli_query($conn,$ins) or die("ERRRO22:".mysqli_error($conn));
//===========END DATA INTO product_profit_loss TABLE======================================
} else if($price<=$decrement_price_val){
$msg='Failure';
$cc=@($price_suggested_at-$price);
$loss_percent = ($cc/$price_suggested_at)/100;
if($price==''){ $price='0.00'; } else { $price=$price; }
//===========START DATA INTO product_profit_loss TABLE======================================
$ins="INSERT INTO `tbl_buy_product_profit_loss` SET `share_name`='".$code_name."',`price_suggested_at`='".$price_suggested_at."',`datetime`='".date("Y-m-d H:i:s")."',`price_sold_at`='".$price."',`profit`='0.00',`loss`='".$loss_percent."',`message`='".$msg."'";
//echo $ins; die;
$qq=mysqli_query($conn,$ins) or die("ERRRO23:".mysqli_error($conn));
//===========END DATA INTO product_profit_loss TABLE======================================
} else {
$msg='';
$profit_percent = '';
}
}
//===========END SHARE PRICE SHOWING SUCCESS & FAILIOR Code ON 01/10/2016=================================================
//echo "Naba"; die;
if($bid_price_qty==''){ $bid_price_qty='0.00'; } else { $bid_price_qty=$bid_price_qty; }
if($offer_price_qty==''){ $offer_price_qty='0.00'; } else { $offer_price_qty=$offer_price_qty; }
if($change_price_percentage==''){ $change_price_percentage='0.00'; } else { $change_price_percentage=$change_price_percentage; }
if($high_of_day==''){ $high_of_day='0.00'; } else { $high_of_day=$high_of_day; }
if($low_of_day==''){ $low_of_day='0.00'; } else { $low_of_day=$low_of_day; }
if($open_price==''){ $open_price='0.00'; } else { $open_price=$open_price; }
if($price==''){ $price='0.00'; } else { $price=$price; }
$sql .=" ('".$code_name."','".$price."','".$bid_price_qty."','".$offer_price_qty."','".$change_price."','".$change_price_percentage."','".$high_of_day."','".$low_of_day."','".$open_price."','".$buy."','".$sell."','".$hold."','".date("Y-m-d H:i:s")."'),";
}
//$sql .=" ('','','','','','','','','','','','','')";
$sql .="('xxx','0.00','0.00','0.00','','0.00','0.00','0.00','0.00','','','','".date("Y-m-d H:i:s")."')";
//echo $sql; die;
$q=mysqli_query($conn,$sql) or die("ERRRO11:".mysqli_error($conn));
//echo $time_elapsed_secs = microtime(true) - $start;
//echo "<br/>Record(s) Inserted into DB!";
?>
вот код для получения окончательного результата
<?php
$where = " 1=1";
if(isset($_REQUEST['share_name']) && $_REQUEST['share_name']<>''){
$share_name = $_REQUEST['share_name'];
//$where .= " AND `share_name`='".$share_name."'";
$sharenameArr = explode(",",$_REQUEST['share_name']);
$sharename = '';
foreach($sharenameArr as $val){
$value = "'".$val."'";
$sharename = $sharename.",".$value;
}
$sharename = ltrim($sharename,",");
include "sharetrading-insert.php";
//echo $sharename;
$where .= " AND `share_name` IN ( ".$sharename.") ";
}
//$s="SELECT * FROM `tbl_share_cost_details` WHERE 1=1 ORDER BY change_price_percentage DESC LIMIT 0,100";
$s="SELECT * FROM `tbl_share_cost_details` WHERE $where ORDER BY change_price_percentage DESC";
//$s="SELECT * FROM `tbl_share_cost_details` WHERE id=115";
$q=mysqli_query($conn,$s) or die("ERRRO:".mysqli_error($conn));
$num = mysqli_num_rows($q);
$i=1;
?>
<?php
while($row = mysqli_fetch_array($q)){
?>
<tr>
<td align="center" valign="middle"><?php echo $i; ?></td>
<td align="center" valign="middle"><?php echo $row['share_name']; ?></td>
<td align="center" valign="middle"><?php echo $row['price']; ?></td>
<td align="center" valign="middle"><?php echo $row['change_price_percentage']; ?></td>
<td align="center" valign="middle"><?php echo $row['high_of_day']; ?></td>
<td align="center" valign="middle"><?php echo $row['low_of_day']; ?></td>
<td align="center" valign="middle"><b>Bid Qty</b>:<?php echo $row['bid_price_qty']; ?><br/>
<b>Offer Qty</b>:<?php echo $row['offer_price_qty']; ?><br/>
<b>Percentage</b>:<?php $xx=@(($row['bid_price_qty']/$row['offer_price_qty'])*100);
if($xx>0){ echo $xx; } else { echo '0'; }?>% <br/>
<b>Date</b>:<?php echo $row['added_datetime']; ?>
</td>
<td align="center" valign="middle"><?php echo $row['open_price']; ?></td>
<td>
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<tr>
<td width="81%"><span class="pl_bar brdwr" style="width:<?php echo $row['buy']; ?>;text-align:center;"><b><?php echo $row['buy']; ?></b></span></td>
<td width="19%">BUY<?php if($row['buy']<>''){?>( <span style="font-weight:bold; color:red;"><?php echo $row['buy']; ?></span>)<?php } ?></td>
</tr>
<tr>
<td><span class="pl_bar brdwr rd" style="width:<?php echo $row['sell']; ?>;text-align:center;"><b><?php echo $row['sell']; ?></b></span></td>
<td>SELL<?php if($row['sell']<>''){?>( <span style="font-weight:bold; color:red;"><?php echo $row['sell']; ?></span>)<?php } ?></td>
</tr>
<tr>
<td><span class="pl_bar hold" style="width:<?php echo $row['hold']; ?>;text-align:center;"><b><?php echo $row['hold']; ?></b></span></td>
<td>HOLD<?php if($row['hold']<>''){?>( <span style="font-weight:bold; color:red;"><?php echo $row['hold']; ?></span>)<?php } ?></td>
</tr>
</table>
</td>
<td align="center"><?php $b='0.75'; if($row['change_price_percentage']>$b && $xx>=500 && $row['buy']>=66){ echo '<span style="font-weight:bold; color:red;">BUY</span>'; }?></td>
</tr>
<?php $i++; } ?>
Задача ещё не решена.
Других решений пока нет …