From 0fd434f4fa74b7b2485144ea85c51e9a4cdfc2a0 Mon Sep 17 00:00:00 2001 From: "yokotyuuseitokai30@gmail.com" Date: Mon, 22 Apr 2019 16:01:11 +0900 Subject: [PATCH 1/2] =?UTF-8?q?ImageURL=E3=82=92og:image=E3=81=AB=E6=9B=B8?= =?UTF-8?q?=E3=81=8D=E6=8F=9B=E3=81=88(=E7=94=BB=E5=83=8F=E3=81=AE?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E3=81=AF=E8=A1=8C=E3=81=A3=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=AA=E3=81=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/server/achievements_server.go | 35 +++++++++++++++++++++++++++++++ go.mod | 1 + go.sum | 2 ++ 3 files changed, 38 insertions(+) diff --git a/app/server/achievements_server.go b/app/server/achievements_server.go index 2e4532ae..e83faa2e 100644 --- a/app/server/achievements_server.go +++ b/app/server/achievements_server.go @@ -3,8 +3,13 @@ package server import ( "context" "database/sql" + "io/ioutil" + "net/http" + "strings" + "sync" "time" + "github.com/dyatlov/go-opengraph/opengraph" "github.com/gogo/protobuf/types" "github.com/golang/protobuf/ptypes/empty" "github.com/izumin5210/grapi/pkg/grapiserver" @@ -133,6 +138,33 @@ func (s *achievementServiceServerImpl) UpdateAchievement(ctx context.Context, re } ach := req.GetAchievement() + + // 非同期待機用 + var wg sync.WaitGroup + + // ここの間かな + if ach.ImageUrl == "" { + // 非同期処理 + wg.Add(1) + go func() { + resp, getErr := http.Get(ach.Url) + if getErr != nil { + return + } + byteArray, _ := ioutil.ReadAll(resp.Body) + // ここまでがHTMLの取得 + html := string(byteArray) + + og := opengraph.NewOpenGraph() + ogError := og.ProcessHTML(strings.NewReader(html)) + if ogError != nil { + return + } + ach.ImageUrl = og.URL + wg.Done() + }() + } + rec := &record.Achievement{ ID: int64(ach.AchievementId), Title: ach.GetTitle(), @@ -150,6 +182,9 @@ func (s *achievementServiceServerImpl) UpdateAchievement(ctx context.Context, re return nil, err } + // 非同期処理が終わるまで待機(念の為) + wg.Wait() + return achievementToResponse(rec, true, s.cfg), nil } diff --git a/go.mod b/go.mod index 34e2cdf8..f491a571 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.12 require ( github.com/PuerkitoBio/goquery v1.5.0 // indirect + github.com/dyatlov/go-opengraph v0.0.0-20180429202543-816b6608b3c8 github.com/go-redis/redis v6.14.1+incompatible github.com/gobuffalo/envy v1.7.0 // indirect github.com/gobuffalo/packr/v2 v2.1.0 diff --git a/go.sum b/go.sum index e8142384..f83ba3f4 100644 --- a/go.sum +++ b/go.sum @@ -36,6 +36,8 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/dyatlov/go-opengraph v0.0.0-20180429202543-816b6608b3c8 h1:6muCmMJat6z7qptVrIf/+OWPxsjAfvhw5/6t+FwEkgg= +github.com/dyatlov/go-opengraph v0.0.0-20180429202543-816b6608b3c8/go.mod h1:nYia/MIs9OyvXXYboPmNOj0gVWo97Wx0sde+ZuKkoM4= github.com/elazarl/goproxy v0.0.0-20181003060214-f58a169a71a5/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= From d371bd0977d54de4ce901a409f595508ee9230d7 Mon Sep 17 00:00:00 2001 From: kyou-today Date: Tue, 7 May 2019 16:57:17 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E7=94=BB=E5=83=8F=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/server/achievements_server.go | 57 +++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/app/server/achievements_server.go b/app/server/achievements_server.go index e83faa2e..e8691631 100644 --- a/app/server/achievements_server.go +++ b/app/server/achievements_server.go @@ -5,8 +5,6 @@ import ( "database/sql" "io/ioutil" "net/http" - "strings" - "sync" "time" "github.com/dyatlov/go-opengraph/opengraph" @@ -139,29 +137,55 @@ func (s *achievementServiceServerImpl) UpdateAchievement(ctx context.Context, re ach := req.GetAchievement() - // 非同期待機用 - var wg sync.WaitGroup - // ここの間かな if ach.ImageUrl == "" { // 非同期処理 - wg.Add(1) go func() { - resp, getErr := http.Get(ach.Url) - if getErr != nil { + resp, err := http.Get(ach.Url) + if err != nil { + grpclog.Errorf("ogImage: %+v", err) return } - byteArray, _ := ioutil.ReadAll(resp.Body) - // ここまでがHTMLの取得 - html := string(byteArray) + + defer func() { _ = resp.Body.Close() }() og := opengraph.NewOpenGraph() - ogError := og.ProcessHTML(strings.NewReader(html)) - if ogError != nil { + err = og.ProcessHTML(resp.Body) + if err != nil { + grpclog.Errorf("ogImage: %+v", err) + return + } + + images := og.Images + if len(images) == 0 { + return + } + + image := images[0] + imgResp, err := http.Get(image.SecureURL) + if err != nil { + grpclog.Errorf("ogImage: %+v", err) + return + } + + imageByte, err := ioutil.ReadAll(imgResp.Body) + if err != nil { + grpclog.Errorf("ogImage: %+v", err) + return + } + + is := s.ImageStore(context.Background()) + name, err := is.CreateImage(imageByte) + if err != nil { + grpclog.Errorf("ogImage: %+v", err) + return + } + + _, _, err = s.AchievementStore(context.Background()).UpdateAchievementImage(int64(req.Achievement.AchievementId), name) + if err != nil { + grpclog.Errorf("ogImage: %+v", err) return } - ach.ImageUrl = og.URL - wg.Done() }() } @@ -182,9 +206,6 @@ func (s *achievementServiceServerImpl) UpdateAchievement(ctx context.Context, re return nil, err } - // 非同期処理が終わるまで待機(念の為) - wg.Wait() - return achievementToResponse(rec, true, s.cfg), nil }