GmailのメールをLINEに通知するRubyプログラムを作成する方法

おはようございます。
日曜日以外もプログラミングを楽しむ、日曜プログラマーです。
いつもは何となくプログラミングをするのですが、
今日は、ChatGPTさんと一緒にプログラムを作ってみようと考えました。

楽しいね。これ。
出力結果を共有したいと思います。

今回は、Gmailに届いた新しいメールの件名と送信者をLINEに通知するRubyプログラムを作成する方法をご紹介します。このプログラムは、Gmail APIとLINE Notify APIを使用して実現します。

必要なGemのインストール

まず、以下のGemをインストールします。

gem install google-api-client
gem install line_notify

Gmail APIの設定

Gmail APIを使用するためには、Google Cloud Platformでプロジェクトを作成し、OAuth 2.0クライアントIDを取得する必要があります。手順は以下の通りです。

  1. Google Cloud Consoleにアクセスし、プロジェクトを作成します。

  2. 「APIとサービス」>「認証情報」からOAuth 2.0クライアントIDを作成します。

  3. クライアントIDとクライアントシークレットを取得し、JSONファイルとして保存します。

LINE Notifyの設定

LINE Notifyのアクセストークンを取得するためには、以下の手順に従います。

  1. LINE Notifyにアクセスし、LINEアカウントでログインします。

  2. 「マイページ」から「アクセストークンを発行(開発者用)」をクリックし、トークンを発行します。

Rubyプログラムの作成

以下に、Gmailのメールを取得し、件名と送信者をLINEに送信するRubyプログラムを示します。

`gmail_line_notify.rb`

require 'google/apis/gmail_v1'
require 'googleauth'
require 'googleauth/stores/file_token_store'
require 'fileutils'
require 'line_notify'

OOB_URI = 'urn:ietf:wg:oauth:2.0:oob'
APPLICATION_NAME = 'Gmail API Ruby Quickstart'
CREDENTIALS_PATH = 'path/to/credentials.json' # ここをクライアントIDのJSONファイルのパスに置き換えてください
TOKEN_PATH = 'token.yaml'
SCOPE = Google::Apis::GmailV1::AUTH_GMAIL_READONLY

def authorize
  client_id = Google::Auth::ClientId.from_file(CREDENTIALS_PATH)
  token_store = Google::Auth::Stores::FileTokenStore.new(file: TOKEN_PATH)
  authorizer = Google::Auth::UserAuthorizer.new(client_id, SCOPE, token_store)
  user_id = 'default'
  credentials = authorizer.get_credentials(user_id)
  if credentials.nil?
    url = authorizer.get_authorization_url(base_url: OOB_URI)
    puts "Open the following URL in the browser and enter the resulting code after authorization"
    puts url
    code = gets
    credentials = authorizer.get_and_store_credentials_from_code(
      user_id: user_id, code: code, base_url: OOB_URI
    )
  end
  credentials
end

def send_line_notify(message, token)
  notifier = LineNotify.new(token)
  notifier.ping(message)
end

# Gmail APIの初期化
service = Google::Apis::GmailV1::GmailService.new
service.client_options.application_name = APPLICATION_NAME
service.authorization = authorize

# メールの取得
user_id = 'me'
result = service.list_user_messages(user_id, q: 'is:unread')
if result.messages.nil?
  puts 'No new messages.'
else
  result.messages.each do |msg|
    message = service.get_user_message(user_id, msg.id)
    from = message.payload.headers.find { |h| h.name == 'From' }.value
    subject = message.payload.headers.find { |h| h.name == 'Subject' }.value
    line_message = "New email from: #{from}\nSubject: #{subject}"
    
    # LINE Notifyに送信
    line_token = 'YOUR_LINE_NOTIFY_TOKEN' # ここにLINE Notifyのアクセストークンを入れてください
    send_line_notify(line_message, line_token)
  end
end

このプログラムは、未読のGmailメールを取得し、その件名と送信者をLINEに送信します。最初に一度だけOAuth認証を行い、トークンを保存します。以後の実行ではトークンが再利用されます。

プログラムを実行するには、以下のコマンドを使用します。

ruby gmail_line_notify.rb

定期実行の設定

このプログラムを定期的に実行するためには、`cron`や`whenever`を使用することができます。例えば、`whenever`を使う場合、以下の手順を参考にしてください。

wheneverのインストール

gem install whenever

スケジュールの設定

`config/schedule.rb`を作成し、以下のように設定します。

every 10.minutes do
  command "ruby /path/to/your_script.rb"
end

スケジュールの更新

whenever --update-crontab

これで、10分ごとにプログラムが実行され、Gmailに新しいメールが届いたときにLINEに通知が送信されます。


この手順を参考にして、ぜひ自分の環境に合わせてカスタマイズしてみてください。質問やフィードバックがあれば、コメント欄でお知らせください!

それでは、楽しいコーディングを!

次回の記事もお楽しみに!他にも役立つ情報がたくさんあるので、引き続きnoteをチェックしてくださいね。あなたの意見を聞かせてください!この記事に関するご感想や質問があれば、下のコメント欄にお寄せください。

また、この記事がお役に立ちましたら、ぜひお知り合いと共有してください。あなたのサポートが最大の励みです!

猫の動画とマガジン

我が家のクセの強い毛づくろいをする猫

新しい家族が増えました。【 #子猫のいる生活

しんのすけのInstagram


この記事が気に入ったらサポートをしてみませんか?