115회
구글시트, 업무 자동화 특별 스터디 (4강) | 실시간 검색 + 구글 드라이브 연동까지!💡
강의노트
댓글(3)
'오빠두엑셀'의 모든 Live 강의를
월 990원에 자유롭게 수강하세요!
'위캔두 멤버쉽' 가입하기
강의 자료
  • [라이브강의] 구글시트 Apps Script 기초 5주 특별 스터디 - 4강
    예제파일
실습파일은 영상 하단 댓글 링크에서도 제공합니다.
라이브 미션
  1. 사전미션 ① : 네이버 연관검색어 일괄 조회 서식 만들기
    /**
     * ● 도전! 사전미션 풀기 
     * 네이버 연관검색어를 일괄 검색합니다. 
     **/ 
    function listSearchResult() {
     
      // 구글스프레드시트 기본 변수 선언
      var app = SpreadsheetApp;
      var ss = app.getActiveSpreadsheet();
      var activeSheet = ss.getActiveSheet();
     
      // 시트에 사용된 마지막 행 찾기
      var endRow = activeSheet.getLastRow();
     
      // 두번째 행부터 마지막 행까지 돌아가며 연관검색어 출력합니다.
      for (var i = 2; i <= endRow; i++) {
        // Hint ① : activeSheet.getRange().getValue();
        // Hint ② : activeSheet.getRange().setValue(getNaverSearch(검색단어));
      } 
     
      // 검색 완료 팝업 알림창 띄우기
      // Hint : app.getUi().alert
     
    }
     
    /**
     * 네이버 연관검색어 목록을 반환합니다.
     * 
     * @param value 연관검색어를 검색할 단어입니다.
     * @customfunction
     */
    function getNaverSearch(value) {
     
      var url = "https://ac.search.naver.com/nx/ac?q="+value+"&frm=nv&st=100"
      var response = UrlFetchApp.fetch(url);
      var webContent = response.getContentText();
      var jsonData = JSON.parse(webContent);
     
      var result = jsonData.items;
      var sResult = result.join();
     
      return sResult;
     
    }
     
    /**
     * 나만의 커스텀 메뉴를 등록합니다
     * (Apps Script 자동화 2번째 강의 참고해주세요!)
     **/
     
    function initCustomMenu() {
     
      var ui = SpreadsheetApp.getUi();
      var menu = ui.createMenu("커스텀메뉴");
      var submenu = ui.createMenu("네이버관련");
     
      submenu.addItem("연관검색어일괄조회","listSearchResult");
      menu.addSubMenu(submenu);
      menu.addSeparator();
      menu.addItem("실시간인기검색어조회","printRealtimeSearch");
      menu.addSeparator();
      menu.addItem("드라이브저장","saveToDrive");
     
      menu.addToUi();
     
    }
     
    function onOpen() {
      initCustomMenu();
    }
보충 자료

📌 Apps Script 자동화 스터디 (4일차) - 예제 파일 및 코드

/**
 * 시그널 홈페이지에서 실시간 인기검색어 Top 10 목록을 반환합니다.
 * @customfunction
 */
function getRealtimeSearch() {
 
  // ● 시그널 실시간 인기 검색어 조회 api 링크 : https://api.signal.bz/news/realtime/
 
  /* 
  Apps Script 웹 데이터 크롤링 마스터 코드 스니펫 
  var url = "URL주소"
  var response = UrlFetchApp.fetch(url);
  var webContent = response.getContentText();
  var jsonData = JSON.parse(webContent); //JSON일 경우 데이터 변환
  */
 
  /*
  아래 코드를 사용해 배열의 각 항목을 새로운 배열로 감쌀 수도 있습니다.
  a.forEach((value,index,array) => array[index] = [value]);
  */
 
}
 
/**
 * 현재 활성화된 시트를 구글드라이브에 엑셀 파일로 저장합니다.
 */
function saveToDrive() {
 
  /* ● 현재 시간을 출력하는 마스터코드 스니펫 */
  var currentTime = Utilities.formatDate(new Date, Session.getTimeZone(), "yyMMddHHmmss")
 
  /* 구글 드라이브 변수 선언 및 파일 생성
  var folder = DriveApp.getFolderByID 또는 GetFoldersByName
  folder.createFile(...)
  DriveApp 클래스 전체 목록은 아래 링크를 참고하세요.
  https://developers.google.com/apps-script/reference/drive/drive-app */
 
}
 
/**
 * 실시간 인기검색어 Top10 목록을 시트에 출력합니다.
 */
