我的
PHP代码在Amazon.com上发送查询以检索有关书籍的信息.
当收到信息时,执行以下程序有两种可能.有可能定义应该使用什么,它必须看看研究的书籍利润总数.
当收到信息时,执行以下程序有两种可能.有可能定义应该使用什么,它必须看看研究的书籍利润总数.
我现在做什么,我发送第一个请求并检索总结果.根据结果的数量,我为变量$queryUrl分配一个新值.如果结果的数量大于1200,则执行的程序应该是这样的.
如果结果数小于1200,程序应该完成执行循环遍历结果的整个页面和其余的PHP代码,但只能一次.
目前,如果有不到1200个结果.该程序遍历所有页面的结果,但在PHP代码结束时停止.它执行所有代码几次,取决于查询的参数是$searchMonthUrlParam继承变量recupMonth JavaScript.
现在,我有这个
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);
要逃避你的循环并结束PHP执行,只需返回一个结果:
//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); }