Updated code to automatically bid on an eBay item, I’m currently using it myself if a loop of searched items.
Most of the changes are the query strings which is a lot more involved now. For testing use one cent items with free shipping.
// MAIN BIDDING FUNCTION MAIN BIDDING FUNCTION // this function performs no checking on the input variables // $username - the eBay user name // $password - the eBay user password // $item - the eBay item number to bid on // $bid - the bid amount in local currency i.e. 5.67 // $link - itemlink with referral, can leave empty i.e. '' function place_bid($username, $password, $item, $bid, $link) { $cookies = dirname(__FILE__).'/cookies.txt'; //set success as default false $success = false; $bid_success = false; $curl = curl_init(); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_REFERER, $link); curl_setopt($curl, CURLOPT_COOKIEFILE, $cookies); curl_setopt($curl, CURLOPT_COOKIEJAR, $cookies); //query the sign-out page //curl_setopt($curl, CURLOPT_URL, "https://signin.ebay.com/ws/eBayISAPI.dll?SignIn&lgout=1"); //$ret = curl_exec ($curl); //query the referal link page if ($link) { curl_setopt($curl, CURLOPT_URL, $link); $ret = curl_exec ($curl); } //IMPORTANT //query the sign-in page to set the cookies curl_setopt($curl, CURLOPT_URL, 'https://signin.ebay.com/aw-cgi/eBayISAPI.dll?SignIn&campid=5337161990&customid=7'); $ret = curl_exec ($curl); $data = []; $numbers = []; if (preg_match('%(<form name="SignInForm".*?<\/form>)%im', $ret, $regs)) { $dom = new DOMDocument; $dom->loadHTML($regs[0]); $nodes = $dom->getElementsByTagName('input'); foreach($nodes as $node) { $name = $node->getAttribute('name'); $value = $node->getAttribute('value'); //$size = $node->getAttribute('size'); $type = $node->getAttribute('type'); $data[$name] = $value; if (is_numeric($name)) { if ($type == 'text') { $data[$name] = $username; } if ($type == 'password') { $data[$name] = $password; } } } } unset($data['']); $data_str = http_build_query($data); //sign-in curl_setopt($curl, CURLOPT_URL, "https://signin.ebay.com/ws/eBayISAPI.dll?co_partnerId=2&siteid=0&UsingSSL=1"); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($curl, CURLOPT_POSTFIELDS, $data_str); $ret = curl_exec ($curl); if(curl_errno($curl)){ ebaylog('Curl error: ' . curl_error($curl)); } if (!$ret) { $ret = curl_exec ($curl); if(curl_errno($curl)){ ebaylog('Curl error: ' . curl_error($curl)); } if (!$ret) { $ret = curl_exec ($curl); if(curl_errno($curl)){ ebaylog('Curl error: ' . curl_error($curl)); } } } curl_setopt($curl, CURLOPT_URL, 'https://www.ebay.com/myb/WatchList'); $ret = curl_exec ($curl); //test_write($ret); if(curl_errno($curl)){ ebaylog('Curl error: ' . curl_error($curl)); } if (!$ret) { $ret = curl_exec ($curl); if(curl_errno($curl)){ ebaylog('Curl error: ' . curl_error($curl)); } if (!$ret) { $ret = curl_exec ($curl); if(curl_errno($curl)){ ebaylog('Curl error: ' . curl_error($curl)); } } } //if (strpos($ret, '"loggedIn":true') === FALSE) { if ((strpos($ret, "userid={$username}") === FALSE) && (strpos($ret, "usr/{$username}") === FALSE)) { if (preg_match('%<b class="altTitle">(.*)</b>%', $ret, $regs)) { $err = $regs[1]; ebaylog("\"{$err}\""); if (strpos($err, 'The alerts below') === 0) { ebaylog("{$item}: 'The alerts below' found, successful"); //set it to succes } } else { ebaylog("{$item}: Failed signing in"); if (preg_match('%<font face=".*?" size="3"><b>(.*?)</b></font>%', $ret, $regs)) { $err = $regs[1]; ebaylog("\"{$err}\""); } //test_write($ret); goto end; } } else { ebaylog("{$item}: Success signing in"); } //place the inital bid curl_setopt($curl, CURLOPT_URL, "https://offer.ebay.com/ws/eBayISAPI.dll?MakeBid&item={$item}&maxbid={$bid}&campid=5337161990&customid=7"); $ret = curl_exec ($curl); if(curl_errno($curl)){ ebaylog('Curl error: ' . curl_error($curl)); } if (!$ret) { $ret = curl_exec ($curl); } if (preg_match_all('/(?:value="([-0-9a-zA-Z]*)" *)?name="stok"(?: *value="([-0-9a-zA-Z]*)")?/', $ret, $regs)) { $stok = $regs[1][0]; } else { //Failed to get 'stok' value //try and determine why if (preg_match('%<div class="statusDiv">(.*?)</div>%', $ret, $regs)) { $err = $regs[1]; ebaylog("'{$err}'"); //if string starts with "Enter US $0.41 or more" if (stripos($err, 'Enter') === 0) { ebaylog("{$item}: 'Enter' found, aborting"); //set it to success $success = true; } else if (stripos($err, 'To enter a') === 0) { ebaylog("{$item}: 'To enter a' found, aborting"); //set it to success $success = true; } else if (stripos($err, 'Transaction Blocked') === 0) { ebaylog("{$item}: 'Transaction Blocked' found, aborting"); //set it to success $success = true; } } else if (preg_match('%"\d*" - Invalid Item</div>%', $subject)) { ebaylog("{$item}: 'Invalid Item' found, aborting"); test_write($ret); //set it to success $success = true; } else if (preg_match('%<div class="subTlt"><ul class="errList"><li>(.*?)</li></ul></div>%', $subject)) { ebaylog("{$item}: 'no longer available' found, aborting"); test_write($ret); //set it to success $success = true; } else if (preg_match('%id="w\d-\d-_msg".*?>(.*?)</span>%', $ret, $regs)) { ebaylog("'{$regs[1]}'"); } else if (preg_match('%<div\s+class\s*=\s*"(?:errRed|errBlk|errTitle|statusDiv)"\s*>(.*?)</div>%i', $ret, $regs)) { ebaylog("'{$regs[1]}'"); } else { //don't know why so log the page ebaylog("{$item}: Failed to get 'stok' value"); test_write($ret); } goto end; } if (preg_match_all('/(?:value="([-0-9a-zA-Z]*)" *)?name="uiid"(?: *value="([-0-9a-zA-Z]*)")?/', $ret, $regs)) { $uiid = $regs[1][0]; } else { ebaylog("{$item}: Failed to get 'uiid' value"); goto end; } if ($stok && $uiid) { ebaylog("{$item}: Success placing initial bid"); } else { ebaylog("{$item}: Failed placing initial bid"); goto end; } //confirm the bid curl_setopt($curl, CURLOPT_URL, "https://offer.ebay.com/ws/eBayISAPI.dll?MfcISAPICommand=MakeBid&maxbid={$bid}&quant=1&mode=1&stok={$stok}&uiid={$uiid}&co_partnerid=2&user={$username}&fb=0&item={$item}&campid=5337161990&customid=7"); $ret = curl_exec ($curl); if(curl_errno($curl)){ ebaylog('Curl error: ' . curl_error($curl)); } if (!$ret) { $ret = curl_exec ($curl); } //perform a number of tests to determine if the bid was a success $bid_success = true; if (stripos($ret, "you're the first bidder") === FALSE) { if (stripos($ret, "you're the high bidder and currently in the lead") === FALSE) { if (stripos($ret, "you're currently the highest bidder") === FALSE) { $bid_success = false; ebaylog("{$item}: Failed placing final bid"); //try and determine why if (preg_match('%<div\s+class\s*=\s*"(?:errRed|errBlk|errTitle|statusDiv|title)"\s*>(.*?)</div>%i', $ret, $regs)) { $err = $regs[1]; ebaylog("'{$err}'"); if (stripos($err, 'Enter') === 0) { ebaylog("{$item}: 'Enter' found, aborting"); //set it to success $bid_success = true; } else if (stripos($err, "You've just been outbid") === 0) { ebaylog("{$item}: 'You've just been outbid' found, aborting"); //set it to success $bid_success = true; } else if (stripos($err, "You're currently the high bidder,") === 0) { ebaylog("{$item}: 'You're currently the high bidder, but the reserve hasn't been met.' found, aborting"); //set it to success $bid_success = true; } } else { //we don't know why it failed so write the data test_write($ret); } } } } if ($bid_success) { ebaylog("{$item}: Success placing final bid"); $success = true; } end: //close the curl session curl_close ($curl); if ($success) { ebaylog("{$item}: Success: {$username}"); } else { ebaylog("{$item}: Failure: {$username}"); } return $success; } //for testing function test_write($out) { $fh = fopen(dirname(__FILE__).'/'.date('Y-m-d H-i-s').'.html', 'w'); fwrite($fh, $out); fclose($fh); } //simple logging function function ebaylog($msg) { $msg = "{$msg}\r\n"; echo $msg; $fh = fopen(dirname(__FILE__).'/ebay-log.txt', 'a'); fwrite($fh, date('Y-m-d H-i-s')." {$msg}"); fclose($fh); }
Leave a Reply