# 微信小程序随机头像与昵称

不通过原因

你好,小程序账号登录功能暂未符合规范要求,请在用户了解体验小程序功能后,再要求用户进行账号登录。

官网要求

​3.1.2  小程序所提供的所有服务类目功能,必须在小程序首页得到体现,即在小程序首页必须能直达或者经过 2 次点击到达所有本文档 2(服务类目审核)中提交的服务类目页面;

由于之前小程序设置有注册功能,需要用户输入头像和昵称后方才可以进入首页,频频审核不通过。

仔细阅读官网上的要求后决定重新整改一下,目标是最大程度不改源码。

索性增加一个随机头像昵称的功能,保留原有的输入功能,如果用户不想输入,那就随机给予一个吧,反正我们的需求是拿到 openid 就好。

# 1.获取随机头像

找到了一个很有意思的随机头像网站:https://api.multiavatar.com (opens new window)

那下面的路就有两条,第一条就是直接用该网站的头像随机生成提供给用户,第二条就是利用 python 爬取一些头像保存,作为静态资源直接使用。

我选择了第二条。代码也十分简单。


import requests
from time import sleep
from io import BytesIO
import os
from PIL import Image


class Spider:
    def __init__(self):
        self.url = 'https://api.multiavatar.com'
        self.path = r"D:\spiders\随机头像PNG"

    def run(self):
        for i in range(0, 1000):
            whole_url = f"{self.url}/{i}.png"
            try:
                response = requests.get(whole_url)
                if response.status_code == 200:
                    image = Image.open(BytesIO(response.content))
                    image.save(os.path.join(self.path, f"{i}.png"))
                    print(f"第{i}个下载完成")
            except Exception as e:
                sleep(3)
                print(e)
                continue

if __name__ == '__main__':
    spider = Spider()
    spider.run()

然后将上传的图片资源上传至 minio 文件服务器,直接通过 URL 使用就可以了,例如:https://zhang.beer:8888/ache/avatar/0.png (opens new window)。关于 minio 的部署详见这篇博客:

# 2.获取随机昵称

在这里我定义了一个 json 文件,同样的上传至 minio 文件服务器了:https://zhang.beer:8888/ache/nickname/name.json (opens new window)

只需要随机一个前缀 prefix 拼接随机一个后缀 suffix 即可。

# 3.代码

const randomGenerate = async (call) => {
  if (randomLoading.value) return;
  randomLoading.value = true;
  const avatarUrlOnline = `https://zhang.beer:8888/ache/avatar/${Math.floor(
    Math.random() * 1000
  )}.png`; // 拼接随机头像URL
  const res = await new Promise((resolve) => {
    // 必须得先下载头像到本地临时文件,否则报错
    uni.downloadFile({
      url: avatarUrlOnline,
      success: (r) => resolve(r),
    });
  });
  avatarUrl.value = res.tempFilePath;
  if (!nameJson.value) {
    const res = await uni.request({
      url: "https://zhang.beer:8888/nickname/name.json",
      method: "get",
    });
    nameJson.value = res.data;
  }
  const prefix = nameJson.value.prefix; // 获取所有前缀
  const suffix = nameJson.value.suffix; // 获取所有后缀
  const prefix_index = Math.floor(Math.random() * prefix.length); // 根据随机获取一个前缀
  const suffix_index = Math.floor(Math.random() * suffix.length); // 根据随机获取一个后缀
  const text = prefix[prefix_index] + suffix[suffix_index];
  nickname.value = "";
  let index = 0;
  const typingInterval = setInterval(() => {
    // 打字机效果输入昵称
    if (index < text.length) {
      nickname.value += text.charAt(index);
      index++;
    } else {
      clearInterval(typingInterval);
      randomLoading.value = false;
      call(); // 后续操作
    }
  }, 75);
};

# 4.效果图

# 5.小程序:计了么

最直观的效果微信搜索计了么

上次更新: 2 days ago