go-trending: github.com/andygrunwald/go-trending Index | Examples | Files

package trending

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

Package trending provides access to github`s trending repositories and developers. The data will be collected from githubs website at https://github.com/trending and https://github.com/trending/developers.

Construct a new trending client, then use the various functions on the client to access the trending content from GitHub. For example:

trend := trending.NewTrending()

// Get trending projects of language "go" for today.
projects, err := trend.GetProjects(trending.TimeToday, "go")

GitHub Enterprise

If you are running a GitHub Enterprise yourself you can use this library as well. For such cases you can change the BaseURL of the library:

myURL, _ := url.Parse("https://my.github.enterprise.com")
trend := trending.NewTrending()
trend.BaseURL = myURL

// Get trending projects of language "go" for today.
projects, err := trend.GetProjects(trending.TimeToday, "go")

Index

Examples

Package Files

doc.go trending.go

Constants

const (
    // TimeToday is limit of the current day.
    TimeToday = "daily"
    // TimeWeek will focus on the complete week
    TimeWeek = "weekly"
    // TimeMonth include the complete month
    TimeMonth = "monthly"
)

These are predefined constants to define the timerange of the requested repository or developer. If trending repositories or developer are requested, a timeframe has to be added. It is suggested to use this constants for this.

type Developer Uses

type Developer struct {
    // ID is the github`s unique identifier of the user / organisation like 1342004 (google) or 698437 (airbnb).
    ID  int

    // // DisplayName is the username of the developer / organisation like "torvalds" or "apache".
    DisplayName string

    // FullName is the real name of the developer / organisation like "Linus Torvalds" (for "torvalds") or "The Apache Software Foundation" (for "apache").
    FullName string

    // URL is the http(s) address of the developer / organisation reflected as url.URL datastructure like https://github.com/torvalds.
    URL *url.URL

    // Avatar is the http(s) address of the developer / organisation avatar as url.URL datastructure like https://avatars1.githubusercontent.com/u/1024025?v=3&s=192.
    Avatar *url.URL
}

Developer reflects a single trending developer / organisation. It provides information as printed on the source website https://github.com/trending/developers.

type Language Uses

type Language struct {
    // Name is the human readable name of the language like "Go" or "Web Ontology Language"
    Name string

    // URLName is the machine readable / usable name of the language used for filtering / url parameters like "go" or "web-ontology-language".
    // Please use URLName if you want to filter your requests.
    URLName string

    // URL is the filter URL for the language like "https://github.com/trending?l=go" for "go" or "https://github.com/trending?l=unknown" or "unknown".
    URL *url.URL
}

Language reflects a single (programing) language offered by github for filtering. If you call "GetProjects" you are able to filter by programing language. For filter input you should use the URLName of Language.

type Project Uses

type Project struct {
    // Name is the name of the repository including user / organisation like "andygrunwald/go-trending" or "airbnb/javascript".
    Name string

    // Owner is the name of the user or organisation. "andygrunwald" in "andygrunwald/go-trending" or "airbnb" in "airbnb/javascript".
    Owner string

    // RepositoryName is the name of therepository. "go-trending" in "andygrunwald/go-trending" or "javascript" in "airbnb/javascript".
    RepositoryName string

    // Description is the description of the repository like "JavaScript Style Guide" (for "airbnb/javascript").
    Description string

    // Language is the determined programing language of the project (by Github).
    // Sometimes Language is an empty string, because Github can`t determine the (main) programing language (like for "google/deepdream").
    Language string

    // Stars is the number of github stars this project received in the given timeframe (see TimeToday / TimeWeek / TimeMonth constants).
    // This number don`t reflect the overall stars of the project.
    Stars int

    // URL is the http(s) address of the project reflected as url.URL datastructure like "https://github.com/Workiva/go-datastructures".
    URL *url.URL

    // ContributorURL is the http(s) address of the contributors page of the project reflected as url.URL datastructure like "https://github.com/Workiva/go-datastructures/graphs/contributors".
    ContributorURL *url.URL

    // Contributor are a collection of Developer.
    // Be aware that this collection don`t covers all contributor.
    // Only those who are mentioned at githubs trending page.
    Contributor []Developer
}

Project reflects a single trending repository. It provides information as printed on the source website https://github.com/trending.

type Trending struct {
    // Base URL for requests.
    // Defaults to the public GitHub website, but can be set to a domain endpoint to use with GitHub Enterprise.
    // BaseURL should always be specified with a trailing slash.
    BaseURL *url.URL

    // Client to use for requests
    Client *http.Client
}

Trending reflects the main datastructure of this package. It doesn`t provide an exported state, but based on this the methods are called. To receive a new instance just add

package main

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

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

func NewTrending Uses

func NewTrending() *Trending

NewTrending is the main entry point of the trending package. It provides access to the API of this package by returning a Trending datastructure. Usage:

trend := trending.NewTrending()
projects, err := trend.GetProjects(trending.TimeToday, "")
...

func NewTrendingWithClient Uses

func NewTrendingWithClient(client *http.Client) *Trending

NewTrendingWithClient allows providing a custom http.Client to use for fetching trending items. It allows setting timeouts or using 3rd party http.Client implementations, such as Google App Engine urlfetch.Client.

func (*Trending) GetDevelopers Uses

func (t *Trending) GetDevelopers(time, language string) ([]Developer, error)

GetDevelopers provides a slice of Developer filtered by the given time and language.

time can be filtered by applying by one of the Time* constants (e.g. TimeToday, TimeWeek, ...). If an empty string will be applied TimeToday will be the default (current default by Github).

language can be filtered by applying a programing language by your choice The input must be a known language by Github and be part of GetLanguages(). Further more it must be the Language.URLName and not the human readable Language.Name. If language is an empty string "All languages" will be applied (current default by Github).

func (*Trending) GetLanguages Uses

func (t *Trending) GetLanguages() ([]Language, error)

GetLanguages will return a slice of Language known by gitub. With the Language.URLName you can filter your GetProjects / GetDevelopers calls.

func (*Trending) GetProjects Uses

func (t *Trending) GetProjects(time, language string) ([]Project, error)

GetProjects provides a slice of Projects filtered by the given time and language.

time can be filtered by applying by one of the Time* constants (e.g. TimeToday, TimeWeek, ...). If an empty string will be applied TimeToday will be the default (current default by Github).

language can be filtered by applying a programing language by your choice. The input must be a known language by Github and be part of GetLanguages(). Further more it must be the Language.URLName and not the human readable Language.Name. If language is an empty string "All languages" will be applied (current default by Github).

func (*Trending) GetTrendingLanguages Uses

func (t *Trending) GetTrendingLanguages() ([]Language, error)

GetTrendingLanguages will return a slice of Language that are currently trending. Trending languages are displayed at https://github.com/trending on the right side. With the Language.URLName you can filter your GetProjects / GetDevelopers calls.

Package trending imports 6 packages (graph) and is imported by 3 packages. Updated 2019-05-14. Refresh now. Tools for package owners.