什么?每天早上准时9点给你发送github项目推荐邮件

前言

  • 你是否也想过每天给你定时推送github的开源项目给你?

  • 你是否也想过没有服务器的我该怎么实现?

  • 你是否也想过学过node,前端er该怎么node实战?

本文即将带领你们来使用nest+vercel来实现每天九点进行邮件通知今天的github项目推荐~

我们可以在 GitHub trending 页面上搜到最近火热的开源项目,那能不能做一个程序,自动爬取这些火热的开源项目呢?

这是一个类似于 GitHub trending 的网站,提供了 API 供我们调用。 GitHub trending 现在的反爬虫机制做的很强,对于我这种爬虫小白来说破解不了。

来到这个 ossinsight 页面,就可以看到这个网站提供的 api ,没有任何限制,直接调用即可。

bash 复制代码
https://api.ossinsight.io/v1/trends/repos?period=past_week&language=${lang}

项目准备

一个邮箱、一个github账号、一个verrcel账号,具体注册流程可以自行百度,这里不过多叙~

搭建nest项目(nest的基础知识)

首先,你需要全局安装 Nest CLI:

css 复制代码
npm i -g @nestjs/cli

然后,创建一个新的项目:

arduino 复制代码
nest new project-name

这将生成一个新的 NestJS 项目,其中包含了基本的文件结构和依赖。

  1. 进入项目目录

创建项目后,进入项目目录:

bash 复制代码
cd project-name

4. 安装依赖

在项目目录中,安装项目依赖:

复制代码
npm install

或者,如果你使用 yarn:

复制代码
yarn install

5. 启动项目

安装完依赖后,你可以启动项目:

arduino 复制代码
npm run start

或者,如果你使用 yarn:

sql 复制代码
yarn start

这将启动开发服务器,NestJS 应用将在 http://localhost:3000 上运行。

6. 生成模块和控制器

NestJS 使用模块化结构,你可以使用 CLI 来生成模块和控制器:

arduino 复制代码
nest g module cats
复制代码
nest g controller cats

这将创建一个 CatsModule 和一个 CatsController

7. 生成服务

同样,你可以生成服务:

复制代码
nest g service cats

这将创建一个 CatsService

8. 编写代码

现在,你可以开始编写代码了。NestJS 遵循模块化和分层架构,所以你的代码应该被组织在不同的模块、控制器、服务等中。

9. 运行测试

NestJS 支持测试,你可以使用 CLI 来生成测试文件:

kotlin 复制代码
nest g class cats.service.spec

然后,你可以使用 Jest 或其他测试框架来编写和运行测试。

10. 构建和部署

当你的项目准备好部署时,你可以构建生产版本:

arduino 复制代码
npm run build

然后,使用 nodepm2 等进程管理器来启动你的应用。

这些是搭建一个基本 NestJS 项目的步骤。NestJS 还提供了许多其他功能,如中间件、守卫、管道等,你可以根据需要在你的项目中使用这些功能。

本次定时发送邮件的关键代码

kotlin 复制代码
async findOne(lang: string) {
    const config = {
      method: 'get',
      maxBodyLength: Infinity,
      url: 'https://api.ossinsight.io/v1/trends/repos?period=past_week&language='+lang,
      headers: {
        Accept: "application/json",
      },
    };
    const res = await axios(config);
    const data = await this.getRepoExtraInfoByStar(res.data.data.rows);
    return {
      data
    };
  }

定时任务

typescript 复制代码
import { Injectable } from '@nestjs/common';
import { Cron } from '@nestjs/schedule';
import { GithubService } from '../github/github.service';

@Injectable()
export class CronService {
  constructor(private readonly githubService: GithubService) {}

  // 使用 @Cron 装饰器来定义一个定时执行的方法
  @Cron('00 09 * * *')
  handleCronJob() {
    this.githubService.findOne('JavaScript');
  }
}

邮件service

typescript 复制代码
import { Injectable } from '@nestjs/common';
import { MailerService } from '@nestjs-modules/mailer';

@Injectable()
export class EmailService {
  constructor(private readonly mailerService: MailerService) {}
  async sendEmail({to, subject, text,html}) {
    console.log('process.env.NEST_EMAIL', process.env.NEST_EMAIL)
    // Implement your email sending logic here
    return await this.mailerService.sendMail({
      to,
      subject,
      text,
      html
    })
  }
}

邮件module,这里使用环境变量进行

php 复制代码
import { Module } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { MailerModule } from '@nestjs-modules/mailer';
import { EmailService } from './email.service';

@Module({
  imports: [
    MailerModule.forRootAsync({
      useFactory: (configService: ConfigService) => ({
        transport: {
          host: 'smtp.qq.com',
          port: 587,
          secure: false,
          auth: {
            user: configService.get<string>('NEST_EMAIL'),
            pass: configService.get<string>('NEST_EMAIL_PASSWORD'),
          }
        },
        defaults: {
          from: "github 每日推荐" <configService.get<string>('NEST_EMAIL')>
        }
      }),
      inject: [ConfigService], // 注入ConfigService
    }),
  ],
  providers: [EmailService],
  exports: [EmailService],
})
export class EmailModule {}

上面的lang传参仅限以下的字符串

最终得到的效果,有兴趣的可以评论区拿GitHub项目地址~

相关推荐
程序员清洒36 分钟前
Flutter for OpenHarmony:Text — 文本显示与样式控制
开发语言·javascript·flutter
雨季6661 小时前
Flutter 三端应用实战:OpenHarmony 简易“动态内边距调节器”交互模式深度解析
javascript·flutter·ui·交互·dart
天人合一peng1 小时前
Unity中button 和toggle监听事件函数有无参数
前端·unity·游戏引擎
会飞的战斗鸡2 小时前
JS中的链表(含leetcode例题)
javascript·leetcode·链表
方也_arkling2 小时前
别名路径联想提示。@/统一文件路径的配置
前端·javascript
毕设源码-朱学姐2 小时前
【开题答辩全过程】以 基于web教师继续教育系统的设计与实现为例,包含答辩的问题和答案
前端
qq_177767372 小时前
React Native鸿蒙跨平台剧集管理应用实现,包含主应用组件、剧集列表、分类筛选、搜索排序等功能模块
javascript·react native·react.js·交互·harmonyos
qq_177767372 小时前
React Native鸿蒙跨平台自定义复选框组件,通过样式数组实现选中/未选中状态的样式切换,使用链式调用替代样式数组,实现状态驱动的样式变化
javascript·react native·react.js·架构·ecmascript·harmonyos·媒体
web打印社区3 小时前
web-print-pdf:突破浏览器限制,实现专业级Web静默打印
前端·javascript·vue.js·electron·html
RFCEO3 小时前
前端编程 课程十三、:CSS核心基础1:CSS选择器
前端·css·css基础选择器详细教程·css类选择器使用方法·css类选择器命名规范·css后代选择器·精准选中嵌套元素