AI摘要:本文介绍了`stats-cards`项目,它可以将GitHub项目的`README.md`文件转化为卡片式展示,提升文档的视觉效果和可读性。文章提供了使用`stats-cards`的示例代码和步骤,并展示了如何通过`axios`和`cheerio`从Bilibili、LeetCode和Steam等平台抓取用户数据。作者计划进一步扩展此功能,支持更多平台的数据抓取,并优化数据展示形式。

Powered by 返回门户.

下面是根据你提供的要求和格式改写后的文章:


使用 Stats-Cards 项目展示小卡片

最近我发现一个非常有趣的小项目,stats-cards,它可以将 GitHub 项目的 README.md 文件转化为卡片式展示。通过这个项目,我们可以将文本、图片或其他内容以一种更加生动和直观的形式展示出来。

示例效果

成功实例

项目地址

stats-cards GitHub 项目地址

使用过程

在使用 stats-cards 的过程中,首先需要在项目的 README.md 文件中插入特定的卡片语法。这些卡片语法可以帮助我们轻松地将内容呈现为卡片形式。

例如,以下是一个常见的卡片代码:

成功实例
成功实例

过程:通过这种格式,我们可以快速插入一个小卡片实例,展示一个图像或者其他内容。这个功能非常适合在 README.md 中展示项目的相关图像或统计信息,使得内容更加生动且直观。

总结

通过 stats-cards 项目,我们可以为 README.md 文件增添一种更加灵活且富有表现力的展示方式,不仅提升了文档的视觉效果,也增加了可读性。这对于开源项目、技术博客等场景非常有用。如果你也想尝试这种效果,可以参考上述的示例代码,轻松地将你的 GitHub 项目 README 文件变得更加生动和有趣。

结果:使用 stats-cards 项目后,我成功地在 README.md 中实现了卡片式展示,提升了文档的可读性和视觉效果。通过插入卡片语法,快速实现了图像和内容的展示。

下一阶段目标:下一步,我计划在项目中进一步扩展使用 stats-cards 的功能,例如展示更多网站的数据统计,并将其嵌入到项目的其他部分中,提升项目的互动性和视觉效果。


代码展示部分:网站数据卡片

明白了!以下是根据你要求的

格式重写的关键代码段:


Bilibili 数据抓取关键代码

const axios = require('axios');
const cheerio = require('cheerio');

async function getBilibiliInfo(id) {
  let result = { name: 'username', description: '', following: 0, fans: 0, level: 0 };

  try {
    // 并行请求多个接口
    let [res1, res2] = await Promise.all([ 
      axios.get(`https://m.bilibili.com/space/${id}`), 
      axios.get(`https://api.bilibili.com/x/relation/stat?vmid=${id}`)
    ]);
    
    // 使用 cheerio 解析 HTML 数据
    let $ = cheerio.load(res1.data);
    result.name = $('.base .name').text();  // 获取用户名
    result.level = parseInt($('.base .level i').attr('class').slice(-1));  // 获取用户等级

    // 获取粉丝数与关注数
    result.fans = res2.data.data.follower;
    result.following = res2.data.data.following;
  } catch (e) {
    console.error(e);
  }

  return result;
}

[scode type="lblue"]过程:这个代码段展示了如何通过 axioscheerio 实现对 Bilibili 用户信息的抓取。Promise.all 实现了并行请求多个 API,cheerio 用于解析 HTML 结构并提取用户名称和等级信息。


LeetCode 数据抓取关键代码

const axios = require('axios');

async function getLeetCodeInfo(username) {
  let result = { name: username, easy_solved: 0, medium_solved: 0, star_rating: 0 };

  try {
    // 发起 GraphQL 请求,获取用户编程数据
    let res = await axios.post('https://leetcode.com/graphql', {
      query: `query getUserProfile($username: String!) { matchedUser(username: $username) { submitStats { acSubmissionNum { difficulty count } } profile { starRating } } }`,
      variables: { username }
    });

    // 提取解题数据与评分
    let data = res.data.data.matchedUser.submitStats.acSubmissionNum;
    result.easy_solved = data[1].count;
    result.medium_solved = data[2].count;
    result.star_rating = res.data.data.matchedUser.profile.starRating;
  } catch (e) {
    console.error(e);
  }

  return result;
}

过程:该代码使用 axios 发起 GraphQL 请求获取 LeetCode 用户的解题数据,包括不同难度的解题数量以及用户的星级评分。通过解析返回的数据,得到了所需的统计信息。


Steam 数据抓取关键代码

const axios = require('axios');

async function getSteamInfo() {
  let result = { name: 'username', recent_played_game: '' };

  try {
    // 获取最近玩过的游戏
    let res = await axios.get(`https://api.steampowered.com/IPlayerService/GetRecentlyPlayedGames/v0001/?key=${api_key}&steamid=${steam_id}`);
    result.recent_played_game = res.data.response.total_count > 0 ? res.data.response.games[0].name : "";
  } catch (e) {
    console.error(e);
  }

  return result;
}

过程:在这个代码中,通过 axios.get 请求 Steam API,获取用户最近玩过的游戏。如果有数据返回,就获取第一个游戏的名称。


总结

结果:通过使用 axios 实现的异步数据抓取,能够高效地从 Bilibili、LeetCode 和 Steam 等多个平台获取用户信息。在抓取过程中,使用 Promise.all 来并行处理多个请求,提升了性能,并且使用了 cheerio 和 GraphQL 来解析返回的数据。

下一阶段目标:我计划进一步扩展此功能,支持更多平台的数据抓取,并优化数据展示的形式,例如引入前端展示框架来动态呈现这些信息。


最后修改:2024 年 11 月 14 日
如果觉得我的文章挺有趣,赞赏一杯小奶茶
END
本文作者:
文章标题:README的乐趣
本文地址:https://www.maxtral.fun/index.php/archives/145/
版权说明:若无注明,本文皆MAXBROSER原创,转载请保留文章出处。