function printRealtimeSearch() {
 
  /* 
  구글스프레드시트 기본 변수 선언 
  var app = SpreadsheetApp;
  var ss = app.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
  */
 
  /* 현재 활성화된 시트 마지막 행 찾기 */
 
  /* 현재 시간을 지정한 날짜 서식으로 반환합니다. (2회차 강의 참고) */
	var displayTime = Utilities.formatDate(new Date, Session.getTimeZone(), "y-M-d H:m:s")
 
  /* 실시간 인기 검색어 목록 받아온 후, 현재 시간과 함께 시트에 출력하기*/
 
}
 
/**
 * 특정 열의 마지막 데이터가 입력된 행 번호를 반환합니다.
 */
function getEndRow() {
 
  /* 
  구글스프레드시트 기본 변수 선언 
  var app = SpreadsheetApp;
  var ss = app.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
  */
 
  /* 특정 열에서 마지막으로 비어있는 셀 찾기 */
  // Hint ① : activeSheet.getMaxRows() -> 활성화 된 시트의 사용가능한 전체 행 개수 (기본값 : 1,000)
  // Hint ② : Range.getNextDataCell(SpreadSheetApp.Direction.방향) -> 현재 셀에서 연속된 범위의 끝으로 이동 (Ctrl+방향키)
  // Hint ③ : Range.getRow() -> 현재 셀의 행 번호 반환
 
}

✅ Apps Script 자동화 스터디 (4일차) - 강의 완성 코드

// <!----------------- 사전 미션 완성 ------------------>
/**
 * ● 도전! 사전미션 풀기 
 * 네이버 연관검색어를 일괄 검색합니다. 
 **/ 
function listSearchResult() {
 
  // 구글스프레드시트 기본 변수 선언
  var app = SpreadsheetApp;
  var ss = app.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
 
  // 시트에 사용된 마지막 행 찾기
  var endRow = getEndRow(1);
 
  // 두번째 행부터 마지막 행까지 돌아가며 연관검색어 출력합니다.
  for (var i = 2; i <= endRow; i++) {
    // Hint ① : activeSheet.getRange().getValue();
    // Hint ② : activeSheet.getRange().setValue(getNaverSearch(검색단어));
    var searchValue = activeSheet.getRange(i,1).getValue();
    var searchResult = getNaverSearch(searchValue);
    activeSheet.getRange(i,2).setValue(searchResult);
  } 
 
  // 검색 완료 팝업 알림창 띄우기
  // Hint : app.getUi().alert
  app.getUi().alert("연관검색어 출력을 완료했습니다.");
 
}
 
/**
 * 네이버 연관검색어 목록을 반환합니다.
 * 
 * @param value 연관검색어를 검색할 단어입니다.
 * @customfunction
 */
function getNaverSearch(value) {
 
  var url = "https://ac.search.naver.com/nx/ac?q="+value+"&frm=nv&st=100"
  var response = UrlFetchApp.fetch(url);
  var webContent = response.getContentText();
  var jsonData = JSON.parse(webContent);
 
  var result = jsonData.items;
  var sResult = result.join();
 
  return sResult;
 
}
 
/**
 * 나만의 커스텀 메뉴를 등록합니다
 * (Apps Script 자동화 2번째 강의 참고해주세요!)
 **/
 
function initCustomMenu() {
 
  var ui = SpreadsheetApp.getUi();
  var menu = ui.createMenu("커스텀메뉴");
  var submenu = ui.createMenu("네이버관련");
 
  submenu.addItem("연관검색어일괄조회","listSearchResult");
  menu.addSubMenu(submenu);
  menu.addSeparator();
  menu.addItem("실시간인기검색어조회","printRealtimeSearch");
  menu.addSeparator();
  menu.addItem("드라이브저장","saveToDrive");
 
  menu.addToUi();
 
}
 
function onOpen() {
  initCustomMenu();
}
 
 
// <!------------------ 강의 실습 코드 완성---------------->
/**
 * 시그널 홈페이지에서 실시간 인기검색어 Top 10 목록을 반환합니다.
 * @customfunction
 */
