用 Go 实现一个 GitHub Trending API

背景

上一篇文章Go 每日一库之 bubbletea我们介绍了炫酷的 TUI 程序框架 — bubbletea。最后实现了一个拉取 GitHub Trending 仓库,并显示在控制台的程序。由于 GitHub 没有提供官方的 Trending API,我们用goquery自己实现了一个。上篇文章由于篇幅关系,没有介绍如何实现。本文我整理了一下代码,并以单独的代码库形式开放出来。

先观察

首先,我们来观察一下 GitHub Trending 的结构:

左上角可以切换仓库(Repositories)和开发者(Developers)。右边可以选择语言(Spoken Language,本地语言,汉语、英文等)、语言(Language,编程语言,Golang、C++等)和时间范围(Date Range,支持 3 个维度,Today、This week、This month)。

然后下面是每个仓库的信息:

① 仓库作者和名字

② 仓库描述

③ 主要使用的编程语言(创建仓库时设置的),也可能没有

④ 星数

⑤ fork 数

⑥ 贡献者列表

⑦ 选定的时间范围内(Today、This week、This month)新增多少星数

开发者页面也是类似的,只不过信息少了很多:

① 作者信息

② 最火的仓库信息

注意到切换的开发者页面后,URL 变成为github.com/trending/developers。另外当我们选择本地语言为中文、开发语言为 Go 和时间范围为 Today 后,URL 变为https://github.com/trending/go?since=daily&spoken_language_code=zh,通过在 query-string 中增加相应的键值对表示这种选择。

准备

在 GitHub 上创建仓库ghtrending,clone 到本地,执行go mod init初始化:

$ go mod init github.com/darjun/ghtrending

然后执行go get下载goquery库:

$ go get github.com/PuerkitoBio/goquery

根据仓库和开发者的信息定义两个结构:

type Repository struct {
  Author  string
  Name    string
  Link    string
  Desc    string
  Lang    string
  Stars   int
  Forks   int
  Add     int
  BuiltBy []string
}

type Developer struct {
  Name        string
  Username    string
  PopularRepo string
  Desc        string
}

开爬

要想使用goquery获取相应的信息,我们首先要知道,对应的网页结构。按 F12 打开 chrome 开发者工具,选择Elements页签,即可看到网页结构:

使用左上角的按钮就可以很快速的查看网页上任何内容的结构,我们点击单个仓库条目:

右边Elemen

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值