cs-market-parser
v0.0.3
Published
Parser for Steam Counter-Strike 2 market items.
Downloads
10
Maintainers
Readme
- 00 · Алгоритм парсинга.
- 01 · Парсинг всех предметов Counter Strike (по умолчанию).
- 02 · Парсинг всех контейнеров на немецком языке.
Counter Strike Market Parser — это программный модуль, который позволяет парсить данные предметов Counter Strike с торговой площадки Steam Market.
- Данные – получить данные Counter Strike предметов с Steam Market в формате JSON.
- Фильтрация – возможность использовать фильтр для формирования запроса.
- Сортировка – возможность использовать сортировку для формирования запроса.
- Язык – возможность выбрать конкретный язык для названий предметов.
- Cookies – возможность смены авторизационных cookies (при смене VPN).
npm
npm install cs-market-parseryarn
yarn add cs-market-parserimport MarketParser from "cs-market-parser";
async function main() {
const mp = new MarketParser();
await mp.init();
const res = await mp.next();
console.log(res);
}
main();* — обязательный параметр.? — необязательный параметр.+ — значение по умолчанию
⚡ MarketParser — модуль для парсинга торговой площадки steamcommunity.
— модуль для парсинга торговой площадки steamcommunity.
import MarketParser from "cs-market-parser";
// Создание объекта MarketParser
const mp = new MarketParser();- init – инициализация объекта.
- next – получить следующий набор данных.
- updateHeaders – обновить cookies и headers (при смене IP/VPN).
- getItems – получить все обработанные предметы.
- getPagination – получить актуальные данные пагинации.
⭐ IMarketParser — интерфейс модуля MarketParser.
— интерфейс модуля MarketParser.
async init: (params?, pagination?, language?) => Promise<0 | 1>;
async next: () => Promise<TNext>;
async updateHeaders: () => Promise<0 | 1>;
getItems: () => TMarketItem[];
getPagination: () => TFullPagination;Вызов: await init(params?, pagination?, language?)
Параметры:
- params? : (TMarketQueryParams & TMarketSearchParamsCS2) – настройки сортировки и фильтрации.
- pagination? : TPagination – настройки пагинации.
- language? : TMarketLanguage – выбор языка.
Результат:
1– инициализация прошла успешно.0– не получилось выполнить инициализацию.
Вызов: await next()
Результат: TNext – статус и результат запроса.
Вызов: await updateHeaders()
Результат:
1– cookies и headers успешно обновлены.0– не получилось обновить cookies и headers.
Вызов: getItems()
Результат: TMarketItem[] – массив предметов.
Вызов: getPagination()
Результат: TFullPagination – данные пагинации.
🔹TPagination — параметры пагинации.
🔹TFullPagination — комплексные данные пагинации.
🔹TMarketLanguage — язык названия предметов.
🔹TMarketQueryParams — параметры для поискового запроса и сортировки.
🔹TMarketSearchParamsCS2 — параметры фильтрации предметов.
🔹TMarketItem — обработанный набор данных предмета с торговой площадки.
🔹TNext — результат выполнения запроса на вытягивания данных о предметах.
— параметры пагинации.
start: number // смещение предметов (количество предметов для пропуска).
count: number // количество получаемых предметов с 1-го запроса (статично 10).— комплексные параметры для пагинации.
start: number // смещение предметов (количество предметов для пропуска).
count: number // количество получаемых предметов с 1-го запроса (статично 10).
total: number // общее количество предметов.— язык названия предметов (поддерживаются только значения из Steam API).
| Value | Default | Language |
|:------|:-------:|:---------|
| english | + | Английский язык. |
| schinese | | Упрощенный китайский язык. |
| tchinese | | Традиционный китайский язык. |
| japanese | | Японский язык. |
| koreana | | Корейский язык. |
| thai | | Тайский язык. |
| bulgarian | | Болгарский язык. |
| czech | | Чешский язык. |
| danish | | Датский язык. |
| german | | Немецкий язык. |
| spanish | | Испанский язык (Испания). |
| latam | | Испанский язык (Латинская Америка). |
| greek | | Греческий язык. |
| french | | Французский язык. |
| italian | | Итальянский язык. |
| indonesian | | Индонезийский язык. |
| hungarian | | Венгерский язык. |
| dutch | | Нидерландский язык. |
| norwegian | | Норвежский язык. |
| polish | | Польский язык. |
| portuguese | | Португальский язык (Португалия). |
| brazilian | | Португальский язык (Бразилия). |
| romanian | | Румынский язык. |
| russian | | Русский язык. |
| finnish | | Финский язык. |
| swedish | | Шведский язык. |
| turkish | | Турецкий язык. |
| vietnamese | | Вьетнамский язык. |
| ukrainian | | Украинский язык. |
— общие параметры поиска для торговой площадки.
query?: // поисковый запрос.
search_descriptions?: // учитывать ли при поиске совпадения в описание предметов.
sort_column?: // параметр сортировки предметов.
sort_dir?: // направление сортировки| Property | X | Type | Default | Description |
|:---------|:-:|:-----|:-------:|:------------|
| query | ? | string | "" | Произвольная строка поиска. |
| search_descriptions | ? | 1 | | Учитывать совпадения query в описании предметов. |
| | | 0 | + | Не учитывать совпадения в описании предметов (только в названии). |
| sort_column | ? | "default" | + | Без сортировки. |
| | | "popular" | | Сортировка по популярности. |
| | | "name" | | Сортировка по имени. |
| | | "price" | | Сортировка по цене. |
| | | "quantity" | | Сортировка по количеству. |
| sort_dir | ? | "asc" | + | Направление по возрастанию. |
| | | "desc" | | Направление по убыванию. |
— параметры фильтрации предметов.
"category_730_ItemSet[]"?: "any" | string //
"category_730_ProPlayer[]"?: "any" | string //
"category_730_StickerCapsule[]"?: "any" | string //
"category_730_Tournament[]"?: "any" | string //
"category_730_TournamentTeam[]"?: "any" | string //
"category_730_Type[]"?: "any" | string //
"category_730_Weapon[]"?: "any" | string //
any– значение по умолчанию (нет фильтрации).string*– аргументы фильтрации (поддерживаются только значения из Steam API).
— обработанный набор данных предмета с торговой площадки.
fullname: string | null // полное название предмета на выбраном языке.
hashname: string | null // оригинальное название предмета (используется для поиска).
price: number | null // цена в целочисельном формате (умноженная на 100).
fprice: string | null // отформатированная цена с символом валюты доллара.
quantity: number | null // количество предметов на торговой площадке.
img: string | null // хэш имя файла изображения для загрузки с steam cdn.
type: string | null // тип предмета.{
fullname: 'Галерейный кейс',
hashname: 'Gallery Case',
price: 147,
fprice: '$1.47',
quantity: 125555,
img: 'i0CoZ81Ui0m-9KwlBY1L_...',
type: 'Контейнер, базового класса'
}— результат выполнения запроса на вытягивания данных о предметах.
status: // статус выполнения запроса.
pagination?: // данные пагинации.
items?: // массив обработанных предметов.| Property | X | Type | Description |
|:---------|:-:|:-----|:------------|
| status | * | 1 | Запрос прошел успешно. |
| | | 0 | Запрос прошел НЕУСПЕШНО (без результатов). |
| pagination | ? | TFullPagination | Данные пагинации. |
| items | ? | TMarketItem[] | Массов обработанных данных предметов. |
{
status: 0
}{
status: 1,
pagination: { total: 24530, start: 10, count: 10 },
items: TMarketItem[]
}
00 · Алгоритм парсинга.
01 · Парсинг всех предметов Counter Strike (по умолчанию).
02 · Парсинг всех контейнеров на немецком языке.
Для отработки алгоритма парсинга необходимо настроить параметры (params, pagination, language), либо использовать функционал по умолчанию без настройки параметров.
import MarketParser from "cs-market-parser";
import fs from "fs";
import type {
TPagination,
TMarketLanguage,
TMarketQueryParams,
TMarketSearchParamsCS2
} from "cs-market-parser";
const params: TMarketQueryParams & TMarketSearchParamsCS2 = {...};
const pagination: TPagination = {...};
const language: TMarketLanguage = "...";
async function main() {
const mp = new MarketParser();
const isInit = await mp.init(params, pagination, language);
if (!isInit) return;
let start: number = 0;
let total: number = 0;
do {
const res = await mp.next();
if (!res.status) {
/* Сменить VPN и продолжить парсинг. */
continue;
}
start = res.pagination?.start ?? start;
total = res.pagination?.total ?? total;
console.log(`Start: ${start}\nTotal: ${total}`);
await sleep(5000);
} while (start < total);
const items = JSON.stringify(mp.getItems(), null, 2);
await fs.promises.writeFile('./items.json', items);
}
const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));
main();import MarketParser from "cs-market-parser";
// ...import
async function main() {
const mp = new MarketParser();
const isInit = await mp.init();
if (!isInit) return;
// ...
const items = JSON.stringify(mp.getItems(), null, 2);
await fs.promises.writeFile('./items.json', items);
}
// ...
main();
import MarketParser from "cs-market-parser";
// ...import
const params: TMarketQueryParams & TMarketSearchParamsCS2 = {
"category_730_Type[]": "tag_CSGO_Type_WeaponCase",
sort_column: "popular",
sort_dir: "desc"
};
const pagination: TPagination = { start: 0, count: 10 };
const language: TMarketLanguage = "german";
async function main() {
const mp = new MarketParser();
const isInit = await mp.init(params, pagination, language);
if (!isInit) return;
// ...
const items = JSON.stringify(mp.getItems(), null, 2);
await fs.promises.writeFile('./items.json', items);
}
// ...
main();
[
{
"fullname": "Waffenkiste „Kilowatt“",
"hashname": "Kilowatt Case",
"price": 52,
"fprice": "$0.52",
"quantity": 469764,
"img": "i0CoZ81Ui0m-...",
"type": "Behälter (Standardqualität)"
},
...
{
"fullname": "Souvenirpaket: DreamHack 2014– Overpass",
"hashname": "DreamHack 2014 Overpass Souvenir Package",
"price": 209167,
"fprice": "$2,091.67",
"quantity": 2,
"img": "i0CoZ81Ui0m-...",
"type": "Behälter (Standardqualität)"
}
]Этот пакет лицензирован под PolyForm Noncommercial License 1.0.0.
✅ Бесплатно для личного, образовательного, исследовательского и некоммерческого использования. ⚠️ Коммерческое использование требует отдельного соглашения с автором.
Для получения коммерческой лицензии, пожалуйста, свяжитесь с нами по адресу: [email protected].
