GmailAPI+Ruby+Slack으로 메일 확인 촉구 BOT!

처음에



메일 확인이 충분히 되어 있다고 하는 분은 문제 없기 때문에 본 기사는 필요 없습니다.
그리고 Google 크롬에도 좋은 확장 기능이 많이 있으므로, 그쪽을 검토하는 것이 좋다고 생각합니다. (실제로 후회했습니다.)

대상



신졸. 나처럼 메일을 확인할 수 없어, 「에? 무슨 일인가?」가 되는 사람


  • 왜 Slack?
  • 팀 내에서 Slack을 사용하고 있습니다
  • 모든 팀에게 이메일 확인을 요청합니다
  • 선배에게 메일을 보는 것을 어필한다

  • 왜 GmailAPI?
  • 개인에게 읽지 않고 읽은 것을 사용하여 뭔가를 원했습니다
  • 우리가 Gmail이기 때문에

  • 왜 ruby?
  • 기분
  • 전혀 쓴 적이 없기 때문에


  • 참고해 주실 때는



    미리 개인 라벨을 설정하십시오.

    Gmail API



    자격증명 취득



    우선은 Google API Console에 들어가,
    프로젝트를 만듭니다.


    입력하면 GmailAPI를 클릭하여 사용 설정합니다.



    왼쪽 막대에서 자격 증명을 선택하여 OAuth 클라이언트 ID를 만듭니다.



    서비스명을 결정하라고 하므로 OAuth 동의 화면에서 설정한다.
    그 후 적당하게 Android등을 선택하면(여기에서는 적당히 그 외) 작성할 수 있습니다.
    아래 이미지가 나오면 성공입니다.


    Access Token 얻기



    를 누릅니다.


    DL 한 파일을 client_secret.json 등으로 두고 저장합니다.
    gem install google-api-client
    

    합니다.

    Ruby Quickstart 에서 소스 코드를 당겨서 실행. (소스 파일은 client_secret.json과 같은 위치에서 실행하십시오.)

    그런 다음 출력된 URL을 브라우저에서 붙여넣고 전환합니다.
    전환하면 "이 코드를 복사하고 응용 프로그램으로 전환하여 붙여 넣으십시오"아래에 코드가 나타나므로 그것을 삼가 해 둡니다.

    아래 명령을 두드려 access_token과 refresh_token을 얻습니다.
    curl -d client_id={クライアントID} -d client_secret={クライアントシークレット} -d redirect_uri=urn:ietf:wg:oauth:2.0:oob -d grant_type=authorization_code -d code={控えておいたコード} https://accounts.google.com/o/oauth2/token
    

    access_token은 최악이 아니어도 좋지만 refresh_token은 삼가해 둔다.

    Slack API



    준비


    mkdir local_bots
    cd local_bots
    

    htps : // 아피. scck. 코m/우ぇb에서 Token을 가져옵니다.
    gem install slack-api
    

    두드려.

    루비



    우선 소스 올립니다.

    여기가 시보계입니다. (이것만으로 좋으면 GmailAPI를 설정하지 않아도 문제 없습니다.)

    sample1.rb
    #!/usr/bin/ruby
    require "slack"
    require "json"
    
    Slack.configure do |config|
            config.token = 'Slack Apiで取得したトークン'
    end
    
    now = Time.now.hour
    
    if (now < 9 || 15 < now)
            exit(0)
    end
    
    text = case now
            when 9 then '始業前メール確認の時間だよ!'
            when 10 then 'コーヒー飲みつつ、メール確認だよ!'
            when 11 then 'そろそろメール確認だよ!'
            when 12 then 'もうお昼だよ!メールもいっぱいだよ!'
            when 13 then 'そろそろランチの時間です!'
            when 14 then '午後も頑張るぞ!メール確認しようね!'
            when 15 then '今日のおやつは何かな!?メールも確認してね!'
            end
    now -= (now > 12) ? 12 : 0;
    emoji = ":clock#{now}:"
    Slack.chat_postMessage(username: "メール確認bot", text: text, channel: 'ルーム名', icon_emoji: emoji)
    

    여기가 개인 메일 확인입니다.
    curl -H "Authorization: Bearer {先ほど取得したアクセストークン}" https://www.googleapis.com/gmail/v1/users/me/labels
    

    로 라벨 일람을 취득할 수 있으므로, 그 중에서 라벨의 ID를 삼가해 둡니다.

    sample2.rb
    #!/usr/bin/ruby
    require "slack"
    require "json"
    
    def getToMeMailInfo(access_token)
            # net/httpがうまくいかないのでcurlベタ打ち助けて
            f = `curl -H "Authorization: Bearer #{access_token}" https://www.googleapis.com/gmail/v1/users/me/labels/未読件数を表示したいラベルのID`
            return JSON.load(f)
    end
    
    Slack.configure do |config|
            config.token = 'Slack APIで取得したトークン'
    end
    
    # clientデータの取得
    # この後取得するaccess_tokenとrefresh_token
    # とclient_IDとclient_secretを一つのファイルで管理
    client_info_json = '/path/to/infoファイル'
    client_data = open(client_info_json) do |io|
      JSON.load(io)
    end
    
    result = getToMeMailInfo(client_data['token'])
    
    # access_tokenは定期的にリセットされる
    # access_tokenがリセットされた時の処理
    if (result['threadsUnread'] == nil)
            response = `curl -d "client_id=#{client_data['client_id']}&client_secret=#{client_data['client_secret']}&refresh_token=#{client_data['refresh']}&grant_type=refresh_token" https://accounts.google.com/o/oauth2/token`
            result = JSON.load(response)
            client_data['token'] = result['access_token']
            open(client_info_json, 'w') do |io|
                    JSON.dump(client_data, io)
            end
            result = getToMeMailInfo(client_data['token'])
    end
    
    if (result['threadsUnread'] > 0 )
            Slack.chat_postMessage(username: "個人宛確認bot", text: "ねぇどうして確認してくれないの?****宛のメールが#{result['threadsUnread']}件来てるよ?", channel: 'ルーム名')
    end
    

    client_info.json
    {
    "client_id":"クライアントID",
    "client_secret":"クライアントSecret",
    "token":"アクセストークン",
    "refresh":"リフレッシュトークン"
    }
    

    나중에는 crontab이나 launchd 등으로 원하는 정시 실행을 설정하면 OK!!
    ↓이런 느낌이 됩니다.


    참고


  • Google Gmail API로 이메일 받기
  • Ruby Quickstart
  • 10분 코딩! Ruby로 만드는 Slack 시보
  • 좋은 웹페이지 즐겨찾기