function getRealtimeSearch() {
 
  // ● 시그널 실시간 인기 검색어 조회 api 링크 : https://api.signal.bz/news/realtime/
 
  /* 
  Apps Script 웹 데이터 크롤링 마스터 코드 스니펫 
  var url = "URL주소"
  var response = UrlFetchApp.fetch(url);
  var webContent = response.getContentText();
  var jsonData = JSON.parse(webContent); //JSON일 경우 데이터 변환
  */
 
  var url = "https://api.signal.bz/news/realtime/"
  var response = UrlFetchApp.fetch(url);
  var webContent = response.getContentText();
  var jsonData = JSON.parse(webContent); //JSON일 경우 데이터 변환
 
  var top10 = jsonData.top10;
  var result = [];
 
  for (var i = 0; i <= top10.length - 1; i++) { result.push([top10[i].keyword]); //Logger.log(top10[i].keyword); } return result; /* 아래 코드를 사용해 배열의 각 항목을 새로운 배열로 감쌀 수도 있습니다. a.forEach((value,index,array) => array[index] = [value]);
  */
 
    /**
   * [{state=s, rank=1.0, keyword=삼남매가 용감하게}, {rank=2.0, state=s, keyword=슈룹}, {keyword=천원짜리 변호사 12회, rank=3.0, state=s}, {state=s, keyword=최성빈, rank=4.0}, {state=s, rank=5.0, keyword=이재윤}, {state=s, keyword=날씨, rank=6.0}, {state=s, rank=7.0, keyword=이재명}, {keyword=권성동 이태원 세월호처럼, rank=8.0, state=s}, {keyword=김은혜, state=+, rank=9.0}, {keyword=리커창 한반도 비핵화, rank=10.0, state=-}]
   * */
 
}
 
/**
 * 현재 활성화된 시트를 구글드라이브에 엑셀 파일로 저장합니다.
 */
function saveToDrive() {
 
  /* ● 현재 시간을 출력하는 마스터코드 스니펫 */
  var currentTime = Utilities.formatDate(new Date, Session.getTimeZone(), "yyMMddHHmmss")
 
  //1EjdPaRc9sByc_vJtMaimKcNoRGwtx_ub
  var gFolder = DriveApp.getFolderById("1EjdPaRc9sByc_vJtMaimKcNoRGwtx_ub");
 
  var result = getRealtimeSearch();
  var strResult = result.join();
 
  gFolder.createFile(currentTime+"실시간인기검색어.txt",strResult);
 
 
  /* 구글 드라이브 변수 선언 및 파일 생성
  var folder = DriveApp.getFolderByID 또는 GetFoldersByName
  folder.createFile(...)
  DriveApp 클래스 전체 목록은 아래 링크를 참고하세요.
  https://developers.google.com/apps-script/reference/drive/drive-app */
 
}
 
/**
 * 실시간 인기검색어 Top10 목록을 시트에 출력합니다.
 */
function printRealtimeSearch() {
 
  /* 
  구글스프레드시트 기본 변수 선언 
  var app = SpreadsheetApp;
  var ss = app.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
  */
 
  /* 현재 활성화된 시트 마지막 행 찾기 */
 
  /* 현재 시간을 지정한 날짜 서식으로 반환합니다. (2회차 강의 참고) */
	var displayTime = Utilities.formatDate(new Date, Session.getTimeZone(), "y-M-d H:m:s")
 
  /* 실시간 인기 검색어 목록 받아온 후, 현재 시간과 함께 시트에 출력하기*/
 
}
 
/**
 * 특정 열의 마지막 데이터가 입력된 행 번호를 반환합니다.
 */
function getEndRow(colNo) {
 
 // endRow = getEndRow(1);
  /* 
  구글스프레드시트 기본 변수 선언 
  var app = SpreadsheetApp;
  var ss = app.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
  */
  var app = SpreadsheetApp;
  var ss = app.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
 
  var maxRow = activeSheet.getMaxRows();
  var maxRange = activeSheet.getRange(maxRow,colNo);
  var lastRange = maxRange.getNextDataCell(SpreadsheetApp.Direction.UP);
  var endRow = lastRange.getRow();
 
  return endRow;
 
  //var lastRow = activeSheet.getLastRow();
  //Logger.log("endRow: " + endRow + " , lastRow :" + lastRow);
 
  /* 특정 열에서 마지막으로 비어있는 셀 찾기 */
  // Hint ① : activeSheet.getMaxRows() -> 활성화 된 시트의 사용가능한 전체 행 개수 (기본값 : 1,000)
  // Hint ② : Range.getNextDataCell(SpreadSheetApp.Direction.방향) -> 현재 셀에서 연속된 범위의 끝으로 이동 (Ctrl+방향키)
  // Hint ③ : Range.getRow() -> 현재 셀의 행 번호 반환
 
}
시간대별 목차
3 댓글
Inline Feedbacks
모든 댓글 보기
강의노트
'오빠두엑셀'의 모든 Live 강의를
월 990원에 자유롭게 수강하세요!
'위캔두 멤버쉽' 가입하기
강의 자료
  • [라이브강의] 구글시트 Apps Script 기초 5주 특별 스터디 - 4강
    예제파일
실습파일은 영상 하단 댓글 링크에서도 제공합니다.
💡 보충 자료 보기 (클릭!)
시간대별 목차
3
0
여러분의 생각을 댓글로 남겨주세요.x