My PHP code sends queries on Amazon.com to retrieve information about books. When it receives the information, there are two possibilities for execution of the following program. Possibility to define what should be used, it must look at the total number of book profit for research.
What I do at the moment, I am sending a first request and retrieves the total number of results. According to the number of results, I assign a new value to the variable $queryUrl
. If the number of results is greater than 1200, the programs to execute as it should.
If the number of results is less than 1200, the program should finish execute the loop to iterate through the entire pages of results and the rest of the php code but only a single time.
At the moment, if there is less than 1200 results. The program goes through all pages of results, but places to stop at the end of PHP code. It executes all the code several times depending on the parameter of the queries is $searchMonthUrlParam
inherit the variable recupMonth
JavaScript.
For now, I have that
PHP :
//Retrieve variable value passed in POST from JavaScript
$pageNum = (isset($_POST["pageNum"]) && $_POST["pageNum"]) ? intval($_POST["pageNum"]) : 1;
$writeMode = (isset($_POST["writeMode"]) && $_POST["writeMode"]) ? $_POST["writeMode"] : "w";
$searchType = (isset($_POST["searchType"]) && $_POST["searchType"]) ? intval($_POST["searchType"]) : 0;
$month = (isset($_POST["month"]) && $_POST["month"]) ? intval($_POST["month"]) : date("n");
$year = (isset($_POST["year"]) && $_POST["year"]) ? intval($_POST["year"]) : date("Y") ;
$keyword = (isset($_POST["keyword"]) && strlen($_POST["keyword"])) ? $_POST["keyword"] : "";
$startMonth = (isset($_POST["startMonth"]) && strlen($_POST["startMonth"])) ? $_POST["startMonth"] : NULL;
$startYear = (isset($_POST["startYear"]) && strlen($_POST["startYear"])) ? $_POST["startYear"] : NULL;
$endMonth = (isset($_POST["endMonth"]) && strlen($_POST["endMonth"])) ? $_POST["endMonth"] : NULL;
$endYear = (isset($_POST["endYear"]) && strlen($_POST["endYear"])) ? $_POST["endYear"] : NULL;
if($keyword) {
if($writeMode === "w") {
file_put_contents(CSV_FILE, "");
}
$searchMonthUrlParam = "&field-datemod=".$month;
$searchYearUrlParam = "&field-dateyear=".$year;
$searchTypeUrlParam = "";
switch($searchType) {
case SEARCH_TYPE_TITLE:
$searchTypeUrlParam = "&field-title=";
break;
case SEARCH_TYPE_KEYWORDS:
$searchTypeUrlParam = "&field-keywords=";
break;
case SEARCH_TYPE_AUTHOR:
$searchTypeUrlParam = "&field-author=";
$searchTypeUrlParam = "&field-publisher=";
break;
case SEARCH_TYPE_PUBLISHER:
break;
}
//send request to Amazon
$queryUrl = AMAZON_TOTAL_BOOKS_COUNT . $searchMonthUrlParam . $searchYearUrlParam . $searchTypeUrlParam . urlencode($keyword) . '&page=' . $pageNum;
$queryResult = file_get_contents($queryUrl);
//Search number total results
if (preg_match('/of\s+([0-9,]+)\s+Results/', $queryResult, $matches)) {
$totalResults = (int) str_replace(',', '', $matches[1]);
} else {
throw new \RuntimeException('Total number of results not found');
}
//this condition work
if ($totalResults > MAX_RESULT_ALL_PAGES) {
$queryUrl = AMAZON_SEARCH_URL . $searchMonthUrlParam . $searchYearUrlParam . $searchTypeUrlParam . urlencode($keyword) . '&page=' . $pageNum;
}
//with this condition I don't know how to proceed
else {
$queryUrl = AMAZON_TOTAL_BOOKS_COUNT.$searchMonthUrlParam.$searchYearUrlParam.$searchTypeUrlParam.urlencode($keyword)."&page=".$pageNum;
}
$htmlResultPage = file_get_html($queryUrl);
$htmlQueryResult = $htmlResultPage->find("div[class=result]");
exit;
JavaScript :
if(processedResultCount === 0) {
pageNum = 1;
recupMonth--;
if(recupMonth === 0 && recupYear > endYear) {
recupMonth = 12;
recupYear--;
}
else if(parseInt(recupMonth, 10) === parseInt(endMonth, 10) && parseInt(recupYear, 10) === parseInt(endYear, 10)) {
alert("Processing finished");
if(totalResultCount != 0) {
contentElt.innerHTML = "Total processed results: " + totalResultCount + '<br/><br/>> <a href="amazon_keyword_stats.csv" title="Download CSV result file">Download CSV result file</a>';
}
return;
}
}
getAmazonResult(pageNum, writeMode);
return;
}
}
}
xmlHttp.open("POST", "ctrl/getAmazonResult.php", true);
xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlHttp.send("pageNum=" + pageNum + "&writeMode=" + writeMode + "&searchType=" + searchType + "&month=" + recupMonth + "&year=" + recupYear + "&keyword=" + keyword + "&startMonth=" + startMonth + "&startYear=" + startYear + "&endMonth=" + endMonth + "&endYear=" + endYear);
Someone would have a solution on how to power stoper php code execution if it goes in the else but he is finished to execute once in full?
To escape from your loop and end PHP execution, simply return a result:
//this is the condition you indicated works
if ($totalResults > MAX_RESULT_ALL_PAGES) {
$queryUrl = AMAZON_SEARCH_URL . $searchMonthUrlParam . $searchYearUrlParam . $searchTypeUrlParam . urlencode($keyword) . '&page=' . $pageNum;
}
//this is the condition you indicated does not work
else {
return someSortOfResultProcessing($queryResult);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With