Google Docs 업데이트를 모니터링하고 업데이트가 있으면 Gist로 퍼져 차이를 확인합니다.

Google Docs에서 하루에 여러 번 업데이트되는 문서가 있습니다.
쉽고 좋지만 읽기 전용이므로 변경 내역조차 볼 수 없습니다.

갱신 통지나 차분을 전혀 모릅니다! 누군가에게 묻지 않으면 아무것도 모르는 상황
무슨 굴욕………… 용서해…

Gist



Github을 사용하는 수준의 규모가 아니므로 이번에는 Gist를 사용합니다.
먼저 대상 Gist를 만들고 업데이트하기 만하면됩니다.

gist.gs
function updateGist(id, access_token, text) {
  var url = 'https://api.github.com' + '/gists/' + id + '?access_token=' + access_token;
  var payload = {
    'description': 'ドキュメントが更新されちょるばい!',
    'files': {
      'docs.html': {
        'content': text
      }
    }
  };
  var param = {
    'method': 'POST', // ほんとは patch
    'contentType': 'application/json',
    'payload': JSON.stringify(payload);
  };
  return UrlFetchApp.fetch(url, param);
}

슬랙



이전 또한 기사의 방법을 사용합니다.

slack.gs
function slack(text, channel, token) {
  var url = '';
  var parse = 'none';
  var payload = {
    'token': token,
    'channel': channel,
    'text': text,
    'username'; '小鳩',
    'parse': 'none',
    'icon_emoji': ':kobato:'
  };
  var param = {
    'method': 'POST',
    'payload': payload
  };
  return UrlFetchApp.fetch(url, param);
}

Google Document to HTML



Google App Script getAs() 만 PDF로 변환 할 수 있었으므로 Drive API를 사용하기로 결정했습니다.

주의사항



Google 개발자 콘솔을 사용 설정하고 리소스> Google 확장 서비스 ...에서 Drive API 스위치를 켭니다.



코드



documentscript.gs
function getDocument(fileId) {
  var file = Drive.Files.get(fileId);
  var htmlLink = file.exportLinks['text/html'];
  if (!htmlLink) {
    throw 'File cannot be converted to HTML.';
  }
  var oAuthToken = ScriptApp.getOAuthToken();
  return UrlFetchApp.fetch(htmlLink, {
    headers: {
      'Authorization': 'Bearer ' + oAuthToken
    }
  });
}

HTML 링크를 여는 인증에 어려움을 겪었지만 어쨌든 구그
매우 쉬운 var oAuthToken = ScriptApp.getOAuthToken();로 끝났습니다.

main



전제


  • 슬랙 채널은 '#kanshi'
  • Slack 토큰은 임시 'token'을 사용합니다
  • Gist ID는 임시 'piyo' 사용
  • Gist 액세스 토큰은 'access_token'을 사용합니다
  • .
  • 마지막 업데이트 날짜는 셀 (1, 1)에 있습니다
  • 문서 ID는 'hoge'를 사용합니다
  • 스프레드 시트 URL은 'fuga'를 사용합니다
  • 1 행으로 출력되면 차분이 보기 힘들기 때문에 개행을 무리하게 넣는다

  • 코드



    main.gs
    function main() {
      var spreadsheet = SpreadsheetApp.openByUrl('fuga');
      var sheet = spreadsheet.getSheets()[0];
      var docsId = 'hoge';
      var file = DriveApp.getFileById(docsId);
      var oldLastUpdated = parseInt(sheet.getRange(1,1).getValue());
      var lastUpdated = file.getLastUpdated();
    
      if (oldLastUpdated < lastUpdated.getTime()) {
        updateGist('piyo', 'access_token', getDocument(docsId).toString().replace(/>/g,'>/n'));
        slack('ドキュメントが更新されちょるばい!', '#kanshi', 'token');
      } 
    
      sheet.getRange(1,1).setValue(lastUpdated.getTime());
    }
    

    요약



    Google이 업데이트되면 알려주고 차이가 좋은 느낌을 받으면
    이런 일을 하지 않아도 됐지만!

    그리고 Google App Script에서도 간단한 HTML Beautifier와 같은 것을 원합니다.

    좋은 웹페이지 즐겨찾기