golang访问Github热门仓库和开发者数据插件库go-trending的使用

Golang访问Github热门仓库和开发者数据插件库go-trending的使用

简介

go-trending是一个用Go语言编写的包,用于从Github获取热门仓库和开发者数据。

功能特性

  • 获取热门仓库
  • 获取热门开发者
  • 获取Github支持的所有编程语言
  • 支持按时间和编程语言筛选
  • 支持GitHub Enterprise

安装

使用go get命令安装:

$ go get github.com/andygrunwald/go-trending

或者安装/更新到最新master版本:

$ go get -u github.com/andygrunwald/go-trending@master

使用示例

获取今日所有语言的热门仓库

package main

import (
	"fmt"

	"github.com/andygrunwald/go-trending"
)

func main() {
	trend := trending.NewTrending()

	// 获取今日项目
	projects, err := trend.GetProjects(trending.TimeToday, "")
	if err != nil {
		panic(err)
	}

	for index, project := range projects {
		i := index + 1
		if len(project.Language) > 0 {
			fmt.Printf("%d: %s (written in %s with %d ★ )\n", i, project.Name, project.Language, project.Stars)
		} else {
			fmt.Printf("%d: %s (with %d ★ )\n", i, project.Name, project.Stars)
		}
	}
}

获取本周Go语言的热门仓库

package main

import (
	"fmt"

	"github.com/andygrunwald/go-trending"
)

func main() {
	trend := trending.NewTrending()

	// 获取本周Go项目
	projects, err := trend.GetProjects(trending.TimeWeek, "go")
	if err != nil {
		panic(err)
	}

	for index, project := range projects {
		i := index + 1
		if len(project.Language) > 0 {
			fmt.Printf("%d: %s (written in %s with %d ★ )\n", i, project.Name, project.Language, project.Stars)
		} else {
			fmt.Printf("%d: %s (with %d ★ )\n", i, project.Name, project.Stars)
		}
	}
}

获取本月Swift语言的趋势开发者

package main

import (
	"fmt"

	"github.com/andygrunwald/go-trending"
)

func main() {
	trend := trending.NewTrending()

	developers, err := trend.GetDevelopers(trending.TimeMonth, "swift")
	if err != nil {
		panic(err)
	}

	for index, developer := range developers {
		i := index + 1
		fmt.Printf("%d: %s (%s)\n", i, developer.DisplayName, developer.FullName)
	}
}

获取可用语言列表

package main

import (
	"fmt"

	"github.com/andygrunwald/go-trending"
)

func main() {
	trend := trending.NewTrending()

	// 获取语言列表
	languages, err := trend.GetLanguages()
	if err != nil {
		panic(err)
	}

	for index, language := range languages {
		i := index + 1
		fmt.Printf("%d: %s (%s)\n", i, language.Name, language.URLName)
	}
}

许可证

该项目采用MIT许可证发布。


更多关于golang访问Github热门仓库和开发者数据插件库go-trending的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang访问Github热门仓库和开发者数据插件库go-trending的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用go-trending访问Github热门仓库和开发者数据

go-trending是一个Golang库,用于获取Github上的热门仓库和开发者数据。它提供了简单易用的API来查询Github的trending页面内容。

安装

首先安装go-trending库:

go get github.com/andygrunwald/go-trending

基本使用

1. 获取今日热门仓库

package main

import (
	"fmt"
	"github.com/andygrunwald/go-trending"
)

func main() {
	client := trending.NewClient()
	
	// 获取今日热门仓库
	repos, err := client.GetTrendingRepos(trending.TimeToday, "")
	if err != nil {
		panic(err)
	}

	fmt.Println("今日热门仓库:")
	for i, repo := range repos {
		fmt.Printf("%d. %s (%s)\n", i+1, repo.Name, repo.URL)
		fmt.Printf("   描述: %s\n", repo.Description)
		fmt.Printf("   语言: %s, 星标: %d\n", repo.Language, repo.Stars)
		fmt.Println("----------------------------------------")
	}
}

2. 获取本周热门开发者

