isas 사용법(네이버 피들러 사용 간단 스크래핑)
in etc on Etc
isas30EngineServer를 킨 뒤 추가를 누른다.
정보를 가져올 사이트에 들어간다. 해당 사이트에서 소스를 보면 서울 중구 을지로 밖에 안 보이지만 오른쪽 옆 16군데의 전국 정보들을 더 얻어오고 싶다.
이를 위해 fiddler를 사용 할 것
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");
}
};
////
isas를 켜고 위에서 만든 샘플생성자, 생성함수를 예시 코드에 설정한 “날씨”, “날씨정보조회” 로 각각 변경한다. 그리고 AsyncRunTest를 실행하면 결과가 잘 나오는 걸 볼 수 있다.
덤)
같은 메서드 그대로 썼는데 콘솔로그로 찍어보든 뭘하든 아무리 해도 결과값 안 나와서 자세히 보니까 쿼테이션이 한개씩 빠져있더라.. 진짜 이런거보면 완벽하다 싶은 코드들도(되던 코드를 복붙 했더라도 다시 쳐보던지 하자)
그리고 ini에서 모듈리스트를 위와 같이 변경시켜주면 실행 할 때의 모듈 리스트들을 설정한 값들이 바로 나오게 변경 가능하다.
수정)
여기서 json형태들의 파일을 보려면(https://weather.naver.com/today/api/nation/20221024/now) 위 referer가 아닌 copy url을 누른다