見出し画像

マイピク申請やフォローリクエストの通知をLINEで管理したい。

2024/10/25 ソースコードを修正しました。
個人的な備忘録なので、コピペですぐ使えるような内容にしています。
前置きを飛ばしたい方は「自己責任でお使いください」からどうぞ。


私は二次創作をしている字書きで、主にpixivとPrivatter+で投稿しています。中には年齢制限のある作品も公開しているので、

  1. マイピクやフォロ限の申請をもらって

  2. 成人かどうか確認して

  3. 申請を承認する

…という段階を踏んでいます。


が、問題はスマホではなくパソコンで管理しているので、この承認作業を忘れてしまうこと。


管理先をひとつにまとめたら楽じゃん!とは思うのですが、創作垢のことをうっかりプライベート垢で誤爆するのが怖くて、物理的にそうしてる感じです。身内バレ避けたい。オタク心はめんどくさい。


いっそ手動承認をやめて、「あなたは成人ですか?はい or いいえ」のパス限が手っ取り早い気もしてきましたが、「アカウントを作って、基本的な機能を使いこなせるか」「わからないことがあったら、考えたり調べたりできるか」というネット知識や理解を持っているかの確認も兼ねているので、承認制を採用しています。
画面の向こうの人がどんな人かわからないので、念のため。

話が逸れました。


本来やりたかったのは「特定の条件を満たすマイピクやフォロ限の承認作業」の自動化でしたが、私には実現が難しそうでした。


一応、成人の判断基準は、プロフィールや申請時のメッセージで「成人済」「18歳以上」と書かれていれば承認する、というシンプルなものですが、「〇〇(キャラ名)と同じ年齢」「20〇〇年生まれ」「〇〇卒」という変化球には対応しきれなさそうでした。
あと厄介なのは「成人済みまであと6ヶ月」は「成人済」という文字列を含んでいるので承認通っちゃうという…。どないせえっちゅうねん。
こういうところでAIが役に立ってくれたらいいなあ、と思います。


そんなこんなで、最終的に「要返信の通知を見落とさないようにLINEでお知らせする方法」に落ち着きました。


今回やる内容は、プログラミング的な知識が必要なので、画像を見ながら振り返れるようにしています。先人の知恵とツールをお借りしました。すげーありがたいことです。私は何が何だかわからないまま触ってる感じです。ぜんぜんわからない。俺たちは雰囲気でパソコンを使っている。



プログラミングといえば、学生の時にScratchでネコちゃん🐱( '-' 🐱 )を走らせた記憶がちょっと蘇りました。懐かしー。


長くなりましたが、本題です。


自己責任でお使いください。

※2024年10月時点の内容です。


やりたいこと

下記の通知をLINEで管理したい。

  • pixivのマイピク申請メール

  • Privatter+のフォローリクエストメール

  • 感想ツールとして作ったGoogleフォームの通知

使うもの

  • パソコン

  • ネット環境

  • スマホの電話番号

  • Googleアカウント

  • GoogleChrome ※パソコンにインストールされている前提で進めます。

手順

Gmail

  • ラベルを作成する

  • LINEで通知してほしいメールをフィルタで自動振り分け


LINE Developers

  • Messaging APIの有効化

  • LINEの友だち登録

  • LINEとの連携

  • チャネルアクセストークンの取得


Google Apps Script (以下、GAS)

  • ソースコードの入力 ※コピペ有。必ず修正してお使いください。

  • トリガー設定



①Gmailでラベルとフィルタを設定する

パソコンで GoogleChrome を開いたら、Gmailを探します。

(GoogleChrome)Gmailの場所
Gmail


ラベルの作成

  1. Gmailを開く

  2. もっと見る

  3. 新しいラベルを作成

  4. ラベル名を入力

  5. 作成

今回は「しぶ」「べったー」「れんらく」のラベルを作成しました。
このラベル名は、後半で使うのでコピペしておいてください。

Gmailで新しいラベルの作成をします。もっと見る→新しいラベルを作成→ラベル名を入力→作成
もっと見る→新しいラベルを作成
新しいラベル名を入力してください。
新しいラベル名を入力→作成



LINEで通知してほしいメールをフィルタで自動振り分け

めちゃめちゃ重要です。
なぜならパソコンでしか編集できないから。

  1. Gmailを開く

  2. 検索オプションを表示

  3. 自由に条件設定する

  4. フィルタを作成

  5. ラベルを付ける

  6. 『〇件の一致するスレッドにもフィルタを適用する』にチェックを入れる

  7. フィルタを作成

Gmailの検索のオプションの場所です。
検索のオプション
自由に条件設定→フィルタを作成
ラベルを付ける→〇件の一致するスレッドにもフィルタを適用する→フィルタを作成


今回はこんな感じでフィルタを作りました。

ぷらいべったー用
含む:フォローリクエスト
検索:すべてのメール
ラベルを付ける:べったー
〇件の一致するスレッドにもフィルタを適用する

ピクシブ用
含む:pixiv
検索:すべてのメール
ラベルを付ける:しぶ
〇件の一致するスレッドにもフィルタを適用する

Googleフォーム用
含む:フォーム
検索:すべてのメール
ラベルを付ける:れんらく
〇件の一致するスレッドにもフィルタを適用する

検索オプションの詳細はGoogleのヘルプが詳しいと思います。



※フィルタをミスったなと思ったら※

簡単に直せます。
Gmail→(画面右上の歯車)設定→すべての設定を表示→フィルタとブロック中のアドレスにフィルタが一覧で出ているので、ご自由に編集・削除して調整してください。


同じフィルタがたくさんあると後で困るので、ちゃんと見ておくことをおすすめします。


②LINE Developersでチャネルアクセストークンを取得する

なんやこれ!と思うかもしれません。
私もなんやこれ…と思いながらなんとかなったので大丈夫です。

ラインデベロッパーと読むそうです。開発者って意味らしい。
すげー。しごでき感ある。

これを使いこなせば、LINEと連携していろいろなことができるようになるそうです。

画像はありませんので、文字で感覚を掴んでもらえると助かります。


Messaging APIの有効化

LINE Developersはここからアクセスできます。

LINE Developers
→(画面右上)コンソールにログイン
→(画面下部)アカウントを作成
→アカウント登録

LINE Developersのアカウント登録では、途中で開発者名などを入力するよう言われますが、自分さえわかればなんでもいいので割愛します。

「LINE Developersコンソールにご登録いただき、ありがとうございます。」と出たら、画面下部の新規プロパイダー作成をクリック。

プロパイダー名は条件に合えばOK。

→チャネル設定
→(画面下部)Messaging API
→LINE公式アカウントを作成する
→ログイン
→※SMS認証を行ってくださいと出たら「SMS認証を行う」

SMS認証には自分のスマホの電話番号を使いました。

さらに登録作業が続きます。
大業種→個人、小業種→個人(架空)で通ったので大丈夫っぽい。

申込が完了したら、「LINE Official Account Managerへ」をクリックし、規約を確認してください。使ったメールアドレスやパスワードは忘れないようにメモするなどしてください。

LINE Official Account Managerへ入ると、チュートリアルが開始されます。
そこまで重要ではないので、読み流して大丈夫。

ここで友だち登録を行っておきます。うっかり忘れると後がしんどいです。
二次元コードを表示させるやり方が楽だと思うので書いておきます。


LINEの友だち登録

LINE Official Account Manager
→(画面左上)ホーム
→(画面左下)友だちを増やす
→友だち追加ガイド
→友だち追加QRコードを作成

スマホ側の操作方法は、LINEの使い方ガイドがわかりやすいです。

続いて、LINE Official Account ManagerでMessaging APIの設定を行います。


LINEとの連携

LINE Official Account Manager
→(画面左上)ホーム
→(画面右上)設定
→(画面左側)Messaging API
→Messaging APIを利用する
→先ほど作成したプロパイダーを選択し、同意する
→次の画面は何も入力せずにOKを押す
→「一度プロバイダーと連携すると、変更・解除できませんのでご注意ください。」の画面でOKを押す

リンクからLINE Developersへ。個人情報が含まれるので一部伏せています。



チャネルアクセストークンの取得

LINE Developers
→(画面右上)コンソール or コンソールにログイン
→(画面左側)プロバイダー
→作成したチャネルを選ぶ
→Messaging API設定
→チャネルアクセストークン(長期)の発行ボタンを押す

発行後のトークンは後で使うのでコピペしておいてください。
ここまで出来たらもう一息!


③GASのソースコードとトリガー設定

ソースコードの入力 ※コピペ有。必ず修正してお使いください。

  1. Googleドライブを開く

  2. (画面左上)新規

  3. その他

  4. Google Apps Script

  5. (画面左上)新しいプロジェクト

  6. ソースコードを消去してから貼付し、修正


Googleドライブ
新規→その他→Google Apps Script
新しいプロジェクト
function~は全部消す


今回使ったソースコードです。

/* ------------------------------------------------------ */
// setting: LINE BOT チャネルアクセストークン(長期)に書き換える
var LINEBOT_CHANNEL_TOKEN = 'XXXXXXXXXXXXXXXX'; 

// setting: GAMIL Gmailのラベルに書き換える
var GMAIL_QUERY = "is:unread label:{ラベル名1 ラベル名2}";
/* ------------------------------------------------------ */

// func: LINE BOT
function pushMessageLineBot( _message ) {
    var _postData = {
        "messages": [{
        "type": "text",
        "text": _message,
        }]
    };

    var _url = "https://api.line.me/v2/bot/message/broadcast";
    var _headers = {
        "Content-Type": "application/json",
        'Authorization': 'Bearer ' + LINEBOT_CHANNEL_TOKEN,
    };

    var _options = {
        "method": "post",
        "headers": _headers,
        "payload": JSON.stringify(_postData)
    };
    var response = UrlFetchApp.fetch(_url, _options);
}

// func: get GMAIL message
function getMessageGmail() {

    // Search Gmail with the given query.
    var _gmailThread = GmailApp.search(GMAIL_QUERY);
    var _messages = GmailApp.getMessagesForThreads(_gmailThread);
    var _items = [];

    for(var _idx = 0; _idx < _messages.length;_idx++){
        _items[_idx] =            
            "\n[from]\n" + _messages[_idx].slice(-1)[0].getFrom()
            + "\n"
            + "\n[date]\n"
            + _messages[_idx].slice(-1)[0].getDate().getFullYear()
            + "/" + (_messages[_idx].slice(-1)[0].getDate().getMonth() + 1) // 日付が一ヶ月ズレる表示を修正
            + "/" + _messages[_idx].slice(-1)[0].getDate().getDate() 
            + " " + _messages[_idx].slice(-1)[0].getDate().getHours().toString().padStart(2, '0') // 時刻を1桁表示→2桁表示へ修正
            + ":" + _messages[_idx].slice(-1)[0].getDate().getMinutes().toString().padStart(2, '0') // 時刻を1桁表示→2桁表示へ修正
            + "\n"
            + "\n[sbject]\n" + _messages[_idx].slice(-1)[0].getSubject()
            + "\n"
            + "\n[Message]\n"+ _messages[_idx].slice(-1)[0].getPlainBody()
            + "\n";
        _messages[_idx][0].getThread().markRead(); // スレッド対応追加
    }

    return _items;
}


// func: main
function main() {
    _items = getMessageGmail()
    if( _items.length > 0 ){
        for( var _idx = ( _items.length - 1) ; _idx >= 0; _idx-- ){
            pushMessageLineBot( _items[ _idx ] );
        }
    }
}


ソースコードを書き換える場所

  1. XXXXXXXXXXXXXXXX→チャネルアクセストークン(長期)

  2. ラベル名1 ラベル名2→Gmailのラベル  ※ラベルが1種類なら{}は消去してOK。

  3. 保存マークを押す

保存マーク


ここからは流れ作業になります。

  1. main

  2. 実行を押す ※保存マークの隣です

  3. 「承認が必要です:このプロジェクトがあなたのデータへのアクセス権限を必要としています」と出たら権限を確認

  4. Googleアカウントを選択

  5. 「このアプリはGoogleで確認されていません」と出たら権限を確認

  6. (画面左下)詳細

  7. 安全ではないページに移動

  8. 許可

▼→main→実行
ぐるぐる
権限を確認
自分のアカウントを選びます
詳細→xxx(安全ではないページ)に移動
許可

元の画面に戻ったら、トリガー設定を行います。


トリガー設定

  1. (画面左側)トリガー

  2. (画面右下)トリガーを追加

  3. 実行する関数を選択→main

  4. 実行するデプロイを選択→Head

  5. イベントのソースを選択→時間主導型

  6. 時間ベースのトリガーのタイプを選択→分ベースのタイマー

  7. 時間の間隔を選択(分)→1分おき

  8. エラー通知設定→毎日通知を受け取る

  9. (画面下部)保存

トリガー
こんな感じ


これでおしまいです。
あとは指定したメールが届いたときに、ちゃんと通知してくれるのを待つだけ!お疲れさまでした。



グラブルの古戦場で、進捗管理をするのにGAS教えてくれた団員さんのこともふんわり思い出しました。団爆破で散り散りになったけど、みんな元気かな。


使ってみての感想


便利~~~~!先人の知恵、ほんと~~~にありがたい。
最初はプライベート垢に各種メールを集中させていたのですが、容量を圧迫するので、LINEですぐに知らせてくれる仕様になったのは便利でした。しばらくはこれで連絡し忘れを少しでも減らそうと思います。わーぱちぱち!

ついでにスタンプの試し打ちもできるので気分が上がります。

オタク、すぐ布教してしまう。ゼンゼロいーよね。


実は、ここでご紹介した内容よりも、LINE Notifyを使った方が5~10分程度で設定完了できて楽ですが、2025年3月末でサ終する都合で今回の方法を採用しました。


※こんなトラブルがあったのでメモ※


①LINEの通知が止まらンゴ
解決法:Gmailの未読メールを既読にする。
あまりにも通知がしつこい時は、スクリプトの見直しを行うか、LINEの友だち解除でなかったことにした方がいいと思います。

②メールは来ているのにLINEが反応しないンゴ
原因:Google Apps Scriptのトリガー設定ミス、アクセス権限が承認されていない、LINEの友だち登録が完了していない、Gmailの自動振り分け(フィルタ)で「既読にする」にチェックが入っている。
解決法:上記の解消。

もう一度、見落としがないかご確認お願いします。
特に自動振り分け(フィルタ)は、上書きではなく追加になるので、似たようなフィルタの増やしすぎかも。

③英語のメールが届くンゴ
解決法:時間が解決するので放置でOK。

タイトル
Summary of failures for Google Apps Script:
本文
Your script, 自分が作成したスクリプト名, has recently failed to finish successfully. A summary of the failure(s) is shown below. To configure the triggers for this script, or change your setting for receiving future failure notifications, click here.

こういうやつね

このメールは「スクリプトのエラーを修正してね」というお知らせです。
詳しくは「Google FormのGoogle Apps Scriptがエラーを吐く場合の対処」などで検索いただくといいと思います。
私は放っておいてますが、今のところ何か起きたことはありません。
どんなエラーが発生したかいくつか例を貼っておきます。

ひとつめ
Exception: The parameters (xxxx) don't match the method signature for GmailApp.getInboxThreads.
ふたつめ
Exception: Service invoked too many times for one day: gmail.
みっつめ
We're sorry, a server error occurred. Please wait a bit and try again.

参考までにエラーメッセージはこんなんだったよ的なメモ。


④LINEに表示される日付がおかしいンゴ
解決法:タイムゾーンを日本標準時に修正する。

Google Apps Script
→(画面左側の歯車)プロジェクトの設定
→タイムゾーンを東京に修正



⑤なんか表示されたンゴ
原因:「ドライブフォルダのすべての共同編集者がこのファイルにアクセスできるようになります。」が表示される
解決法:キャンセルを押す

Googleドライブを触ってる途中で言われたと思います(スクショ忘れました)。

もし ↑ が表示されて、他人にデータが漏れてないか心配!という方は

Googleドライブ
→ホーム
→共有状況を確認したいタイトルの︙
→共有
→共有

アクセスできるユーザーが自分だけであれば問題ありません。



※番外編:エイリアスメール※

エイリアスメールが届かない

※パソコン限定
Gmail
→(画面左側)もっと見る
→すべてのメール

すべてのメールに入っている場合
→エイリアスメールの「名前」が同じまま登録されていると思います。
「エイリアスメールとは?」を読んで、Gmailの設定を見直してください。

すべてのメールに入っていない場合
→エイリアスメールが登録されていない可能性があります。
「エイリアスメールとは?」を読んで、Gmailの設定を見直してください。

エイリアスメールとは?
ひとつのアドレスから自分のアドレスの分身を作ることです。事前にGmailで設定が必要になります。

例えば
・xxx@gmail.com→本垢
・xxx+work@gmail.com→仕事用
・xxx+shopping@gmail.com→買い物用

ピクシブもぷらいべったーもエイリアスメール使えます。画像はデフォルト→郡内夜、サブ→雨流れみねねとして運用している感じです。オタク用アカウントだから好き放題できる。


作り方

※パソコン限定
Gmail
→(画面右上)設定
→すべての設定を表示
→アカウントとインポート
→(名前:)他のメールアドレスを追加
→(名前)本垢と被らないように新たな名前をつける
→(アドレス)すでに持っているGmailアドレスの「@」の前に「+(半角プラス)」を付けて任意の文字列を追加
→次のステップ


ソースコードの細かな修正

月が1ヶ月ずれて表示される問題を修正しました。
→「getMonth() ずれ」などで検索いただくと詳細が出ると思います。


スレッド表示に対応しました。

スレッド表示。X(旧:Twitter)でいうところのリプツリーみたいなもの。


時刻の表示を1桁から2桁へ修正しました。
→午前12時が0:0ではなく00:00の表示になりました。


ソースコードは下記をお借りしました。感謝です。

以上になります。