Google Drive push notifications를 hubot에서 받기

6906 단어 HubotCoffeeScript
Google Drive 변경사항 알림 메커니즘

특정 드라이브 폴더의 변경을 알립니다.



서비스 계정 만들기



  • Google Developers Console 에서 프로젝트 선택 또는 프로젝트 작성
  • API 및 인증 > API에서 Drive API 사용

  • API 및 인증 > 자격 증명에서 새로운 클라이언트 ID 생성하기
    서비스 계정으로 만들기

  • 새 P12 키 만들기 버튼으로 P12 키를 만들고 다운로드 한 것을 저장
  • API 및 인증 > 푸시에서 푸시를 받는 도메인을 추가합니다.
    webmaster에서 도메인 소유자를 등록해야합니다

  • 폴더 공유


  • 서비스 계정의 이메일 주소를 통보하려는 Drive 폴더의 공동 편집자로 등록


  • 푸시를 받는 사이트 설정


  • hubot의 router로 받는 경우
  •   robot.router.post "/google/drive/notifications", (req, res) ->
        robot.logger.debug req
        # 何かしらの処理
        res.status(200).send 'ok'
    

    푸시 알림 설정


  • 다운로드한 p12 키를 pem으로 변환
  • openssl pkcs12 -in xxx.p12 -nocerts -passin pass:notasecret -nodes -out xxx.pem
    
  • watch api로 등록하기
    coffeescript에서 수행하는 샘플
  • googleapis = require('googleapis')
    drive = googleapis.drive({version: 'v2'})
    
    SERVICE_ACCOUNT_EMAIL = '[email protected]'
    SERVICE_ACCOUNT_KEY = 'xxx.pem'
    SCOPE = [
      "https://www.googleapis.com/auth/drive",
      "https://www.googleapis.com/auth/drive.file",
      "https://www.googleapis.com/auth/drive.readonly",
      "https://www.googleapis.com/auth/drive.metadata.readonly",
      "https://www.googleapis.com/auth/drive.appdata",
      "https://www.googleapis.com/auth/drive.apps.readonly",
      "https://www.googleapis.com/auth/drive.metadata",
    ]
    
    jwt = new googleapis.auth.JWT(SERVICE_ACCOUNT_EMAIL, SERVICE_ACCOUNT_KEY, null, SCOPE)
    resource = {id: 'watch-001', type: 'web_hook', address: 'https://上記でプッシュ設定したドメイン/google/drive/notifications'}
    jwt.authorize (err, tokens) ->
      if err
        console.log err
      else
        jwt.credentials = tokens
        drive.changes.watch {auth: jwt, resource: resource}, (err, resp) ->
        if err
          console.log err
        else
          console.log resp
    
  • 확인
    서비스 계정에 공유 한 폴더 아래에서 파일을 변경하면 https://上記でプッシュ設定したドメイン/google/drive/notifications에 알림이 표시됩니다.
    2015-06-11T03:15:35.450146+00:00 heroku[router]: at=info method=POST path="/google/drive/notifications" host=xxx.herokuapp.com request_id=4660b262-e65b-42bc-bfad-06a9a290c292 fwd="xx.xx.xx.xx" dyno=web.1 connect=0ms service=6ms status=200 bytes=164
    
  • 좋은 웹페이지 즐겨찾기