繁体   English   中英

我将如何使用 Axios 发出 POST 请求以输入两个输入并获取返回的数据?

[英]How would I make a POST request using Axios to enter two inputs and get data returned?

所以我试图让这个想法成为现实,但我很难弄清楚从哪里开始。 这个想法是通过 discord 机器人发出的耐克订单检查命令,用户将使用“/status”并输入他们的 email 和订单号,机器人将使用 Axios 获取访客订单链接“https://www.nike.com/ orders/details/',输入用户输入的两个input,点击提交按钮,返回值。 第一次使用 Axios 包作为一个整体,所以我不知道从哪里开始。 有人有什么想法吗? 下面的代码是我在输入输入之前和捕获数据之后的代码

const { Discord, CommandInteraction, MessageEmbed } = require('discord.js');
const axios = require('axios');
const requests = require('request')
const wait = require('node:timers/promises').setTimeout;

module.exports = {
    name: 'status',
    description: 'Check Status Of Nike Order',
    permission: 'USE_APPLICATION_COMMANDS',
    options: [
        {
            name: 'email',
            description: 'Input Account Email.',
            required: true,
            type: 'STRING'
        },
        {
            name: 'ordernumber',
            description: 'Input Order Number',
            required: true,
            type: 'STRING'
        },
    ],

    /**
     * 
     * @param {CommandInteraction} interaction 
     */
    async execute(interaction) {
        const { options } = interaction;
        let email = options.getString("email");
        let orderNumber = options.getString("ordernumber");
        const baseURL = 'https://www.nike.com/orders/details/';

        axios.get(`${baseURL}.json`).then((response) => {



            

            let orderEmbed = new MessageEmbed()
            .setTitle('Order Checked 🧪')
            .setURL(``)
            .addFields(
                { name: '**Account:**', value: `${email}` },
                { name: '**Status:**', value: `` },
                { name: '**Product Name:**', value: ``, inline: true },
                { name: '**Order Date:**', value: ``, inline: true },
                { name: '**Order Number:**', value: `${orderNumber}`, inline: true },
                { name: '**Size:**', value: `` },
            )
            .setTimestamp()
                wait(2000);
            interaction.reply({ embeds: [ orderEmbed ]})
        })
    }
}```

由于没有关于如何在这个项目中使用 axios 的答案,我决定使用 Puppeteer 集成到 Discord 中。下面的代码是我如何完成的。

const { Discord, CommandInteraction, MessageEmbed } = require('discord.js');
const puppeteer = require('puppeteer-extra');
const fs = require('fs');
const ChromeLauncher = require('chrome-launcher');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
const Ua = require('puppeteer-extra-plugin-anonymize-ua');
const prompt = require("prompt-sync")({ sigint: true });
const util = require('util');
const UserAgent = require('user-agents');
const request = require('request')
const wait = require('node:timers/promises').setTimeout;
puppeteer.use(StealthPlugin());
puppeteer.use(Ua());




//------------------ Proxy Integration ------------------//
var proxyData = "proxies.json";
        function getProxies() {
            if (fs.existsSync(proxyData)) {
                return JSON.parse(fs.readFileSync(proxyData));
            }

        var proxies = {
            proxies: prompt("Input Proxy List Separated By Commas: ")?.split(/,\s*/) ?? [],
            proxyUsername: prompt("Input Proxy Username: "),
            proxyPassword: prompt("Input Proxy Password: ")
        };

        fs.writeFileSync(proxyData, JSON.stringify(proxies));

        return proxies [Math.floor(Math.random() * proxies.length)];
    }
        let { proxies, proxyUsername, proxyPassword } = getProxies();

        let proxyList = (`${proxies[Math.floor(Math.random() * proxies.length)]}`);

        console.log(proxyList)


module.exports = {
    name: 'status',
    description: 'Check Status Of Nike Order',
    permission: 'USE_APPLICATION_COMMANDS',
    options: [
        {
            name: 'email',
            description: 'Input Account Email.',
            required: true,
            type: 'STRING'
        },
        {
            name: 'ordernumber',
            description: 'Input Order Number',
            required: true,
            type: 'STRING'
        },
    ],

    /**
     * 
     * @param {CommandInteraction} interaction 
     */
    async execute(interaction) {

        const { options } = interaction;
        let email = options.getString("email");
        let orderNumber = options.getString("ordernumber");

        await interaction.deferReply();
        await wait(1000);

try {
        const browser = await puppeteer.launch({ 
            headless: false,
            executablePath: `C:/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe`,
            userDataDir: `%LOCALAPPDATA%/BraveSoftware/Brave-Browser/User Data/Default`,

            args: [
                '--no-sandbox',
                '--disable-setuid-sandbox',
                '--disable-web-security',
                '--disable-features=IsolateOrigins,site-per-process',
                `--enable-auto-reload=true`,
                `--proxy-server=http://${proxyList}`
                ],
            })


            const page = await browser.newPage()
            await page.authenticate({username:proxyUsername, password:proxyPassword});
            await page.goto("https://www.nike.com/orders/details/")

            await page.evaluate(async() => {
                await new Promise(function(resolve) { 
                       setTimeout(resolve, 1000)
                });
            });

            await page.waitForSelector('#orderNumber');
            await page.click("#orderNumber", { delay: 250 });
            await page.keyboard.type(`${orderNumber}`, { delay: 250 })
        
        
            await page.waitForSelector('#email');
            await page.click('#email', { delay: 500 })
            await page.keyboard.type(`${email}`, { delay: 250 })
            await page.keyboard.press("Enter", { delay: 250 });


        await page.waitForSelector(`p[data-testid="Order Purchase Type"]`)
        let purchaseInfo = await page.evaluate(() => {
            let purchaseTag = document.querySelectorAll(`p[data-testid="Order Purchase Type"]`);
            let purchase = [];
            purchaseTag.forEach((tag) => {
                purchase.push(tag.innerText)
            })
            return purchase;
        });


        await page.waitForSelector(`h3[data-testid="Product Title"]`);
        let productInfo = await page.evaluate(() => {
            let productTag = document.querySelectorAll(`h3[data-testid="Product Title"]`);
            let product = [];
            productTag.forEach((tag) => {
                product.push(tag.innerText)
            })
            return product;
        });
    
    
    
        await page.waitForSelector(`p[data-testid="Product Size"]`);
        let productSize = await page.evaluate(() => {
            let sizeTag = document.querySelectorAll(`p[data-testid="Product Size"]`);
            let size = [];
            sizeTag.forEach((tag) => {
                size.push(tag.innerHTML)
            })
            return size;
        });

    
    
            await page.waitForSelector(`div[class="shipment-status-messaging mb3-sm u-full-width"]`);
            let deliveryInfo = await page.evaluate(() => {
                let deliveryTag = document.querySelectorAll(`div[class="shipment-status-messaging mb3-sm u-full-width"]`);
                let delivery = [];
                deliveryTag.forEach((tag) => {
                    delivery.push(tag.innerText)
                })
                return delivery;
            });


            await page.waitForSelector(`p[data-testid="Product Style Color"]`);
            let skuInfo = await page.evaluate(() => {
                let skuTag = document.querySelectorAll(`p[data-testid="Product Style Color"]`);
                let sku = [];
                skuTag.forEach((tag) => {
                    sku.push(tag.innerText)
                })
                return sku.toString();
            });
    

            browser.close()

            let imgSKU = skuInfo.replace("-", "_")
        
            let updatedSKU = imgSKU.replace("Style ", "")
            console.log(updatedSKU)


            let orderEmbed = new MessageEmbed()
            .setTitle('Order Checked 🧪')
            .setColor('#2B2F51')
            .addFields(
                { name: '**Account:**', value: `${email}` },
                { name: '**Status:**', value: `${deliveryInfo}` },
                { name: '**Product Name:**', value: `${productInfo}`, inline: true },
                { name: '**Order Date:**', value: `${purchaseInfo}`, inline: true },
                { name: '**Order Number:**', value: `${orderNumber}`, inline: true },
                { name: '**Size:**', value: `${productSize}` },
            )
            .setTimestamp()
            .setThumbnail(`https://images.nike.com/is/image/DotCom/${updatedSKU}?/$OMEGA_PRODUCT$.png`)
                wait(2000);
            interaction.editReply({ embeds: [ orderEmbed ]})

        } catch (error) {
                const errorEmbed = new MessageEmbed()
                errorEmbed.setTitle('❌ Error Encountered ❌')
                errorEmbed.setDescription('No variants/product found')
                errorEmbed.setTimestamp()
                interaction.editReply({ embeds: [ errorEmbed ]})
        }
    }
        
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM