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を取得する必要があります。手順は以下の通りです。
Google Cloud Consoleにアクセスし、プロジェクトを作成します。
「APIとサービス」>「認証情報」からOAuth 2.0クライアントIDを作成します。
クライアントIDとクライアントシークレットを取得し、JSONファイルとして保存します。
LINE Notifyの設定
LINE Notifyのアクセストークンを取得するためには、以下の手順に従います。
LINE Notifyにアクセスし、LINEアカウントでログインします。
「マイページ」から「アクセストークンを発行(開発者用)」をクリックし、トークンを発行します。
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をチェックしてくださいね。あなたの意見を聞かせてください!この記事に関するご感想や質問があれば、下のコメント欄にお寄せください。
また、この記事がお役に立ちましたら、ぜひお知り合いと共有してください。あなたのサポートが最大の励みです!