From a58698606f1f90e794aabbc16fb39207b6554c87 Mon Sep 17 00:00:00 2001 From: kou7306 Date: Thu, 1 Feb 2024 20:31:34 +0900 Subject: [PATCH 1/3] get-rank --- src/create_language_img.go | 4 +- src/funcs/get_activity.go | 124 +++++++++++++++++++++++++++++++++++++ src/funcs/judge_rank.go | 92 +++++++++++++++++++++++++++ src/go.mod | 2 + src/go.sum | 4 ++ 5 files changed, 225 insertions(+), 1 deletion(-) create mode 100644 src/funcs/get_activity.go create mode 100644 src/funcs/judge_rank.go diff --git a/src/create_language_img.go b/src/create_language_img.go index f57f5fa..7ee3d2a 100644 --- a/src/create_language_img.go +++ b/src/create_language_img.go @@ -10,7 +10,7 @@ import ( ) func CreateLanguageImg() { - +// 言語ごとの色をここで決める colordict := map[string]string{ "HTML": "#E34F26", "CSS": "#ffffff", @@ -113,6 +113,8 @@ func CreateLanguageImg() { fmt.Println(err) } + return languages + } // func generateSessionKey() string { diff --git a/src/funcs/get_activity.go b/src/funcs/get_activity.go new file mode 100644 index 0000000..dc91652 --- /dev/null +++ b/src/funcs/get_activity.go @@ -0,0 +1,124 @@ +package funcs + +import ( + "bytes" + "fmt" + "encoding/json" + "net/http" + "github.com/tomoish/readme/funcs" +) + +const ( + // GitHubのアクセストークン + accessToken = "YOUR_GITHUB_ACCESS_TOKEN" + // GitHubのGraphQL APIエンドポイント + apiEndpoint = "https://api.github.com/graphql" +) +// / GraphQLQuery はGraphQLのクエリを格納するための構造体です +type GraphQLQuery struct { + Query string `json:"query"` +} + +// GitHubのGraphQLクエリを定義 +type response struct { + Data struct { + User struct { + ContributionsCollection struct { + TotalCommitContributions int `graphql:"totalCommitContributions"` + TotalIssueContributions int `graphql:"totalIssueContributions"` + TotalPullRequestContributions int `graphql:"totalPullRequestContributions"` + TotalRepositoryContributions int `graphql:"totalRepositoryContributions"` + } `graphql:"contributionsCollection"` + StarredRepositories struct { + TotalCount int `graphql:"totalCount"` + } `graphql:"starredRepositories"` + } `graphql:"user(login: $username)"` + } +} + + +func fetchDataInTimeRange(token string, username string) (int, int, int, int, int, error) { + const query_frame = ` + { + user(login: "%s") { + contributionsCollection { + totalCommitContributions + totalIssueContributions + totalPullRequestContributions + totalRepositoryContributions + } + starredRepositories { + totalCount + } + } + } + ` + + // GraphQLクエリを構築 + query := fmt.Sprintf(query_frame, username) + + // GraphQLクエリを実行して詳細情報を取得 + request := GraphQLQuery{Query: query} + requestBody, err := json.Marshal(request) + if err != nil { + return 0, 0, 0, 0, 0, err + } + + url := "https://api.github.com/graphql" + req, err := http.NewRequest("POST", url, bytes.NewBuffer(requestBody)) + if err != nil { + return 0, 0, 0, 0, 0, err + } + req.Header.Set("Authorization", "Bearer "+token) + + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return 0, 0, 0, 0, 0, err + } + defer resp.Body.Close() + + var response response + if err := json.NewDecoder(resp.Body).Decode(&response); err != nil { + return 0, 0, 0, 0, 0, err + } + + // 総コントリビューション数 + totalCommitContributions := response.Data.User.ContributionsCollection.TotalCommitContributions + // 総スター数 + totalStarredRepositories := response.Data.User.StarredRepositories.TotalCount + // 総Issue数 + totalIssueContributions := response.Data.User.ContributionsCollection.TotalIssueContributions + // 総PullRequest数 + totalPullRequestContributions := response.Data.User.ContributionsCollection.TotalPullRequestContributions + // 総コミット数 + totalRepositoryContributions := response.Data.User.ContributionsCollection.TotalRepositoryContributions + + return totalCommitContributions, totalStarredRepositories, totalIssueContributions, totalPullRequestContributions, totalRepositoryContributions, nil +} + + +// func main() { +// // ユーザー名 +// username := "kou7306" + +// // 期間を指定 +// // from := time.Date(2024, 2, 1, 0, 0, 0, 0, time.UTC) +// // to := time.Date(2024, 2, 1, 23, 59, 59, 0, time.UTC) + +// // GitHubのアクセストークンを設定 +// token,_ :=funcs.GetTokens(0) + +// // データを取得 +// totalCommitContributions, totalStarredRepositories, totalIssueContributions, totalPullRequestContributions, totalRepositoryContributions, err := fetchDataInTimeRange(token, username) +// if err != nil { +// fmt.Println(err) +// return +// } + +// fmt.Println("totalCommitContributions: ", totalCommitContributions) +// fmt.Println("totalStarredRepositories: ", totalStarredRepositories) +// fmt.Println("totalIssueContributions: ", totalIssueContributions) +// fmt.Println("totalPullRequestContributions: ", totalPullRequestContributions) +// fmt.Println("totalRepositoryContributions: ", totalRepositoryContributions) +// } \ No newline at end of file diff --git a/src/funcs/judge_rank.go b/src/funcs/judge_rank.go new file mode 100644 index 0000000..86cf762 --- /dev/null +++ b/src/funcs/judge_rank.go @@ -0,0 +1,92 @@ +package funcs + +import ( + "fmt" + +) + +func JudgeRank()[ + // データを取得 + totalCommitContributions, totalStarredRepositories, totalIssueContributions, totalPullRequestContributions, totalRepositoryContributions, err := fetchDataInTimeRange(token, username) + rank := "C-" + + switch { + case rank < 25: + rank="C-" + case rank < 100: + rank="C" + case rank < 400: + rank="C+" + case rank < 625: + rank="B-" + case rank < 1225: + rank="B" + case rank < 2500: + rank="B+" + case rank < 4900: + rank="A-" + case rank < 8100: + rank="A" + case rank < 10000: + rank="A+" + case 10000 <= rank: + rank="S" + default: + rank="C-" + + } + + // 言語ごとの割合を持ってくる + languages, err := funcs.CreateLanguageImg(username, token) + + // Percent の大きい順にソート + sort.Slice(languages, func(i, j int) bool { + return languages[i].Percent > languages[j].Percent + }) + + //上位2つの言語を保持 + topLanguage := []funcs.LanguageStat{} + // 一時的に保持する + temp := []funcs.LanguageStat{} + + // ソートされた languages を使用する + // 一位がHTML,CSS,JavaScript,TypeScriptじゃない場合 + if languages[0].Name != "HTML" && languages[0].Name != "CSS" && languages[0].Name != "JavaScript" && languages[0].Name != "TypeScript"{ + topLanguage = append(topLanguage, languages[0]) + + } else { + temp = append(temp, languages[0]) + } + + if topLanguage != [] { + topLanguage = append(topLanguage, languages[1]) + } + else{ + if languages[1].Name != "HTML" && languages[1].Name != "CSS" && languages[1].Name != "JavaScript" && languages[1].Name != "TypeScript"{ + topLanguage = append(topLanguage, languages[1]) + topLanguage = append(topLanguage, temp[0]) + } + + // 上位2つの言語がHTML,CSS,JavaScript,TypeScriptの場合 + else{ + temp = append(temp, languages[1]) + // HTML,CSS,JavaScript,TypeScriptじゃない中の一位の言語を探す + for i, language := range languages[2:] { + if language.Name != "HTML" && language.Name != "CSS" && language.Name != "JavaScript" && language.Name != "TypeScript"{ + if language.Percent >= 15.0{ + topLanguage = append(topLanguage, language) + topLanguage = append(topLanguage, temp[0]) + } + else{ + topLanguage = append(topLanguage, temp[0]) + topLanguage = append(topLanguage, temp[1]) + } + + } + } + } + } + + return rank +] + diff --git a/src/go.mod b/src/go.mod index a6827be..3fbb229 100644 --- a/src/go.mod +++ b/src/go.mod @@ -13,5 +13,7 @@ require ( require ( github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/google/go-querystring v1.1.0 // indirect + github.com/shurcooL/githubv4 v0.0.0-20240120211514-18a1ae0e79dc // indirect + github.com/shurcooL/graphql v0.0.0-20230722043721-ed46e5a46466 // indirect golang.org/x/image v0.15.0 // indirect ) diff --git a/src/go.sum b/src/go.sum index 8f1fbac..b7a1aa0 100644 --- a/src/go.sum +++ b/src/go.sum @@ -15,6 +15,10 @@ github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= +github.com/shurcooL/githubv4 v0.0.0-20240120211514-18a1ae0e79dc h1:vH0NQbIDk+mJLvBliNGfcQgUmhlniWBDXC79oRxfZA0= +github.com/shurcooL/githubv4 v0.0.0-20240120211514-18a1ae0e79dc/go.mod h1:zqMwyHmnN/eDOZOdiTohqIUKUrTFX62PNlu7IJdu0q8= +github.com/shurcooL/graphql v0.0.0-20230722043721-ed46e5a46466 h1:17JxqqJY66GmZVHkmAsGEkcIu0oCe3AM420QDgGwZx0= +github.com/shurcooL/graphql v0.0.0-20230722043721-ed46e5a46466/go.mod h1:9dIRpgIY7hVhoqfe0/FcYp0bpInZaT7dc3BYOprrIUE= golang.org/x/image v0.15.0 h1:kOELfmgrmJlw4Cdb7g/QGuB3CvDrXbqEIww/pNtNBm8= golang.org/x/image v0.15.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From adae6efc562e832ada90d02a320f3bd6b37c0e4c Mon Sep 17 00:00:00 2001 From: tomoish Date: Thu, 1 Feb 2024 22:40:59 +0900 Subject: [PATCH 2/3] Add godoenv.Load in get_commit_streak --- src/funcs/get_commit_streak.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/funcs/get_commit_streak.go b/src/funcs/get_commit_streak.go index 224407d..707b9b4 100644 --- a/src/funcs/get_commit_streak.go +++ b/src/funcs/get_commit_streak.go @@ -7,6 +7,8 @@ import ( "log" "net/http" "os" + + "github.com/joho/godotenv" ) const query_frame = ` @@ -66,6 +68,10 @@ func calculateStreak(weeks []struct { } func GetCommitHistory(username string) (int, []int, int, error) { + err := godotenv.Load() + if err != nil { + log.Fatalf("Error loading .env file") + } query := fmt.Sprintf(query_frame, username) request := GraphQLQuery{Query: query} From cdec02663db526cf395155f90b9288f431ec2112 Mon Sep 17 00:00:00 2001 From: kou7306 Date: Thu, 1 Feb 2024 23:30:00 +0900 Subject: [PATCH 3/3] error --- src/{ => funcs}/create_character_img.go | 16 ++- src/{ => funcs}/create_language_img.go | 21 ++-- src/funcs/get_activity.go | 1 - src/funcs/get_commit_streak.go | 6 +- src/funcs/get_repository.go | 10 +- src/funcs/judge_rank.go | 152 ++++++++++++------------ src/go.mod | 12 -- src/go.sum | 25 ---- src/images/gauge.png | Bin 0 -> 53887 bytes src/main.go | 4 +- 10 files changed, 103 insertions(+), 144 deletions(-) rename src/{ => funcs}/create_character_img.go (63%) rename src/{ => funcs}/create_language_img.go (84%) create mode 100644 src/images/gauge.png diff --git a/src/create_character_img.go b/src/funcs/create_character_img.go similarity index 63% rename from src/create_character_img.go rename to src/funcs/create_character_img.go index 449987c..d28496a 100644 --- a/src/create_character_img.go +++ b/src/funcs/create_character_img.go @@ -1,43 +1,41 @@ -package main - +package funcs import ( "fmt" - "github.com/tomoish/readme/funcs" ) func CreateCharacterImg() { // キャラクター画像のパス - characterPath := "funcs/images/character.png" + characterPath := "images/character.png" // ゲージ画像のパス - gaugePath := "funcs/images/gauge.png" + gaugePath := "images/gauge.png" // ゲージ画像生成のためのチャネル gaugeImageChan := make(chan []byte) // ゲージ画像を非同期で生成 go func() { - GaugeBytes, _ := funcs.DrawGauge(0.5) + GaugeBytes, _ := DrawGauge(0.5) gaugeImageChan <- GaugeBytes }() // ゲージ画像をファイルに保存 gaugeBytes := <-gaugeImageChan - err := funcs.SaveImage(gaugePath, gaugeBytes) + err := SaveImage(gaugePath, gaugeBytes) if err != nil { fmt.Println(err) return } // キャラクター画像とゲージ画像を合成 - mergedImage, err := funcs.MergeImages(characterPath, gaugePath) + mergedImage, err := MergeImages(characterPath, gaugePath) if err != nil { fmt.Println(err) return } // 画像をファイルに保存 - err = funcs.SaveImage("funcs/images/merged.png", mergedImage) + err = SaveImage("images/merged.png", mergedImage) if err != nil { fmt.Println(err) return diff --git a/src/create_language_img.go b/src/funcs/create_language_img.go similarity index 84% rename from src/create_language_img.go rename to src/funcs/create_language_img.go index 7ee3d2a..07a0caf 100644 --- a/src/create_language_img.go +++ b/src/funcs/create_language_img.go @@ -1,4 +1,4 @@ -package main +package funcs import ( "fmt" @@ -6,7 +6,6 @@ import ( "github.com/patrickmn/go-cache" - "github.com/tomoish/readme/funcs" ) func CreateLanguageImg() { @@ -30,7 +29,7 @@ func CreateLanguageImg() { // キャッシュにデータが存在しない場合のみデータを保存 if _, found := c.Get(key); !found { // トークンを取得する - token, newCachedData = funcs.GetTokens(0) + token, newCachedData = GetTokens(0) c.Set(key, newCachedData, cache.DefaultExpiration) } else { @@ -42,7 +41,7 @@ func CreateLanguageImg() { fmt.Println("cachedIntData") fmt.Println(cachedIntData) // トークンを取得する - token, newCachedData = funcs.GetTokens(cachedIntData) + token, newCachedData = GetTokens(cachedIntData) c.Set(key, newCachedData, cache.DefaultExpiration) @@ -51,7 +50,7 @@ func CreateLanguageImg() { // ユーザーのリポジトリ情報を取得 username := "kou7306" - repos, err := funcs.GetRepositories(username, token) + repos, err := GetRepositories(username, token) fmt.Printf("repos: %v\n", repos) if err != nil { fmt.Println(err) @@ -64,7 +63,7 @@ func CreateLanguageImg() { // 各リポジトリの言語別のファイルサイズを取得 for _, repo := range repos { - repoDetails, totalSize, err := funcs.GetRepositoryLanguage(repo.Name, repo.Owner, token) + repoDetails, totalSize, err := GetRepositoryLanguage(repo.Name, repo.Owner, token) if err != nil { // エラーハンドリング @@ -82,7 +81,7 @@ func CreateLanguageImg() { } colorCode := "" - languages := []funcs.LanguageStat{} + languages := []LanguageStat{} // 各言語のファイルサイズをパーセンテージで計算 for language, size := range totalLanguageSize { percentage := float64(size) / allSize * 100.0 @@ -96,7 +95,7 @@ func CreateLanguageImg() { colorCode = colordict["others"] } - languages = append(languages, funcs.LanguageStat{ + languages = append(languages, LanguageStat{ Name: language, Percent: percentage, Color: colorCode, @@ -105,15 +104,15 @@ func CreateLanguageImg() { fmt.Printf("languages: %v\n", languages) - ImgBytes, _ := funcs.GenerateLanguageUsageGraph(languages, 600, 250) + ImgBytes, _ := GenerateLanguageUsageGraph(languages, 600, 250) // 画像をファイルに保存 - err = funcs.SaveImage("funcs/images/language.png", ImgBytes) + err = SaveImage("images/language.png", ImgBytes) if err != nil { fmt.Println(err) } - return languages + // return languages } diff --git a/src/funcs/get_activity.go b/src/funcs/get_activity.go index dc91652..f0754f3 100644 --- a/src/funcs/get_activity.go +++ b/src/funcs/get_activity.go @@ -5,7 +5,6 @@ import ( "fmt" "encoding/json" "net/http" - "github.com/tomoish/readme/funcs" ) const ( diff --git a/src/funcs/get_commit_streak.go b/src/funcs/get_commit_streak.go index 707b9b4..7684279 100644 --- a/src/funcs/get_commit_streak.go +++ b/src/funcs/get_commit_streak.go @@ -29,7 +29,7 @@ const query_frame = ` } ` -type response struct { +type res struct { Data struct { User struct { ContributionsCollection struct { @@ -93,7 +93,7 @@ func GetCommitHistory(username string) (int, []int, int, error) { // fmt.Println("response1: ", resp) - var res response + var res res if err := json.NewDecoder(resp.Body).Decode(&res); err != nil { log.Fatalf("Decoder failed: %v", err) } @@ -110,7 +110,7 @@ func GetCommitHistory(username string) (int, []int, int, error) { } } - // fmt.Println("response: ", res.Data.User.ContributionsCollection.ContributionCalendar.Weeks) + // fmt.Println("res: ", res.Data.User.ContributionsCollection.ContributionCalendar.Weeks) // fmt.Println("dailyCommits: ", dailyCommits) // fmt.Println("length of dailyCommits: ", len(dailyCommits)) diff --git a/src/funcs/get_repository.go b/src/funcs/get_repository.go index 58a1633..7c34e91 100644 --- a/src/funcs/get_repository.go +++ b/src/funcs/get_repository.go @@ -7,8 +7,8 @@ import ( "net/http" ) -// / GraphQLQuery はGraphQLのクエリを格納するための構造体です -type GraphQLQuery struct { +// / GraphQLQueries はGraphQLのクエリを格納するための構造体です +type GraphQLQueries struct { Query string `json:"query"` } @@ -20,7 +20,7 @@ type Repository struct { } // レポジトリ取得の際のGraphQLのレスポンスを格納するための構造体です -type GraphQLResponse struct { +type GraphQLResponses struct { Data struct { User struct { RepositoriesContributedTo struct { @@ -76,7 +76,7 @@ func GetRepositories(username, token string) ([]Repository, error) { // GraphQL APIにリクエストを送信 url := "https://api.github.com/graphql" - reqBody := GraphQLQuery{Query: query} + reqBody := GraphQLQueries{Query: query} reqBodyJSON, err := json.Marshal(reqBody) if err != nil { fmt.Println("JSON Marshal Error:", err) @@ -100,7 +100,7 @@ func GetRepositories(username, token string) ([]Repository, error) { defer resp.Body.Close() // レスポンスをパース - var response GraphQLResponse + var response GraphQLResponses err = json.NewDecoder(resp.Body).Decode(&response) if err != nil { fmt.Println("JSON Decode Error:", err) diff --git a/src/funcs/judge_rank.go b/src/funcs/judge_rank.go index 86cf762..c7bda43 100644 --- a/src/funcs/judge_rank.go +++ b/src/funcs/judge_rank.go @@ -1,92 +1,92 @@ package funcs -import ( - "fmt" +// import ( +// "fmt" -) +// ) -func JudgeRank()[ - // データを取得 - totalCommitContributions, totalStarredRepositories, totalIssueContributions, totalPullRequestContributions, totalRepositoryContributions, err := fetchDataInTimeRange(token, username) - rank := "C-" +// func JudgeRank()[ +// // データを取得 +// totalCommitContributions, totalStarredRepositories, totalIssueContributions, totalPullRequestContributions, totalRepositoryContributions, err := fetchDataInTimeRange(token, username) +// rank := "C-" - switch { - case rank < 25: - rank="C-" - case rank < 100: - rank="C" - case rank < 400: - rank="C+" - case rank < 625: - rank="B-" - case rank < 1225: - rank="B" - case rank < 2500: - rank="B+" - case rank < 4900: - rank="A-" - case rank < 8100: - rank="A" - case rank < 10000: - rank="A+" - case 10000 <= rank: - rank="S" - default: - rank="C-" +// switch { +// case rank < 25: +// rank="C-" +// case rank < 100: +// rank="C" +// case rank < 400: +// rank="C+" +// case rank < 625: +// rank="B-" +// case rank < 1225: +// rank="B" +// case rank < 2500: +// rank="B+" +// case rank < 4900: +// rank="A-" +// case rank < 8100: +// rank="A" +// case rank < 10000: +// rank="A+" +// case 10000 <= rank: +// rank="S" +// default: +// rank="C-" - } +// } - // 言語ごとの割合を持ってくる - languages, err := funcs.CreateLanguageImg(username, token) +// // 言語ごとの割合を持ってくる +// languages, err := funcs.CreateLanguageImg(username, token) - // Percent の大きい順にソート - sort.Slice(languages, func(i, j int) bool { - return languages[i].Percent > languages[j].Percent - }) +// // Percent の大きい順にソート +// sort.Slice(languages, func(i, j int) bool { +// return languages[i].Percent > languages[j].Percent +// }) - //上位2つの言語を保持 - topLanguage := []funcs.LanguageStat{} - // 一時的に保持する - temp := []funcs.LanguageStat{} +// //上位2つの言語を保持 +// topLanguage := []funcs.LanguageStat{} +// // 一時的に保持する +// temp := []funcs.LanguageStat{} - // ソートされた languages を使用する - // 一位がHTML,CSS,JavaScript,TypeScriptじゃない場合 - if languages[0].Name != "HTML" && languages[0].Name != "CSS" && languages[0].Name != "JavaScript" && languages[0].Name != "TypeScript"{ - topLanguage = append(topLanguage, languages[0]) +// // ソートされた languages を使用する +// // 一位がHTML,CSS,JavaScript,TypeScriptじゃない場合 +// if languages[0].Name != "HTML" && languages[0].Name != "CSS" && languages[0].Name != "JavaScript" && languages[0].Name != "TypeScript"{ +// topLanguage = append(topLanguage, languages[0]) - } else { - temp = append(temp, languages[0]) - } +// } else { +// temp = append(temp, languages[0]) +// } - if topLanguage != [] { - topLanguage = append(topLanguage, languages[1]) - } - else{ - if languages[1].Name != "HTML" && languages[1].Name != "CSS" && languages[1].Name != "JavaScript" && languages[1].Name != "TypeScript"{ - topLanguage = append(topLanguage, languages[1]) - topLanguage = append(topLanguage, temp[0]) - } +// if topLanguage != [] { +// topLanguage = append(topLanguage, languages[1]) +// } +// else{ +// if languages[1].Name != "HTML" && languages[1].Name != "CSS" && languages[1].Name != "JavaScript" && languages[1].Name != "TypeScript"{ +// topLanguage = append(topLanguage, languages[1]) +// topLanguage = append(topLanguage, temp[0]) +// } - // 上位2つの言語がHTML,CSS,JavaScript,TypeScriptの場合 - else{ - temp = append(temp, languages[1]) - // HTML,CSS,JavaScript,TypeScriptじゃない中の一位の言語を探す - for i, language := range languages[2:] { - if language.Name != "HTML" && language.Name != "CSS" && language.Name != "JavaScript" && language.Name != "TypeScript"{ - if language.Percent >= 15.0{ - topLanguage = append(topLanguage, language) - topLanguage = append(topLanguage, temp[0]) - } - else{ - topLanguage = append(topLanguage, temp[0]) - topLanguage = append(topLanguage, temp[1]) - } +// // 上位2つの言語がHTML,CSS,JavaScript,TypeScriptの場合 +// else{ +// temp = append(temp, languages[1]) +// // HTML,CSS,JavaScript,TypeScriptじゃない中の一位の言語を探す +// for i, language := range languages[2:] { +// if language.Name != "HTML" && language.Name != "CSS" && language.Name != "JavaScript" && language.Name != "TypeScript"{ +// if language.Percent >= 15.0{ +// topLanguage = append(topLanguage, language) +// topLanguage = append(topLanguage, temp[0]) +// } +// else{ +// topLanguage = append(topLanguage, temp[0]) +// topLanguage = append(topLanguage, temp[1]) +// } - } - } - } - } +// } +// } +// } +// } - return rank -] +// return rank +// ] diff --git a/src/go.mod b/src/go.mod index a343b2b..3685d99 100644 --- a/src/go.mod +++ b/src/go.mod @@ -11,28 +11,16 @@ require ( ) require ( - gioui.org v0.2.0 // indirect - gioui.org/cpu v0.0.0-20220412190645-f1e9e8c3b1f7 // indirect - gioui.org/shader v1.0.6 // indirect - gioui.org/x v0.2.0 // indirect git.sr.ht/~sbinet/gg v0.5.0 // indirect github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b // indirect - github.com/andybalholm/stroke v0.0.0-20221221101821-bd29b49d73f0 // indirect github.com/campoy/embedmd v1.0.0 // indirect github.com/go-fonts/liberation v0.3.1 // indirect github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 // indirect github.com/go-pdf/fpdf v0.8.0 // indirect - github.com/go-text/typesetting v0.0.0-20230803102845-24e03d8b5372 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/google/go-querystring v1.1.0 // indirect - github.com/shurcooL/githubv4 v0.0.0-20240120211514-18a1ae0e79dc // indirect - github.com/shurcooL/graphql v0.0.0-20230722043721-ed46e5a46466 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b // indirect - golang.org/x/exp/shiny v0.0.0-20230801115018-d63ba01acd4b // indirect golang.org/x/image v0.15.0 // indirect - golang.org/x/sys v0.11.0 // indirect golang.org/x/text v0.14.0 // indirect gonum.org/v1/plot v0.14.0 // indirect - rsc.io/pdf v0.1.1 // indirect ) diff --git a/src/go.sum b/src/go.sum index 5aeade3..4a23275 100644 --- a/src/go.sum +++ b/src/go.sum @@ -1,12 +1,3 @@ -gioui.org v0.2.0 h1:RbzDn1h/pCVf/q44ImQSa/J3MIFpY3OWphzT/Tyei+w= -gioui.org v0.2.0/go.mod h1:1H72sKEk/fNFV+l0JNeM2Dt3co3Y4uaQcD+I+/GQ0e4= -gioui.org/cpu v0.0.0-20210808092351-bfe733dd3334/go.mod h1:A8M0Cn5o+vY5LTMlnRoK3O5kG+rH0kWfJjeKd9QpBmQ= -gioui.org/cpu v0.0.0-20220412190645-f1e9e8c3b1f7 h1:tNJdnP5CgM39PRc+KWmBRRYX/zJ+rd5XaYxY5d5veqA= -gioui.org/cpu v0.0.0-20220412190645-f1e9e8c3b1f7/go.mod h1:A8M0Cn5o+vY5LTMlnRoK3O5kG+rH0kWfJjeKd9QpBmQ= -gioui.org/shader v1.0.6 h1:cvZmU+eODFR2545X+/8XucgZdTtEjR3QWW6W65b0q5Y= -gioui.org/shader v1.0.6/go.mod h1:mWdiME581d/kV7/iEhLmUgUK5iZ09XR5XpduXzbePVM= -gioui.org/x v0.2.0 h1:/MbdjKH19F16auv19UiQxli2n6BYPw7eyh9XBOTgmEw= -gioui.org/x v0.2.0/go.mod h1:rCGN2nZ8ZHqrtseJoQxCMZpt2xrZUrdZ2WuMRLBJmYs= git.sr.ht/~sbinet/gg v0.5.0 h1:6V43j30HM623V329xA9Ntq+WJrMjDxRjuAB1LFWF5m8= git.sr.ht/~sbinet/gg v0.5.0/go.mod h1:G2C0eRESqlKhS7ErsNey6HHrqU1PwsnCQlekFi9Q2Oo= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -14,8 +5,6 @@ github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= -github.com/andybalholm/stroke v0.0.0-20221221101821-bd29b49d73f0 h1:uF5Q/hWnDU1XZeT6CsrRSxHLroUSEYYO3kgES+yd+So= -github.com/andybalholm/stroke v0.0.0-20221221101821-bd29b49d73f0/go.mod h1:ccdDYaY5+gO+cbnQdFxEXqfy0RkoV25H3jLXUDNM3wg= github.com/campoy/embedmd v1.0.0 h1:V4kI2qTJJLf4J29RzI/MAt2c3Bl4dQSYPuflzwFH2hY= github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8= github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8= @@ -26,8 +15,6 @@ github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 h1:NxXI5pTAtpEaU49b github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9/go.mod h1:gWuR/CrFDDeVRFQwHPvsv9soJVB/iqymhuZQuJ3a9OM= github.com/go-pdf/fpdf v0.8.0 h1:IJKpdaagnWUeSkUFUjTcSzTppFxmv8ucGQyNPQWxYOQ= github.com/go-pdf/fpdf v0.8.0/go.mod h1:gfqhcNwXrsd3XYKte9a7vM3smvU/jB4ZRDrmWSxpfdc= -github.com/go-text/typesetting v0.0.0-20230803102845-24e03d8b5372 h1:FQivqchis6bE2/9uF70M2gmmLpe82esEm2QadL0TEJo= -github.com/go-text/typesetting v0.0.0-20230803102845-24e03d8b5372/go.mod h1:evDBbvNR/KaVFZ2ZlDSOWWXIUKq0wCOEtzLxRM8SG3k= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -44,20 +31,12 @@ github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/shurcooL/githubv4 v0.0.0-20240120211514-18a1ae0e79dc h1:vH0NQbIDk+mJLvBliNGfcQgUmhlniWBDXC79oRxfZA0= -github.com/shurcooL/githubv4 v0.0.0-20240120211514-18a1ae0e79dc/go.mod h1:zqMwyHmnN/eDOZOdiTohqIUKUrTFX62PNlu7IJdu0q8= -github.com/shurcooL/graphql v0.0.0-20230722043721-ed46e5a46466 h1:17JxqqJY66GmZVHkmAsGEkcIu0oCe3AM420QDgGwZx0= -github.com/shurcooL/graphql v0.0.0-20230722043721-ed46e5a46466/go.mod h1:9dIRpgIY7hVhoqfe0/FcYp0bpInZaT7dc3BYOprrIUE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b h1:r+vk0EmXNmekl0S0BascoeeoHk/L7wmaW2QF90K+kYI= -golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= -golang.org/x/exp/shiny v0.0.0-20230801115018-d63ba01acd4b h1:sgkbz1SFTsoQIvzTIw45hccUcGocu00QM3qucBYV8b0= -golang.org/x/exp/shiny v0.0.0-20230801115018-d63ba01acd4b/go.mod h1:UH99kUObWAZkDnWqppdQe5ZhPYESUw8I0zVV1uWBR+0= golang.org/x/image v0.15.0 h1:kOELfmgrmJlw4Cdb7g/QGuB3CvDrXbqEIww/pNtNBm8= golang.org/x/image v0.15.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -70,8 +49,6 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= @@ -86,5 +63,3 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T gonum.org/v1/plot v0.14.0 h1:+LBDVFYwFe4LHhdP8coW6296MBEY4nQ+Y4vuUpJopcE= gonum.org/v1/plot v0.14.0/go.mod h1:MLdR9424SJed+5VqC6MsouEpig9pZX2VZ57H9ko2bXU= honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/src/images/gauge.png b/src/images/gauge.png new file mode 100644 index 0000000000000000000000000000000000000000..4b5f9cfdaf63c9a0746b7bc45bf1e99aab504a9a GIT binary patch literal 53887 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 RA3&f4lao?J7Ckk5_dnkcE4Tmv literal 0 HcmV?d00001 diff --git a/src/main.go b/src/main.go index dbeabeb..81b8d7f 100644 --- a/src/main.go +++ b/src/main.go @@ -34,11 +34,11 @@ func handler(w http.ResponseWriter, r *http.Request) { } func getLanguageHandler(w http.ResponseWriter, r *http.Request) { - CreateLanguageImg() + funcs.CreateLanguageImg() } func getCharacterHandler(w http.ResponseWriter, r *http.Request) { - CreateCharacterImg() + funcs.CreateCharacterImg() } func getCommitStreakHandler(w http.ResponseWriter, r *http.Request) {