크롤러 만들기 (1) > Golang

Golang

크롤러 만들기 (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개

전체 40 |RSS
Golang 내용 검색

회원로그인

진행중 포인트경매

  1. 참여76 회 시작24.04.19 15:40 종료24.04.26 15:40
(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT