var SteamCommunity = require('../index.js'); var Cheerio = require('cheerio'); SteamCommunity.prototype.marketSearch = function(options, callback) { var qs = {}; if(typeof options === 'string') { qs.query = options; } else { qs.query = options.query || ''; qs.appid = options.appid; qs.search_descriptions = options.searchDescriptions ? 1 : 0; if(qs.appid) { for(var i in options) { if(['query', 'appid', 'searchDescriptions'].indexOf(i) != -1) { continue; } // This is a tag qs['category_' + qs.appid + '_' + i + '[]'] = 'tag_' + options[i]; } } } qs.start = 0; qs.count = 100; qs.sort_column = 'price'; qs.sort_dir = 'asc'; var self = this; var results = []; performSearch(); function performSearch() { self.httpRequest({ "uri": "https://steamcommunity.com/market/search/render/", "qs": qs, "headers": { "referer": "https://steamcommunity.com/market/search" }, "json": true }, function(err, response, body) { if (err) { callback(err); return; } if(!body.success) { callback(new Error("Success is not true")); return; } if(!body.results_html) { callback(new Error("No results_html in response")); return; } var $ = Cheerio.load(body.results_html); var $errorMsg = $('.market_listing_table_message'); if($errorMsg.length > 0) { callback(new Error($errorMsg.text())); return; } var rows = $('.market_listing_row_link'); for(var i = 0; i < rows.length; i++) { results.push(new CMarketSearchResult($(rows[i]))); } if(body.start + body.pagesize >= body.total_count) { callback(null, results); } else { qs.start += body.pagesize; performSearch(); } }, "steamcommunity"); } }; function CMarketSearchResult(row) { var match = row.attr('href').match(/\/market\/listings\/(\d+)\/([^\?\/]+)/); this.appid = parseInt(match[1], 10); this.market_hash_name = decodeURIComponent(match[2]); this.image = row.find('.market_listing_item_img').attr('src').match(/^https?:\/\/[^\/]+\/economy\/image\/[^\/]+\//)[0]; this.price = parseInt(row.find('.market_listing_their_price .market_table_value span.normal_price').text().replace(/[^\d]+/g, ''), 10); this.quantity = parseInt(row.find('.market_listing_num_listings_qty').text().replace(/[^\d]+/g, ''), 10); }