Help us understand the problem. What is going on with this article?

[GoogleAppsScript] 占いをLINEに通知する

はじめに

LINE Notifyを使用して占いを通知するBOTを作成しました。
1_1.png

GoogleAppsScript(GAS)にて1日1回通知プログラムを実行します。
そのプログラムでは、占い配信からその日の占い情報を取得して、LINE Notifyに通知します。
url.png

占い配信API

毎日全12星座を星座毎に占いデータを配信するAPIです。商用で使用する場合は有料となります。使用する場合は、利用規約をご確認ください。

LINE Notify

LINEアカウントのメッセージを通じてユーザーに配信するAPIです。 ユーザーアカウントやグループに通知することが可能です。

アクセストークンの発行手順

  1. https://notify-bot.line.me/ja/ にアクセスする。
  2. LINEのアカウントでログインする。
    2_2.png

  3. 「トークンを発行する」を押下する。
    3.png

  4. トークンを発行する対象を選択します。「トークン名」に入力して、「発行する」を押下する。(対象がグループの場合は、グループメンバーに「LINE Notify」を招待する必要がある)
    4_1.png

  5. 発行したトークンをコピーする。
    5_1.png

  6. 発行済みのアカウントやグループは連携済みとなる。(解除する場合は、「解除」を押下する)
    6.png

GoogleAppsScript

  1. GoogleAppsScriptを開いて、以下のスクリプトを実装します。LINE_NOTIFY_TOKENにLINE Notifyで発行したトークンを指定する。USER_LISTにユーザーの星座を指定する。
main.gs
/**
 * 占い配信BOT
 * 
 * powerd by JugemKey: http://jugemkey.jp/api/
 * 【PR】原宿占い館 塔里木: http://www.tarim.co.jp/
 */
const LINE_NOTIFY_TOKEN = '*****'; // ※ここにLINE NOTIFY用のアクセストークンを指定する
const zodiacSign = {
    ARIES: 0, // 牡羊座
    TAURUS: 1, // 牡牛座
    GEMINI: 2, // 双子座
    CRAB: 3, // 蟹座
    LEO: 4, // 獅子座
    VIRGO: 5, // 乙女座
    LIBRA: 6, // 天秤座
    SCORPIO: 7, // 蠍座
    SAGITTARIUS: 8, // 射手座
    GOAT: 9, // 山羊座
    AQUARIUS: 10, // 水瓶座
    FISH: 11, // 魚座
};

// ※ここに通知したいユーザーの星座を指定する
const USER_LIST = [{
        name: 'A男',
        sign: zodiacSign.ARIES
    },
    {
        name: 'B子',
        sign: zodiacSign.SAGITTARIUS
    }
];
const WEEKDAY = ["", "", "", "", "", "", ""];

/**
 * メイン処理
 */
function main() {
    try {
        let nowDt = new Date();
        let targetDt = Utilities.formatDate(nowDt, 'Asia/Tokyo', 'yyyy/MM/dd');
        let res = getHoroscope(targetDt);
        console.log(res);

        let horoList = res['horoscope'][targetDt];
        let dt = Utilities.formatDate(nowDt, 'Asia/Tokyo', `MM/dd(${WEEKDAY[nowDt.getDay()]})`);
        let message = `\n今日の占いだよ!!\n\n--- ${dt} ----\n\n`;
        for (let i in USER_LIST) {
            let user = USER_LIST[i];
            let horoObj = horoList[user.sign];
            message += `< ${user.name}(${horoObj.sign}) >\n`;
            message += `ランキング: ${horoObj.rank}位\n`;
            message += `総合運: ${getStar(horoObj.total)}\n`;
            message += `恋愛運: ${getStar(horoObj.love)}\n`;
            message += `仕事運: ${getStar(horoObj.job)}\n`;
            message += `金運  : ${getStar(horoObj.money)}\n`;
            message += `ラッキーアイテム: ${horoObj.item}\n`;
            message += `ラッキーカラー: ${horoObj.color}\n`;
            message += `${horoObj.content}\n`;
            message += `\n`;
        }
        sendLineNotify(message);

    } catch (e) {
        console.error(e.stack);
    }
}

/**
 * 星を取得する
 * @param {Number} num 
 */
function getStar(num) {
    let message = '';
    for (let i = 0; i < 5; i++) {
        if (i < num) {
            message += '';
        } else {
            message += '';
        }
    }
    return message;
}

/**
 * 占い情報を取得する
 * @param {String} date 日付 
 */
function getHoroscope(date) {
    let url = `http://api.jugemkey.jp/api/horoscope/free/${date}`;
    let options = {
        'method': 'get',
        'validateHttpsCertificates': false
    };
    let response = UrlFetchApp.fetch(url, options);
    return JSON.parse(response.getContentText('UTF-8'));
}

/**
 * LINEにメッセージを送信する
 * @param {String} message メッセージ 
 */
function sendLineNotify(message) {
    let url = 'https://notify-api.line.me/api/notify';
    let options = {
        'method': 'post',
        'headers': {
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'Authorization': `Bearer ${LINE_NOTIFY_TOKEN}`
        },
        'payload': `message=${message}`
    };
    let response = UrlFetchApp.fetch(url, options);
    return JSON.parse(response.getContentText('UTF-8'));
}
  1. 「編集」->「現在のプロジェクトのトリガー」を押下する。
    10.png

  2. 「トリガーを追加」を押下する。
    11.png

  3. プログラムを実行する条件を入力して、「保存」を押下する。
    12.png

参考リンク

さいごに

ソースコードをGitHubに公開しています。
- ソースファイルはこちら

以上です。

yun_bow
サービス志向エンジニアです。プログラミングを使ったモノづくりが好きです。AWS、Python、GO言語を勉強中。 こちらで投稿した記事は、所属会社の公式見解を示すものではないです。
pa-rk
Webアプリ、スマホアプリの開発を手掛ける技術者集団です。
https://www.pa-rk.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした