isas 사용법(네이버 피들러 사용 간단 스크래핑)

20221024_191346

isas30EngineServer를 킨 뒤 추가를 누른다.

20221024_191544

정보를 가져올 사이트에 들어간다. 해당 사이트에서 소스를 보면 서울 중구 을지로 밖에 안 보이지만 오른쪽 옆 16군데의 전국 정보들을 더 얻어오고 싶다.

이를 위해 fiddler를 사용 할 것

20221024_191727

fiddler를 가고 해당 사이트의 통신을 잡고 Header에서 Client와 Referer를 잡는다.

  • 예시 코드:
//////

var 날씨 = function(){
    console.log(WeatherName + " 샘플구조체 생성자 호출");
    this.errorMsg = "";
    this.host = "";
    this.userAgent = '{';
    this.userAgent += '"Accept":"image/webp,image/apngimage/*,*/*;q=0.8"';
    this.userAgent += '"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"';
    this.userAgent += '}';
};  

날씨.prototype = Object.create(iSASObject.prototype);

날씨.prototype.날씨정보조회 =function(aInput){
    this.log(WeatherName + " 날씨정보조회 호출[" + aInput + "]");
    try{
        system.setStatus(IBXSTATE_CHECKPARAM, 10);


        // 스크래핑 개발 기본

        // 1. 통신 (요청) // Request
        //httpRequest.get(url); Header 새팅 불필요 시
        //httpRequest.getWithUserAgent(userAgent, url); Header 새팅 필요 시
        var userAgent = '{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36"}';
        // httpRequest.getWithUserAgent(userAgent, 'https://www.naver.com/my.html');

        httpRequest.getWithUserAgent(userAgent, 'https://weather.naver.com/today/api/nation/20221024/now');


        // 2. 결과 (응답) // Response
        var ResultStr = httpRequest.result;
        // this.log ==> console.log
        this.log("Main1: ["+ ResultStr +"]");

        // 3. 결과처리 (결과포맷)
        //var ResTem = StrGrab(ResultStr, '<div class="email MY_EMAIL">', '</div>');
        
        // "regionName":"춘천"

        //aIndex = 1부터 시작

        var 날씨정보조회 = [];
        
        jsonLength= Object.keys(ResultStr).length;

        console.log(ResultStr && Object.keys(ResultStr).length === 0 && ResultStr.constructor === Object);
        
        for(var i = 1; i<jsonLength; i++){

                var 지역명 = StrGrab(ResultStr, '"regionName":"', '"', i);
                var 온도 = StrGrab(ResultStr, '"tmpr":', '"', i);

                var item = {};
                item.지역명 = 지역명;
                item.온도 = 온도;

                if(item.지역명 == ""){
                    continue;
                }
            
                날씨정보조회.push(item);
        }
        // var 날씨정보조회 = [];
        // var item = {};

        // item.지역명 = '서울';
        // item.온도 = '12.1';
        // item.상태 = '맑음';
        // 날씨정보조회.push(item);
    
        // var item = {};

        // item.지역명 = '부산';
        // item.온도 = '12.2';
        // item.상태 = '맑음';
        // 날씨정보조회.push(item);

        // OUTPUT
        this.iSASInOut.Output ={};
        this.iSASInOut.Output.ErrorCode = "00000000";
        this.iSASInOut.Output.ErrorMessage = "";
        this.iSASInOut.Output.Result = {};
        // this.iSASInOut.Output.Result.이메일 = ResTem;
        this.iSASInOut.Output.Result.날씨정보조회 = 날씨정보조회;
        
        return S_IBX_OK;
    } catch(e){
        this.log("Exception " + e.message);
        this.setError(E_IBX_UNKNOWN);
        return E_IBX_UNKNOWN;
    } finally{
        system.setStatus(IBXSTATE_DONE, 100);
        this.log(WeatherName + " 샘플함수 finally");
    }
};

////



20221024_202356

isas를 켜고 위에서 만든 샘플생성자, 생성함수를 예시 코드에 설정한 “날씨”, “날씨정보조회” 로 각각 변경한다. 그리고 AsyncRunTest를 실행하면 결과가 잘 나오는 걸 볼 수 있다.

덤)

같은 메서드 그대로 썼는데 콘솔로그로 찍어보든 뭘하든 아무리 해도 결과값 안 나와서 자세히 보니까 쿼테이션이 한개씩 빠져있더라.. 진짜 이런거보면 완벽하다 싶은 코드들도(되던 코드를 복붙 했더라도 다시 쳐보던지 하자)

20221025_131122

그리고 ini에서 모듈리스트를 위와 같이 변경시켜주면 실행 할 때의 모듈 리스트들을 설정한 값들이 바로 나오게 변경 가능하다.

수정)

20221025_175742

여기서 json형태들의 파일을 보려면(https://weather.naver.com/today/api/nation/20221024/now) 위 referer가 아닌 copy url을 누른다

20221025_180443





© 2021.03. by yacho

Powered by github