18. 01. 03 ~ 05

18. 1. 3

오늘 한 일

  • AWS를 이용한 웹툰 알리미 제작중
    • 자바의 파싱라이브러리은 Jsoup을 찾아서 공부 시작. 파싱이 엄청편해졌다!!
    • 프로젝트를 작은 단위로 분해
      • slack 채널에 통신하는 Api 제작
        • apache Httpclient 라이브러리를 이용해서 Slack web hook api 규격에 맞춰 통신(완료)
      • 웹툰사이트에서 데이터를 크롤링
        • Jsoup 라이브러리를 이용해서 데이터 크롤링
          • Jsoup 사용법 공부
            • 코드 ``` @Test public void connectTest() throws Exception { Document doc = Jsoup.connect(“http://comic.naver.com/webtoon/list.nhn?titleId=662774&weekday=wed”).get(); assertEquals(“고수 :: 네이버 만화”, doc.title()); }

            @Test public void useDOMMethodToNavigateADocument() throws Exception { Document doc = null; try { doc = Jsoup.connect(“http://comic.naver.com/webtoon/list.nhn?titleId=318995&weekday=fri”).get(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Elements tags = doc.select(“table.viewList > tbody > tr:has(td:has(img[alt*=UP]))”); Elements tds = tags.select(“td”); if(!tds.isEmpty()) { System.out.println(“true”); } System.out.println(“false”); } ```

18. 1. 4

오늘 한 일

  • AWS를 이용한 웹툰 알리미 제작중
    • 자바의 파싱라이브러리은 Jsoup을 찾아서 공부 시작. 파싱이 엄청편해졌다!!
    • 프로젝트를 작은 단위로 분해
      • slack 채널에 통신하는 Api 제작
        • apache Httpclient 라이브러리를 이용해서 Slack web hook api 규격에 맞춰 통신(완료)
      • 웹툰사이트에서 데이터를 크롤링
        • Jsoup 라이브러리를 이용해서 데이터 크롤링
          • Jsoup 사용법 공부(완료)
          • 네이버 웹툰 사이트에서 뜨는 웹툰은 NEW 아이콘의 img 태그를 이용하여 구별하면 됬지만 미리보기는 웹툰 목록 데이터가 동적으로 넘어와서 파서로 데이터를 가져올 수가 없었음.
          • 그래서 apache Httpclient를 이용해서 api를 직접 호출하여 웹툰 목록은 json 형태로 가져와 json 데이터 중 키가 ‘newVolumne’인 것이 최신 업데이트 목록을 표시하는 키인 것을 알아내서 split을 이용해 최신목록이 4개가 되면 업데이트 된거로 판단하기로함.
          • 코드
              @Test
              public void json() throws Exception {
                 try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
            
                    HttpGet httpGet = new HttpGet("http://nstore.naver.com/comic/volumeList.nhn?productNo=1940031&sortOrder=DESC");
                          System.out.println("Executing request " + httpGet.getRequestLine());
            
                          // Create a custom response handler
                          ResponseHandler<String> responseHandler = response -> {
                              int status = response.getStatusLine().getStatusCode();
                              if (status >= 200 && status < 300) {
                                  HttpEntity responseEntity = response.getEntity();
                                  return responseEntity != null ? EntityUtils.toString(responseEntity) : null;
                              } else {
                                  throw new ClientProtocolException("Unexpected response status: " + status);
                              }
                          };
                          String responseBody = httpclient.execute(httpGet, responseHandler);
            
                          System.out.println("----------------------------------------");
                          String trim = responseBody.trim();
                          assertEquals(4, trim.split("\\\"newVolume\":true+").length);
                 }
              }
            

18. 1. 5

오늘 한 일

  • AWS 삽질… 자바로 AWS의 Lambda 함수를 생성 하려면 blueprint로 생성을 할 수 없어서 AWS Toolkit for eclipst를 설치하여 람다 함수를 생성하였다. 하지만 어떻게 된 일 인지 내가 만든 람다함수시를 aws에 업로드 할려고 하자 자꾸만 IAM 인증이 실패해서 해당오류를 끊임없이 검색하였다.(밥 먹는 시간 제외 6시간의 삽질..) 계속 IAM의 user, group, roles를 재생성하여도 안되서 마지막 시도로 AWS Toolkit for eclipse 자체를 재설치하자 감쪽같이 동작하였다… 이제 적당히 시도하다가 안되면 라이브러리 재설치 하는걸로..
  • 자바로 aws 람다 사용법
    1. AWS Toolkit for eclipse 설치
    2. AWS Lambda Project for java 프로젝트 생성
    3. 규격에 맞춰 Response, Request를 POJO 객체로 만들어줘도 되고 Primary 타입으로 받아도 되서 상황에 맞게 함수 제작.
    4. AWS로 업데이트(프로젝트 우클릭 -> AWS 메뉴)
    5. 완성된 람다함수에 trigger 부착(Ex. API GateWay, CloudWatch Event등등)
    • 코드
        public class Hello implements RequestHandler<RequestClass, ResponseClass> {
            @Override
            public ResponseClass handleRequest(RequestClass request, Context context) {
            		String greetingString = String.format("Hello %s, %s.", request.firstName, request.lastName);
                return new ResponseClass(greetingString);
      
            }
        }
      
      • 여기서 Requset, Response는 POJO 객체
        public class RequestClass {
        	String firstName;
        	String lastName;
        
        	public String getFirstName() {
        		return firstName;
        	}
        	public void setFirstName(String firstName) {
        		this.firstName = firstName;
        	}
        	public String getLastName() {
        		return lastName;
        	}
        	public void setLastName(String lastName) {
        		this.lastName = lastName;
        	}
        
        	public RequestClass(String firstName, String lastName) {
        		super();
        		this.firstName = firstName;
        		this.lastName = lastName;
        	}
        
        	public RequestClass() {
        	}
        }
        
        
        ------------
        
        public class ResponseClass {
        	String greetings;
        
        	public String getGreetings() {
        		return greetings;
        	}
        
        	public void setGreetings(String greetings) {
        		this.greetings = greetings;
        	}
        
        	public ResponseClass(String greetings) {
        		super();
        		this.greetings = greetings;
        	}
        
        	public ResponseClass() {
        	}
        }
        
        

앞으로 할 일

  • 2018년 1년 계획 잡기
  • Spring boot 게시판 마무리 (진행 중)
  • 노마드코더 - 인스타그램 강의 시청
  • 회사 정리
  • 객체지향 + TDD 연습을 위한 토이프로젝트 구현 예정(로또)

Comments