Форум программистов, компьютерный форум, киберфорум
PHP: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для artem78
6 / 8 / 2
Регистрация: 20.12.2012
Сообщений: 729

Скрипт покупки товара на Steam Community Market

05.11.2015, 03:55. Показов 2477. Ответов 1

Author24 — интернет-сервис помощи студентам
Скрипт заходит на страницу товара (передавая куки с sessionid и пр.), выбирает первый лот и отправляет post-запрос для покупки. И на этом запросе я получаю ошибку: The requested URL returned error: 400 Bad Request.

PHP Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
    error_reporting(E_ALL);
    require_once('phpQuery-onefile.php');
    $url = 'http://steamcommunity.com/market/listings/730/PP-Bizon%20|%20Sand%20Dashed%20%28Well-Worn%29';
 
    preg_match('/sessionid  ([0-9a-zA-Z]+)/', file_get_contents('cookies.txt'), $m);
    $session_id = $m[1];
 
    // Получаем страницу с товаром
    $headers = array(
        'Origin: http://steamcommunity.com',
        'Accept' => '*/*',
        'Accept-Encoding' => 'gzip, deflate',
        'Accept-Language' => 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3'
    );
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101');
    curl_setopt($ch, CURLOPT_FAILONERROR, true);
    $response = curl_exec($ch);
    if (!$response) die('load page error');
 
    $dom = phpQuery::newDocumentHTML($response);
    if (!$dom->find('#account_pulldown')->html()) die('auth failed');
    $js = $dom->find('.btn_green_white_innerfade.btn_small:eq(0)')->attr('href');
    preg_match("/BuyMarketListing\(.*?, '(.*?)', .*?, .*?, .*?\)/", $js, $m);
    $prod_id = $m[1];
 
    $row = $dom->find("#listing_$prod_id");
    $tr = pq($row);
    $price_with_fee = kop($row->find('.market_listing_price.market_listing_price_with_fee')->text());
    $price_without_fee = kop($row->find('.market_listing_price.market_listing_price_without_fee')->text());
 
 
    // Отправляем post-запрос для покупки
    $post_data = array(
        'currency' => 5,
        'fee' => $price_with_fee - $price_without_fee,
        'quantity' => 1,
        'sessionid' => $session_id,
        'subtotal' => $price_without_fee,
        'total' => $price_with_fee
    );
    $headers['Content-Type'] = 'application/x-www-form-urlencoded';
 
    curl_setopt($ch, CURLOPT_URL, "https://steamcommunity.com/market/buylisting/$prod_id");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $response = curl_exec($ch);
    $json = @json_decode($response, true);
 
    if ($json) {
        print_r($json);
    } else {
        print "buy error: " . curl_error($ch);
    }
    curl_close($ch);
 
 
    function parse_sum($num) { // Извлекает из строки значение цены товара
        if (preg_match('/(\d+)(?:,(\d+))?/', $num, $m)) {
            if (!array_key_exists(2, $m)) $m[2] = 0;
            return "{$m[1]}.{$m[2]}";
        } else {
            die("price parse fail, num = $num");
            return 0;
        }
    }
 
    function kop($sum) { // Перевод рублей в копейки
        return (int) (parse_sum($sum) * 100);
    }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.11.2015, 03:55
Ответы с готовыми решениями:

Определить стоимость покупки, если известны название купленного товара и количество приобретенных единиц товара
Дан список товаров, имеющихся в продаже, содержащий сведения: название товара и цена единицы товара. Определить стоимость покупки, если...

Синхронизация цены товара play market с сервером
Есть туристический сайт-магазин. Заказчик хочет, чтобы в разрабатываемом мобильном приложении была возможность покупок (цифровые товары)....

Программа покупки товара
Срочная помощь. Суть программы состоит в том, что в txt файл написан код продуктов, наименование и стоимость (0001 - хлеб 30), в самой...

1
0 / 0 / 0
Регистрация: 11.08.2016
Сообщений: 1
12.08.2016, 02:36
Автор, решили проблему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.08.2016, 02:36
Помогаю со студенческими работами здесь

Шаг покупки товара х2
Добрый вечер, такая проблема. Установил на сайт Woordpress плагин: &quot;WooCommerce Quantity Increment&quot; но появилась ошибка в том что при...

Вероятность покупки товара
Есть две таблицы в приложении. В первой таблицы указаны товары, группа товаров, цена и вероятность покупки товара. Вероятность...

Вероятность покупки товара
Вероятность покупки данного товара покупателем в магазине составляет 0.6 1.найти вероятность того что а. из 4х покупателей купят...

Статус товара после покупки
Здравствуйте! Подскажите пожалуйста как сделать так, чтоб статус товара после его покупки автоматически менялся. Например, товар есть в...

Вычислить сдачу с покупки товара
1.Товар стоит a руб. b коп. За него заплатили c руб. d коп. Сколько сдачи требуется получить? Вводятся 4 числа: a, b, c и d. Необходимо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
Моки в Python: Mock Object Library
py-thonny 29.03.2025
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или. . .
JavaScript: Управление памятью и улучшение производительности
run.dev 29.03.2025
В отличие от низкоуровневых языков программирования, JavaScript не требует ручного выделения и освобождения памяти. Здесь работает автоматический сборщик мусора, который определяет, какие объекты. . .
Мультитенантная архитектура со SpringBoot и PostgreSQL
ArchitectMsa 29.03.2025
SaaS-приложения редко обслуживают одного клиента и обычно они должны поддерживать множество организаций, каждая из которых работает в своём изолированном пространстве. Мультитенантная архитектура. . .
std::span в C++: Производительность и лучшие практики
NullReferenced 28.03.2025
std::span — одно из самых недооценённых нововведений стандарта C++20, которое радикально меняет подход к работе с непрерывными последовательностями данных. По сути, это невладеющее представление. . .
Многопоточность в C#: Threadpool
UnmanagedCoder 28.03.2025
Пул потоков в C# — это коллекция заранее созданных и готовых к использованию потоков, которые находятся в распоряжении приложения. Вместо того чтобы создавать и уничтожать потоки для каждой небольшой. . .
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
Взаимодействие Python с REST API
py-thonny 27.03.2025
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для. . .
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations рестрикции доступа на сервер sshd статья: https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер