【问题标题】:Struggling using pokeapi trying to get description of ability努力使用 pokeapi 试图获得能力的描述
【发布时间】:2021-12-26 02:32:18
【问题描述】:
const fetch = require("node-fetch");
const Discord = module.require("discord.js");

module.exports = {
    name: "ability",
    aliases: ["abilities"],
    description: "Displays pokedex information for a given pokemon",
    category: "util",
    requiredArgs: ["query"],
    run: async (client, message, args) => {
      
      const query = args.join(" ");
  
      if (!query) {
        return message.channel.send("Try Again This Time With A Pokemon Name");
      }
  
      try {
        const data = await fetch(
          `https://pokeapi.co/api/v2/ability/${encodeURIComponent(
            query
          )}`
        ).then((res) => res.json());
        let embed = new Discord.MessageEmbed()
        .setDescription(`*${data.flavor_text_entries.flavor_text[1]}*`)
       
       
        message.reply({ embeds: [embed] });
    } catch(err) {
        console.log(err);
        message.reply('NO DATA FOUND')
    }
    
  },
};

我如何获得能力描述?我没有找到任何有关从文档中的 API 获取特定详细信息的信息,因此非常感谢您的帮助!

【问题讨论】:

  • 这样的结构就足够了吗? codepen.io/mbacode/pen/OJjBoZN 主要是因为我无权访问您的代码中实际决定结果的部分。比如encodeURIComponent。没有迹象表明您会得到什么样的响应。

标签: javascript node.js discord discord.js pokeapi


【解决方案1】:

从我通过查看他们的 API 可以看出,您将获得一个多维数组,您需要迭代以获取所需的描述。

在这种情况下,一个好方法是使用for in 循环,这是最佳的,因为一旦您访问了您正在寻找的值,您就可以选择退出break

我无法通过您的问题来判断您是如何准确处理data 的,所以我冒昧地制作了自己的结构。随意使用、编辑它,或做任何适合您需要的事情。

请注意,我正在制作的 fetch 结构在“某种程度上”是动态的,例如选择描述的能力,以及它应该以什么语言显示。

在我的示例中,我将使用其 API 寄存器中具有 4 值的能力,也称为 battle-armor。对于我的示例,结果将是英文。

运行 sn-p 时,等待几秒钟让响应通过。

const getDescription = async (value, lang='en') => {
    const dataList = await fetch(`https://pokeapi.co/api/v2/ability/${value}`)
        .then(response => response.json())
        .catch((error) => console.log(error));
    
    if (dataList) {
        for (const entry in dataList) {
            if (entry === 'flavor_text_entries') { 
                for (const flavor in dataList[`${entry}`]) {
                    if (dataList[`${entry}`][`${flavor}`]['language'].name === `${lang}`) {
                        console.log(dataList[`${entry}`][`${flavor}`].flavor_text);
                        break;
                    }
                }
            }
        }
    } else {
    console.log('No data!');
  }
};

getDescription(4, 'en');

Codepen here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多