DMM에서 API를 모방한 Go의 구현 샘플에 액세스
판자 상품 정보 취득 및 표시 제이슨
package main
import (
"crypto/tls"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"time"
)
type responsStatus struct {
Result struct {
Status int `json:"status"`
ResultCount int `json:"result_count"`
TotalCount int `json:"total_count"`
FirstPosition int `json:"first_position"`
} `json:"result"`
}
type targetService struct {
service string
floor string
}
var targetServices = []targetService{
{
service: "digital",
floor: "videoa",
},
{
service: "digital",
floor: "videoc",
},
{
service: "digital",
floor: "anime",
},
{
service: "doujin",
floor: "digital_doujin",
},
{
service: "ebook",
floor: "comic",
},
}
func main() {
url := "https://api.dmm.com/affiliate/v3/ItemList?api_id=%s&affiliate_id=%s&site=FANZA&service=%s&floor=%s&hits=%d&offset=%d>e_date=%s<e_date=%s&output=json"
const hits = 100
hc := &http.Client{
Transport: &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
},
},
}
today := time.Now().Format("2006-01-02")
for _, ts := range targetServices {
offset := 1
for i := 1; ; i++ {
var result responsStatus
var resp *http.Response
var body []byte
for retry := 0; retry < 3; retry++ {
gteDate := today + "T00:00:00"
lteDate := today + "T23:59:59"
requestURL := fmt.Sprintf(url, "dmm_api_id", "dmm_affiliate_id", ts.service, ts.floor, hits, offset, gteDate, lteDate)
fmt.Println(requestURL)
req, _ := http.NewRequest("GET", requestURL, nil)
req.Header.Set("Content-Type", "application/json")
resp, _ = hc.Do(req)
body, _ = ioutil.ReadAll(resp.Body)
json.Unmarshal(body, &result)
if result.Result.Status != http.StatusOK {
resp.Body.Close()
continue
}
fmt.Println(result)
break
}
resp.Body.Close()
if result.Result.TotalCount > hits*i {
offset += hits
continue
}
break
}
}
}
Reference
이 문제에 관하여(DMM에서 API를 모방한 Go의 구현 샘플에 액세스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ohnishi/articles/63cb5630b452e7e23487텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)