FIFA 14 で購入する選手カードを検索する API を開発しています。
3 つの異なるページにまたがる約 15 の異なる Player に対して、毎分 600 の個別のリクエストを行っており、個々のリクエストは毎回最大 50 の結果を返します。
各ページは、私が作成したテーブル (lowestBuyNowPrice) に対してクエリを実行します。このテーブルは、10 分ごとに市場で入手可能な今すぐ購入できる最低価格で更新され、この値と現在の結果の値を比較します。
しかし、lowestBuyNowPrice テーブルの値よりも 2 倍または 3 倍高い価格でカードを購入してきましたが、これは決して起こるべきではありません。
何が起こっているのかを把握するために、他のいくつかのテーブルをセットアップしましたが、クエリが、本来あるべきプレーヤー ID とは異なるプレーヤー ID の結果を返しているように見えます。
<cfscript>
// SEARCH FOR PLAYER
Variables.doSearch = Application.cfcs.Search.doPlayerSearch(Variables.search2PlayerID,0,"",0,0,0,0,0,Variables.searchPhishingKey,Variables.searchSessionKey);
Variables.searchResults = DeserializeJSON(Variables.doSearch.FileContent);
Variables.numResults = ArrayLen(Variables.searchResults.auctionInfo);
</cfscript>
<!--- GET LATEST LOWEST BIN PRICE --->
<cfquery name="qryBINPrice" datasource="sfadb">
SELECT assetID,playerPosition,lowestBIN FROM FUT14PlayerBIN WHERE binID IN (SELECT MAX(binID) AS binID FROM FUT14PlayerBIN WHERE assetID = #Variables.search2PlayerID# GROUP BY assetID,playerPosition)
</cfquery>
<cfscript>
// LOOP ROUND RESULTS
for (i=1; i<=Variables.numResults; i++) {
// IF ASSET ID OF CURRENT CARD IS SAME AS ONE SEARCHING FOR
if (Variables.searchResults.auctionInfo[i].itemData.assetID EQ Variables.search2PlayerID) {
// DEFAULT BUY CARD VARIABLE
Variables.buyCard = 0;
// GET POSITION AND STYLE BIN
Variables.getLowestBIN = Application.cfcs.Player.QoQ(qryBINPrice,"lowestBIN","playerPosition = '#Variables.searchResults.auctionInfo[i].itemData.preferredPosition#'");
// IF LOWEST BIN RECORD EXISTS
if (Variables.getLowestBin.RecordCount GT 0) {
// SET LATEST LOWEST BIN PRICE
Variables.lowestBIN = getLowestBIN.lowestBIN;
// SET BUYING PRICE
Variables.buyingPrice = Variables.lowestBIN * 0.9;
// IF BIN PRICE SET AND IS LESS THAN SET BUYING PRICE
if (Variables.searchResults.auctionInfo[i].buyNowPrice GT 0 AND Variables.searchResults.auctionInfo[i].buyNowPrice LTE Variables.buyingPrice) {
Variables.timeLeft = Variables.searchResults.auctionInfo[i].expires;
Variables.auctionEnds = DateAdd("s",timeLeft,Now());
Variables.insStuff = Application.cfcs.Bid.insStuff(Variables.searchResults.auctionInfo[i].itemData.assetID,Variables.searchResults.auctionInfo[i].itemData.preferredPosition,Variables.searchResults.auctionInfo[i].itemData.playStyle,Variables.lowestBIN,Variables.binPrice,Variables.startPrice,Variables.basePrice,Variables.buyingPrice,qryBINPrice.assetID,Variables.searchResults.auctionInfo[i].buyNowPrice);
Variables.doBuyCard = Application.cfcs.Bid.doBIN(Variables.searchResults.auctionInfo[i].tradeID,Variables.searchResults.auctionInfo[i].buyNowPrice,Variables.startPrice,Variables.binPrice,Variables.searchResults.auctionInfo[i].itemData.ID,Variables.searchResults.auctionInfo[i].itemData.assetID,Variables.searchResults.auctionInfo[i].itemData.resourceID,Variables.searchResults.auctionInfo[i].itemData.cardSubTypeID,Variables.searchResults.auctionInfo[i].itemData.playStyle,Variables.searchResults.auctionInfo[i].itemData.preferredPosition,Variables.searchResults.auctionInfo[i].startingBid,Variables.searchResults.auctionInfo[i].buyNowPrice,Variables.lowestBIN,Variables.searchResults.auctionInfo[i].currentBid,Variables.searchResults.auctionInfo[i].itemData.discardValue,Variables.auctionEnds);
}
}
}
}
}
</cfscript>
これはおそらく、非常に短い時間で大量のリクエストが行われたためですが、正しいレコードが常に返されるようにするためにこれを修正する方法がわかりません。
誰でもアイデアはありますか?