以前、cfloop limit で投稿cfhttp を作成しましたか? 別のファイルからCFHTTPリクエストを呼び出すために、JS関数でXMLHttpRequestを作成するソリューションを実装した複数のCFHTTPリクエストの作成に関してcfthreadを使用します。
インターバルタイマーで実行するようにこれを修正しましたが、ホストが1秒あたり3つのリクエストしか許可されていないという問題があるようですが、インターバル時間を7秒ごとに設定することはできますが、 CFHTTPリクエストが保留されているように見え、同時にリクエストを行うことが多いため、タイムアウトになります(つまり、しきい値を超えていることを意味します)。
CFTHREADの使用に関するBen Nadelの投稿を読んだことがありますが、それらを実装する喜びはまったくありません。
現時点での私の基本的なプロセスは次のとおりです。
- Index.cfm には、playerSearch.cfm を呼び出す XMLHttpRequest を使用する JS 関数が含まれています。
- playerSearch.cfm が CFHTTP リクエストを作成します。
- 次に、playerSearch.cfm は応答をループし、ループから現在のアイテムを表示し、IF 条件のいずれかを満たす場合、ループ内の現在のアイテムに入札するために別の CFHTTP 要求を送信します。
- その後、Index.cfm は X 秒ごとに要求を出し続けます。
X秒ごとにリクエストを行うようにCFHTTPリクエスト自体を設定する方法はありますか(おそらくCFTHREADのスリープ機能を使用しますか?)、どうすればCFTHREAD内に何も表示できないように見えますか?
また、CFHTTP リクエスト自体が X 秒ごとにリクエストを作成できる場合は、それを直接呼び出すだけで継続的にループし続けることができますか?
どんなフィードバックでも大歓迎です!
編集:
索引.cfm
<script>
var searchTimer = null,
searchInterval = 1000,
startPosition = 0;
function startSearch() {
if (searchTimer !== null) return;
searchTimer = setInterval(function () {
startPosition = startPosition + 16;
var xhr = new XMLHttpRequest();
xhr.open("GET", "playerSearch.cfm?startPosition="+startPosition, true);
xhr.onload = function (e) {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
document.getElementById("counter").innerHTML = xhr.response;
} else {
// Error handling
}
}
};
xhr.onerror = function (e) {
// Error handling
};
xhr.send(null);
}, searchInterval);
}
function stopSearch() {
clearInterval(searchTimer);
searchTimer = null
}
</script>
playerSearch.cfm
<cfset Variables.startPosition = URL.startPosition />
<cfhttp url="https://utas.fut.ea.com/ut/game/fifa13/auctionhouse?type=player" method="post" result="getPlayer">
<cfhttpparam type="header" name="Accept" value="application/json" />
<cfhttpparam type="header" name="Accept-Language" value="en-GB" />
<cfhttpparam type="header" name="Connection" value="keep-alive" />
<cfhttpparam type="header" name="Content-Length" value="1" />
<cfhttpparam type="header" name="Content-Type" value="application/json" />
<cfhttpparam type="header" name="COOKIE" value="#Arguments.cookieString#">
<cfhttpparam type="header" name="Host" value="utas.fut.ea.com" />
<cfhttpparam type="header" name="Referer" value="http://cdn.easf.www.easports.com/soccer/static/flash/futFifaUltimateTeamPlugin/FifaUltimateTeam.swf" />
<cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />
<cfhttpparam type="header" name="X-HTTP-Method-Override" value="GET" />
<cfhttpparam type="header" name="X-UT-Embed-Error" value="true" />
<cfhttpparam type="header" name="x-flash-version" value="11,7,700,224" />
<cfhttpparam type="header" name="X-UT-SID" value="#Arguments.sessionID#" />
</cfhttp>
<cfif getPlayer.StatusCode EQ "200 OK">
<!--- DESERIALIZE RETURNED JSON SO CAN LOOP ROUND EACH RESULT --->
<cfset Variables.searchResults = DeserializeJSON(getPlayer.FileContent) />
<!--- IF SEARCH RESULTS RETURNED --->
<cfset Variables.numResults = ArrayLen(Variables.searchResults.auctionInfo) />
<cfset Variables.bidsMade = 0 />
<table width="900" cellpadding="0" cellspacing="0">
<tr>
<th width="100" align="left" class="heading">Player Name</th>
<th width="70" align="left" class="heading">Rating</th>
<th width="50" align="left" class="heading">Formation</th>
<th width="80" align="left" class="heading">Position</th>
<th width="80" align="left" class="heading">Bid Status</th>
<th width="100" align="left" class="heading">Starting Price</th>
<th width="80" align="left" class="heading">BIN Price</th>
<th width="80" align="left" class="heading">Current Bid</th>
<th width="80" align="left" class="heading">My Bid</th>
<th width="120" align="left" class="heading">Ends</th>
</tr>
<cfloop from="1" to="#Variables.numResults#" index="i">
<cfscript>
// DEFAULT BID AMOUNT
Variables.bidAmount = 0;
// SET BID AMOUNT
// IF ITEM HAS BUY NOW PRICE AND IT IS LESS THAN QUICK SELL VALUE THEN BID THAT AMOUNT
if (Variables.searchResults.auctionInfo[i].buyNowPrice NEQ 0 AND Variables.searchResults.auctionInfo[i].buyNowPrice LT Variables.searchResults.auctionInfo[i].itemData.discardValue) {
Variables.bidAmount = Variables.searchResults.auctionInfo[i].buyNowPrice;
}
// ELSE IF QUICK SELL VALUE IS 228,231,235,238,242,245 OR 249 BID 200
else if (ListFind("228,231,235,238,242,245,249",Variables.searchResults.auctionInfo[i].itemData.discardValue) AND Variables.searchResults.auctionInfo[i].startingBid LTE 200 AND Variables.searchResults.auctionInfo[i].currentBid LT 200) {
Variables.bidAmount = 200;
}
// ELSE IF QUICK SELL VALUE IS 252,256,259 OR 300 BID 250
else if (ListFind("252,256,259,300",Variables.searchResults.auctionInfo[i].itemData.discardValue) AND Variables.searchResults.auctionInfo[i].startingBid LTE 250 AND Variables.searchResults.auctionInfo[i].currentBid LT 250) {
Variables.bidAmount = 250;
}
// GET MY CURRENT COIN TOTAL
Variables.getCoinTotal = Application.cfcs.Club.getCreditsTotal(SESSION.phishingKey,SESSION.sessionKey);
Variables.curCoinsData = DeserializeJSON(Variables.getCoinTotal.FileContent);
Variables.curCoins = Variables.curCoinsData.credits;
// IF I CURRENTLY HAVE ENOUGH COINS IN ACCOUNT PLACE BID
if (StructKeyExists(Variables,"curCoins") AND Variables.bidAmount NEQ 0 AND Variables.bidAmount LT Variables.curCoins) {
<cfset Variables.bidData = '{ "bid": ' & Variables.bidAmount & ' }'>
<cfset Variables.bidDataLength = Len(Variables.bidData) />
<cfhttp url="https://utas.fut.ea.com/ut/game/fifa13/trade/" & Variables.searchResults.auctionInfo[i].tradeID & "/bid" method="POST" result="makeBid">
<cfhttpparam type="header" name="Accept" value="application/json" />
<cfhttpparam type="header" name="Connection" value="keep-alive" />
<cfhttpparam type="header" name="Content-Type" value="application/json" />
<cfhttpparam type="header" name="Content-Length" value="#Variables.bidDataLength#" />
<cfhttpparam type="header" name="Host" value="utas.fut.ea.com" />
<cfhttpparam type="header" name="Referer" value="http://cdn.easf.www.easports.com/soccer/static/flash/futFifaUltimateTeamPlugin/FifaUltimateTeam.swf" />
<cfhttpparam type="header" name="X-HTTP-Method-Override" value="PUT" />
<cfhttpparam type="header" name="X-UT-SID" value="#SESSION.sessionKey#" />
<cfhttpparam type="header" name="COOKIE" value="#SESSION.phishingKey#">
<cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36" />
<cfhttpparam type="body" value="#Variables.bidData#" />
</cfhttp>
Variables.bidsMade = Variables.bidsMade + 1;
} else {
Variables.bidAmount = 0;
}
</cfscript>
<cfoutput>
<tr>
<td align="left">#Variables.searchResults.auctionInfo[i].itemData.assetID#</td>
<td align="left">
#Variables.searchResults.auctionInfo[i].itemData.rating#
<cfif Variables.searchResults.auctionInfo[i].itemData.rareFlag EQ 0>
<cfelseif Variables.searchResults.auctionInfo[i].itemData.rareFlag EQ 1>
(Rare)
<cfelse>
(Something else)
</cfif>
</td>
<td align="left">#Variables.searchResults.auctionInfo[i].itemData.formation#</td>
<td align="left">#Variables.searchResults.auctionInfo[i].itemData.preferredPosition#</td>
<td align="left">#Variables.searchResults.auctionInfo[i].bidState#</td>
<td align="left">#Variables.searchResults.auctionInfo[i].startingBid#</td>
<td align="left">#Variables.searchResults.auctionInfo[i].buyNowPrice#</td>
<td align="left">#Variables.searchResults.auctionInfo[i].currentBid#</td>
<td align="left">#Variables.bidAmount#</td>
<td align="left">
<cfif Variables.searchResults.auctionInfo[i].tradeState EQ "active">
<cfset timeLeft = Variables.searchResults.auctionInfo[i].expires />
<cfset auctionEnds = DateAdd("s",timeLeft,Now()) />
#DateFormat(Variables.auctionEnds,"dd/mm/yyyy")# #TimeFormat(Variables.auctionEnds,"HH:mm:ss")#
<cfelse>
Ended
</cfif>
</td>
</tr>
</cfoutput>
</cfloop>
</table>
<br /><br />Bids Made: <cfoutput>#Variables.bidsMade#</cfoutput>
<cfelse><br />
The search returned an error.
<cfdump var="#getPlayer#">
</cfif>