크롤러 만들기 (1) 정보
크롤러 만들기 (1)본문
오늘 한 부분은 세팅값들을 저장하는 구조체(struct)를 설계하는 부분이였습니다.
Setting 폴더 안에 setting.go를 만들어서
package Setting // Setting crawlerConfig 값을 저장하는 객체 type Setting struct { // URL 기본적인 크롤러 세팅 값. URL struct { URL string PageNumber string } // Builder 그누보드 빌더 값 Builder struct { Builder string } // Post 게시글 세팅 값 Post struct { PostTitle bool // 게시물 제목 PostMember bool // 게시물 작성자 PostMemberIcon bool // 게시물 작성 아이콘 PostDate bool // 게시물 작성 날짜 PostHit bool // 게시물 조회 수 PostComment bool // 게시물 댓글 수 PostLink bool // 게시물 링크 PostContent bool // 게시물 내용 PostGood bool // 게시물 추천 수 PostNotGood bool // 게시물 비추천 수 } } // NewSettingURL 함수는 URL 구조체를 초기화하는 함수 func NewSettingURL(URL string, PageNumber string) *Setting { var s Setting s = Setting{ URL: struct { URL string PageNumber string }{ URL: URL, PageNumber: PageNumber, }} return &s } // NewSettingBuilder 함수는 Builder 구조체를 초기화하는 함수 func NewSettingBuilder(Builder string) *Setting { var s Setting s = Setting{ Builder: struct{ Builder string }{ Builder: Builder, }} return &s } // NewSettingPost 함수는 Post 구조체를 초기화하는 함수 func NewSettingPost(p map[string]bool) *Setting { var s Setting s = Setting{ Post: struct { PostTitle bool PostMember bool PostMemberIcon bool PostDate bool PostHit bool PostComment bool PostLink bool PostContent bool PostGood bool PostNotGood bool }{ PostTitle: p["Title"], PostMember: p["Member"], PostMemberIcon: p["MemberIcon"], PostDate: p["Date"], PostHit: p["Hit"], PostComment: p["Comment"], PostLink: p["Link"], PostContent: p["Content"], PostGood: p["Good"], PostNotGood: p["NotGood"], }} return &s }
라는 코드를 작성.
현재는 매개변수로 들어오는 데이터 부분을 검증하는 부분을 넣지 않았습니다.
이 부분은 이제 진행해보도록 하죠.
매개변수를 일일히 다 주거나, 저만 쓴다면 사용하는 방법을 알기 때문에 검증할 필요는 없으나
이 프로젝트가 저만 쓸지... 다른 사람들도 쓸지 모르는 일이기 때문에
미리 검증하도록 합시다.
첫째는 URL, PageNumber 에 대한 검증입니다.
구조체에서 string 같은 경우 기본값이 "" 입니다.
URL이 유효하는 URL인지, 유효하지 않다면 에러를 반환하도록 하고
PageNumber 같은 경우는 입력된 값으로만, 만약 입력되지 않았다면 에러를 반환하도록 하겠습니다.
URL이 유효한 지 체크하는 방법은 2가지입니다.
정규표현식을 이용한 방법과 실제 접속한 후 statuscode를 받아 이상이 없는 지.
저는 사실 정규표현식을 잘 못해서 statuscode를 받는 방식으로 하겠습니다.
200번대 code가 오면 유효한 URL이라 판단하는 걸루
// NewSettingURL 함수는 URL 구조체를 초기화하는 함수 func NewSettingURL(URL string, PageNumber string) (*Setting, error) { var s Setting // URL이 유효한 지 체크 urlCheck := PageCheck(URL) if !urlCheck { // 유효하지 않을 경우 return &s, errors.New("URL이 유효하지 않거나, URL Status Code가 200번대가 아닙니다.") } s = Setting{ URL: struct { URL string PageNumber string }{ URL: URL, PageNumber: PageNumber, }} return &s, nil }
Setting 폴더 안에 page.go 생성하고 PageCheck 함수를 만들었는데 PageCheck 함수는 아래와 같습니다.
// PageCheck 함수는 URL 에 접속하여 HTTP Status Code를 받아서 // 200번대 일 경우 true를, 그 외일 경우 false를 반환 func PageCheck(url string) bool { resp, err := http.Get(url) if err != nil { log.Fatal(err) } if resp.StatusCode >= 200 && resp.StatusCode <= 299 { return true } else { return false } }
두번째는 Builder에 대한 검증입니다.
현재는 순정 그누보드만 하구 추후 다른 빌더들을 추가합시다.
베이스는 똑같으니까요.
이 부분은 값이 없거나 다른 경우에 "Gnu" 라고 기본값을 세팅합시다.
// NewSettingBuilder 함수는 Builder 구조체를 초기화하는 함수 func NewSettingBuilder(Builder string) *Setting { var s Setting if Builder != "Gnu" { Builder = "Gnu" } s = Setting{ Builder: struct{ Builder string }{ Builder: Builder, }} return &s }
세번째는 Post에 대한 검증입니다.
이 부분은 검증을 위해 해야할 부분이 많으니 다음 게시물에...
사실 밤이 늦어서 여기까지.....
0
댓글 0개