func getTrendingDevelopers() {
	client := trending.NewClient()
	
	// 获取本周热门开发者
	devs, err := client.GetTrendingDevelopers(trending.TimeWeek, "")
	if err != nil {
		panic(err)
	}

	fmt.Println("\n本周热门开发者:")
	for i, dev := range devs {
		fmt.Printf("%d. %s (%s)\n", i+1, dev.DisplayName, dev.URL)
		fmt.Printf("   用户名: %s\n", dev.UserName)
		if dev.Repo.Name != "" {
			fmt.Printf("   热门仓库: %s (%s)\n", dev.Repo.Name, dev.Repo.Description)
		}
		fmt.Println("----------------------------------------")
	}
}

高级用法

1. 按语言过滤

func getTrendingReposByLanguage() {
	client := trending.NewClient()
	
	// 获取Go语言的今日热门仓库
	repos, err := client.GetTrendingRepos(trending.TimeToday, "go")
	if err != nil {
		panic(err)
	}

	fmt.Println("\n今日Go语言热门仓库:")
	for i, repo := range repos {
		fmt.Printf("%d. %s (%s)\n", i+1, repo.Name, repo.URL)
		fmt.Printf("   语言: %s, 星标: %d\n", repo.Language, repo.Stars)
	}
}

2. 获取不同时间段的趋势

func getTrendingWithDifferentTimeSpans() {
	client := trending.NewClient()
	
	// 可用的时间段选项
	timeSpans := []trending.TimeSpan{
		trending.TimeToday,
		trending.TimeWeek,
		trending.TimeMonth,
	}

	for _, span := range timeSpans {
		repos, err := client.GetTrendingRepos(span, "")
		if err != nil {
			panic(err)
		}

		fmt.Printf("\n%s的热门仓库(共%d个):\n", span, len(repos))
		for i := 0; i < 3 && i < len(repos); i++ {
			fmt.Printf("  %d. %s\n", i+1, repos[i].Name)
		}
	}
}

完整示例

package main

import (
	"fmt"
	"github.com/andygrunwald/go-trending"
)

func main() {
	client := trending.NewClient()

	// 1. 获取今日热门仓库
	fmt.Println("=== 今日热门仓库 ===")
	repos, err := client.GetTrendingRepos(trending.TimeToday, "")
	if err != nil {
		panic(err)
	}
	printRepos(repos, 5)

	// 2. 获取Go语言本周热门仓库
	fmt.Println("\n=== Go语言本周热门仓库 ===")
	goRepos, err := client.GetTrendingRepos(trending.TimeWeek, "go")
	if err != nil {
		panic(err)
	}
	printRepos(goRepos, 5)

	// 3. 获取本月热门开发者
	fmt.Println("\n=== 本月热门开发者 ===")
	devs, err := client.GetTrendingDevelopers(trending.TimeMonth, "")
	if err != nil {
		panic(err)
	}
	printDevelopers(devs, 5)
}

func printRepos(repos []trending.Repository, max int) {
	if max > len(repos) {
		max = len(repos)
	}
	for i := 0; i < max; i++ {
		repo := repos[i]
		fmt.Printf("%d. %s (%s)\n", i+1, repo.Name, repo.URL)
		fmt.Printf("   描述: %s\n", repo.Description)
		fmt.Printf("   语言: %s, 星标: %d, 今日新增: %d\n", 
			repo.Language, repo.Stars, repo.StarsToday)
		fmt.Println("----------------------------------------")
	}
}

func printDevelopers(devs []trending.Developer, max int) {
	if max > len(devs) {
		max = len(devs)
	}
	for i := 0; i < max; i++ {
		dev := devs[i]
		fmt.Printf("%d. %s (%s)\n", i+1, dev.DisplayName, dev.URL)
		fmt.Printf("   用户名: %s\n", dev.UserName)
		if dev.Repo.Name != "" {
			fmt.Printf("   热门仓库: %s - %s\n", dev.Repo.Name, dev.Repo.Description)
		}
		fmt.Println("----------------------------------------")
	}
}

注意事项

  1. go-trending是通过爬取Github的trending页面实现的,不是官方API
  2. 如果Github的页面结构发生变化,可能需要更新库版本
  3. 频繁请求可能会被Github限制,建议适当控制请求频率
  4. 返回的数据结构与Github页面展示的内容一致

这个库非常适合需要获取Github趋势数据但又不想使用复杂API的项目。通过简单的几行代码,你就可以获取到Github上最热门的项目和开发者信息。

回到顶部