teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

もう少しコードを整理

2019/07/29 02:41

投稿

nobonobo
nobonobo

スコア3367

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  より具体的な回答例を示しておきます。
2
2
 
3
- https://play.golang.org/p/sRJRcL2OUpH
3
+ https://play.golang.org/p/zY1YPo4CddV
4
4
  ```go
5
5
  package main
6
6
 
@@ -34,9 +34,8 @@
34
34
 
35
35
  var layoutTemplate = template.Must(template.New("").Parse(layout))
36
36
 
37
- func renderHTML(w io.Writer, contents string) {
37
+ func getFirstImageURL(contents string) string {
38
- u := DefaultOGImageURL
39
- // ここでcontentsから最初の画像リンクを取得して見つかったらu更新!
38
+ // ここでcontentsから最初の画像リンクを取得して見つかったらそれ返す
40
39
  tokenizer := html.NewTokenizer(bytes.NewBufferString(contents))
41
40
  for {
42
41
  t := tokenizer.Next()
@@ -50,7 +49,7 @@
50
49
  for {
51
50
  key, value, more := tokenizer.TagAttr()
52
51
  if string(key) == "src" {
53
- u = string(value)
52
+ return string(value)
54
53
  }
55
54
  if !more {
56
55
  break
@@ -59,8 +58,12 @@
59
58
  }
60
59
  }
61
60
  }
61
+ return DefaultOGImageURL
62
+ }
63
+
64
+ func renderHTML(w io.Writer, contents string) {
62
65
  layoutTemplate.Execute(w, map[string]interface{}{
63
- "OGImageURL": u,
66
+ "OGImageURL": getFirstImageURL(contents),
64
67
  "Contents": template.HTML(contents),
65
68
  })
66
69
  }