/
japanpost.go
60 lines (48 loc) · 1.18 KB
/
japanpost.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package pack
import (
"net/url"
"github.com/PuerkitoBio/goquery"
)
// CarrierJapanPost : 日本郵便
const CarrierJapanPost CarrierName = "日本郵便"
func init() {
carriers[CarrierJapanPost] = &carrier{
CarrierInfo: &CarrierInfo{
Key: "japanpost",
Alias: "j",
NameEn: "Japan Post",
},
tracking: trackingByJapanPost,
}
}
func trackingByJapanPost(trackingNumber string) ([]status, error) {
const (
trackingURL = "https://trackings.post.japanpost.jp/services/srv/search/direct"
fieldMax = 6
)
val := url.Values{}
val.Add("searchKind", "S002")
val.Add("locale", "ja")
val.Add("reqCodeNo1", trackingNumber)
doc, err := fetch(trackingURL, val)
if err != nil {
return nil, err
}
results := []status{}
field := [fieldMax]string{}
doc.Find("[summary='履歴情報'] td").Each(func(i int, s *goquery.Selection) {
// 配達状況を追加
if (i+1)%fieldMax == 0 {
results = append(results, status{
date: field[0],
message: field[1],
office: removeConsecutiveSpace(field[4] + " " + field[3]),
})
}
field[i%fieldMax] = s.Text()
})
if len(results) == 0 {
return nil, createNotFoundError(trackingNumber)
}
return results, nil
}