便利なGASレシピ集!に戻る場合は以下から
Contents
はじめに
今回のビジボットでは、GoogleスプレッドシートのGASボタンを押すたびに大吉が出たり、凶が出たりするあみだくじを作ろうと思ったのですが、GASの内容があまりにシンプル過ぎたので毎日星座占いの結果をAPIで取得して、それを指定したメールアドレス宛に送信する。って処理を書いていきます!
※あみだくじだけのパターンはまた今度作ります!笑
それでは早速始めていきます!
1.完成コード
まずはログ出力ソースを入れてるverです。
後から入れるのがコピペで簡単にできるように用意しました!
詳細については後ほど説明していきます!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
//API仕様書 : http://jugemkey.jp/api/waf/api.php function myFunction() { //今日の日付をAPIパラメータ用にバラバラに取得 var date = new Date(); var dateY = Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy'); var dateM = Utilities.formatDate( date, 'Asia/Tokyo', 'MM'); var dateD = Utilities.formatDate( date, 'Asia/Tokyo', 'dd'); var ymd = dateY + '/' + dateM + '/' + dateD; Logger.log('date:' + date); var jApi = 'http://api.jugemkey.jp/api/horoscope/free/' + dateY + '/' + dateM + '/' + dateD; Logger.log('jApi:' + jApi); //APIをfetchする var response = UrlFetchApp.fetch(jApi); var json=JSON.parse(response.getContentText()); Logger.log('jApi:' + jApi); //[牡羊座:0][牡牛座:1][双子座:2][蟹座:3][獅子座:4][乙女座:5][天秤座:6][蠍座:7][射手座:8][山羊座:9][水瓶座:10][魚座:11] var seiza = 2; //イケてない記述ですが、配信内容を取得 var content = '占いの内容 -- ' + json["horoscope"][ymd][seiza]["content"]; var item = 'ラッキーアイテム -- ' + json["horoscope"][ymd][seiza]["item"]; var money = '金運(5段階) -- ' + json["horoscope"][ymd][seiza]["money"]; var total = '総合運(5段階) -- ' + json["horoscope"][ymd][seiza]["total"]; var job = '仕事運(5段階) -- ' + json["horoscope"][ymd][seiza]["job"]; var color = 'ラッキーカラー -- ' + json["horoscope"][ymd][seiza]["color"]; var love = '恋愛運(5段階) -- ' + json["horoscope"][ymd][seiza]["love"]; var rank = 'ランキング -- ' + json["horoscope"][ymd][seiza]["rank"]; var sign = '星座 -- ' + json["horoscope"][ymd][seiza]["sign"]; //イケてない記述ですが、メールに送信する本文を指定してます var contents = sign + '\n' + rank + '\n' + content + '\n' + total + '\n' + money + '\n' + job + '\n' + love + '\n' + item + '\n' + color; Logger.log('占いの内容 -- ' + json["horoscope"][ymd][seiza]["content"]); Logger.log('ラッキーアイテム -- ' + json["horoscope"][ymd][seiza]["item"]); Logger.log('金運(5段階) -- ' + json["horoscope"][ymd][seiza]["money"]); Logger.log('総合運(5段階) -- ' + json["horoscope"][ymd][seiza]["total"]); Logger.log('仕事運(5段階) -- ' + json["horoscope"][ymd][seiza]["job"]); Logger.log('ラッキーカラー -- ' + json["horoscope"][ymd][seiza]["color"]); Logger.log('恋愛運(5段階) -- ' + json["horoscope"][ymd][seiza]["love"]); Logger.log('ランキング -- ' + json["horoscope"][ymd][seiza]["rank"]); Logger.log('星座 -- ' + json["horoscope"][ymd][seiza]["sign"]); var address = 'ここに送信するアドレスを指定します!'; var title = ymd + 'の占いです'; GmailApp.sendEmail(address, title, contents); } |
ログ出力ありのコードを実行した際のログ情報です。
該当変数にはどういった値が入っていて、得られた結果はどういうものかを把握しながら進めましょう!
ちなみに今回はJSON形式で結果が帰ってくるので、それを取得できるようにする必要があります!
1 2 3 4 5 6 7 8 9 10 11 12 |
[19-02-16 03:14:10:994 JST] date:Sat Feb 16 2019 03:14:10 GMT+0900 (JST) [19-02-16 03:14:10:994 JST] jApi:http://api.jugemkey.jp/api/horoscope/free/2019/02/16 [19-02-16 03:14:11:391 JST] [{love=4, item=化粧水, total=3, money=4, color=グリーン, sign=牡羊座, rank=6, job=3, day=16, content=美容にお金と時間をかけると、効果が出やすい日。エステやマッサージで気持ちよく心と体をリフレッシュできそうです。}, {love=2, item=日記帳, total=1, money=2, color=ゴールド, sign=牡牛座, rank=12, job=1, day=, content=忘れ物には要注意。出かける前に荷物のチェックをしておきましょう。交通機関の中でも、荷物は手から離さないほうが無難。}, {love=5, item=写真集, total=5, money=5, color=グレー, sign=双子座, rank=2, job=4, day=, content=恋人と楽しくデートができる日。嬉しい時は、口に出して喜びを伝えて。片思いの人は、大胆な行動をしてみましょう♪}, {love=4, item=封筒, total=4, money=4, color=ピンク, sign=蟹座, rank=5, job=3, day=, content=忙しい仕事でも、無理はしないほうが身のためです。心を落ち着けて、正確に状況を見つめれば、最善の対応ができます。}, {love=5, item=美容に関する本, total=5, money=5, color=ブラック, sign=獅子座, rank=1, job=5, day=, content=運気は好調。恋人はあなたが知らないところで、サプライズの準備中です。何よりもプライベートの時間を最優先して問題なし!}, {love=2, item=リップクリーム, total=2, money=2, color=イエロー, sign=乙女座, rank=11, job=2, day=, content=必死に働いても、期待した結果を出すのは困難。計画通りに終わらなくても、また明日やろう、という切り替えが大事。}, {love=3, item=ファンデーション, total=3, money=3, color=シルバー, sign=天秤座, rank=8, job=3, day=, content=献身的な行動が、あなたの魅力を高めます。今日は好きな人に、いいアピールができるでしょう。シックな装いがポイントに。}, {love=3, item=トレーナー, total=3, money=3, color=レッド, sign=蠍座, rank=7, job=4, day=, content=カルチャースクールに行ってみるなど、勉強に費やす時間が大切な日。興味を持ったことがあるなら、ぜひ実践に移してみて。}, {love=5, item=メイクポーチ, total=4, money=5, color=パープル, sign=射手座, rank=3, job=4, day=, content=年上の友達との縁がある日。誘われた用事は、ためらわずにぜひ参加を。あなたの将来に役立つ出来事がありそうです☆}, {love=2, item=ロールケーキ, total=2, money=2, color=オレンジ, sign=山羊座, rank=10, job=3, day=, content=人の出入りが激しい場所に立ち寄ると、運気がアップする予感。デパートや映画館などに、恋人を誘って出かけてみて。}, {love=3, item=うめぼし, total=3, money=3, color=ホワイト, sign=水瓶座, rank=9, job=2, day=, content=早朝の散歩など、体を動かすことに興味を持ってみて。たっぷり汗をかくと、仕事や学業のモチベーションが生まれます。}, {love=4, item=絵葉書, total=4, money=4, color=ブルー, sign=魚座, rank=4, job=5, day=, content=朝から忙しくなりそうな一日です。苦手な仕事を率先して引き受けると、新たな可能性が広がるかも。常に笑顔を心がけて♪}] [19-02-16 03:14:11:391 JST] 占いの内容 -- 恋人と楽しくデートができる日。嬉しい時は、口に出して喜びを伝えて。片思いの人は、大胆な行動をしてみましょう♪ [19-02-16 03:14:11:392 JST] ラッキーアイテム -- 写真集 [19-02-16 03:14:11:392 JST] 金運(5段階) -- 5 [19-02-16 03:14:11:392 JST] 総合運(5段階) -- 5 [19-02-16 03:14:11:393 JST] 仕事運(5段階) -- 4 [19-02-16 03:14:11:393 JST] ラッキーカラー -- グレー [19-02-16 03:14:11:393 JST] 恋愛運(5段階) -- 5 [19-02-16 03:14:11:394 JST] ランキング -- 2 [19-02-16 03:14:11:395 JST] 星座 -- 双子座 |
ログ出力の記載がないverのコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
//API仕様書 : http://jugemkey.jp/api/waf/api.php function myFunction() { //今日の日付をAPIパラメータ用にバラバラに取得 var date = new Date(); var dateY = Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy'); var dateM = Utilities.formatDate( date, 'Asia/Tokyo', 'MM'); var dateD = Utilities.formatDate( date, 'Asia/Tokyo', 'dd'); var ymd = dateY + '/' + dateM + '/' + dateD; var jApi = 'http://api.jugemkey.jp/api/horoscope/free/' + dateY + '/' + dateM + '/' + dateD; //APIをfetchする var response = UrlFetchApp.fetch(jApi); var json=JSON.parse(response.getContentText()); //[牡羊座:0][牡牛座:1][双子座:2][蟹座:3][獅子座:4][乙女座:5][天秤座:6][蠍座:7][射手座:8][山羊座:9][水瓶座:10][魚座:11] var seiza = 2; //イケてない記述ですが、配信内容を取得 var content = '占いの内容 -- ' + json["horoscope"][ymd][seiza]["content"]; var item = 'ラッキーアイテム -- ' + json["horoscope"][ymd][seiza]["item"]; var money = '金運(5段階) -- ' + json["horoscope"][ymd][seiza]["money"]; var total = '総合運(5段階) -- ' + json["horoscope"][ymd][seiza]["total"]; var job = '仕事運(5段階) -- ' + json["horoscope"][ymd][seiza]["job"]; var color = 'ラッキーカラー -- ' + json["horoscope"][ymd][seiza]["color"]; var love = '恋愛運(5段階) -- ' + json["horoscope"][ymd][seiza]["love"]; var rank = 'ランキング -- ' + json["horoscope"][ymd][seiza]["rank"]; var sign = '星座 -- ' + json["horoscope"][ymd][seiza]["sign"]; //イケてない記述ですが、メールに送信する本文を指定してます var contents = sign + '\n' + rank + '\n' + content + '\n' + total + '\n' + money + '\n' + job + '\n' + love + '\n' + item + '\n' + color; var address = 'ここに送信するアドレスを指定します!'; var title = ymd + 'の占いです'; GmailApp.sendEmail(address, title, contents); } |
2.コード説明
今回、こちらのサイトで無償提供されているAPIを使って本機能を作ってみました。
利用の条件がありますので、商用利用する場合は有料版を使うようにしてください。
http://jugemkey.jp/api/waf/
API仕様書 : http://jugemkey.jp/api/waf/api.php
API仕様書の中でパラメータを見るとGETで指定するだけで希望する情報が取得できるようです。
今回指定するのはyyyy形式のyearと、MM形式のmonthと、dd形式のdayの3つです。
毎日の占いを自動配信する場合、それらを取得して変数に用意する必要が出てきます。
指定URL:http://api.jugemkey.jp/api/horoscope/year/month/day
1 2 3 4 5 6 7 8 9 |
//今日の日付をAPIパラメータ用にバラバラに取得 var date = new Date(); var dateY = Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy'); var dateM = Utilities.formatDate( date, 'Asia/Tokyo', 'MM'); var dateD = Utilities.formatDate( date, 'Asia/Tokyo', 'dd'); var ymd = dateY + '/' + dateM + '/' + dateD; Logger.log('date:' + date); var jApi = 'http://api.jugemkey.jp/api/horoscope/free/' + dateY + '/' + dateM + '/' + dateD; Logger.log('jApi:' + jApi); |
上記処理でLogger.log()の処理が入っているので、以下にログ結果を載せておきます。
今回の記載でdateでは日付情報が取れているので、あとは形式を指定して変数にセットし、該当変数をAPIにセットします。
APIの結果ではしっかりと本日の日付が入っていることが確認できます!
1 2 |
[19-02-16 03:07:19:832 JST] date:Sat Feb 16 2019 03:07:19 GMT+0900 (JST) [19-02-16 03:07:19:832 JST] jApi:http://api.jugemkey.jp/api/horoscope/free/2019/02/16 |
UrlFetchApp.fetch()で、APIの結果を呼び出すコードを記述しています!
これを実行すると結果のJSONデータが変数 response に入ります。
その結果を出力したログがあるので、ログも記載しておきます。
※json形式のデータを出力するためにはJSON.parse(response.getContentText())で指定した変数に入れて、取り出し方は配列と同じです
1 2 3 4 |
//APIをfetchする var response = UrlFetchApp.fetch(jApi); var json=JSON.parse(response.getContentText()); Logger.log(json["horoscope"][ymd]); |
JSON形式の情報が全て詰め込まれてレスポンスがあるので、この中から必要な情報を抜き取る指示をしていきます。
1 |
[19-02-16 03:26:46:000 JST] [{love=4, item=化粧水, total=3, money=4, color=グリーン, sign=牡羊座, rank=6, job=3, day=16, content=美容にお金と時間をかけると、効果が出やすい日。エステやマッサージで気持ちよく心と体をリフレッシュできそうです。}, {love=2, item=日記帳, total=1, money=2, color=ゴールド, sign=牡牛座, rank=12, job=1, day=, content=忘れ物には要注意。出かける前に荷物のチェックをしておきましょう。交通機関の中でも、荷物は手から離さないほうが無難。}, {love=5, item=写真集, total=5, money=5, color=グレー, sign=双子座, rank=2, job=4, day=, content=恋人と楽しくデートができる日。嬉しい時は、口に出して喜びを伝えて。片思いの人は、大胆な行動をしてみましょう♪}, {love=4, item=封筒, total=4, money=4, color=ピンク, sign=蟹座, rank=5, job=3, day=, content=忙しい仕事でも、無理はしないほうが身のためです。心を落ち着けて、正確に状況を見つめれば、最善の対応ができます。}, {love=5, item=美容に関する本, total=5, money=5, color=ブラック, sign=獅子座, rank=1, job=5, day=, content=運気は好調。恋人はあなたが知らないところで、サプライズの準備中です。何よりもプライベートの時間を最優先して問題なし!}, {love=2, item=リップクリーム, total=2, money=2, color=イエロー, sign=乙女座, rank=11, job=2, day=, content=必死に働いても、期待した結果を出すのは困難。計画通りに終わらなくても、また明日やろう、という切り替えが大事。}, {love=3, item=ファンデーション, total=3, money=3, color=シルバー, sign=天秤座, rank=8, job=3, day=, content=献身的な行動が、あなたの魅力を高めます。今日は好きな人に、いいアピールができるでしょう。シックな装いがポイントに。}, {love=3, item=トレーナー, total=3, money=3, color=レッド, sign=蠍座, rank=7, job=4, day=, content=カルチャースクールに行ってみるなど、勉強に費やす時間が大切な日。興味を持ったことがあるなら、ぜひ実践に移してみて。}, {love=5, item=メイクポーチ, total=4, money=5, color=パープル, sign=射手座, rank=3, job=4, day=, content=年上の友達との縁がある日。誘われた用事は、ためらわずにぜひ参加を。あなたの将来に役立つ出来事がありそうです☆}, {love=2, item=ロールケーキ, total=2, money=2, color=オレンジ, sign=山羊座, rank=10, job=3, day=, content=人の出入りが激しい場所に立ち寄ると、運気がアップする予感。デパートや映画館などに、恋人を誘って出かけてみて。}, {love=3, item=うめぼし, total=3, money=3, color=ホワイト, sign=水瓶座, rank=9, job=2, day=, content=早朝の散歩など、体を動かすことに興味を持ってみて。たっぷり汗をかくと、仕事や学業のモチベーションが生まれます。}, {love=4, item=絵葉書, total=4, money=4, color=ブルー, sign=魚座, rank=4, job=5, day=, content=朝から忙しくなりそうな一日です。苦手な仕事を率先して引き受けると、新たな可能性が広がるかも。常に笑顔を心がけて♪}] |
ログであった様々な情報から、必要な情報を取得します。
まず、変数 seiza に自分の星座番号を入れます。
※私は双子座なので2を選択してます
さらに一つずつの要素の取り方ですが、json[”horoscope”][ymd][seiza][”********”]で取得することができます。***の部分はそれぞれ指定を変更できないので、このコードで指定している情報をそのままお使いください。
1 2 3 4 5 6 7 8 9 10 11 12 |
//[牡羊座:0][牡牛座:1][双子座:2][蟹座:3][獅子座:4][乙女座:5][天秤座:6][蠍座:7][射手座:8][山羊座:9][水瓶座:10][魚座:11] var seiza = 2; //イケてない記述ですが、配信内容を取得 var content = '占いの内容 -- ' + json["horoscope"][ymd][seiza]["content"]; var item = 'ラッキーアイテム -- ' + json["horoscope"][ymd][seiza]["item"]; var money = '金運(5段階) -- ' + json["horoscope"][ymd][seiza]["money"]; var total = '総合運(5段階) -- ' + json["horoscope"][ymd][seiza]["total"]; var job = '仕事運(5段階) -- ' + json["horoscope"][ymd][seiza]["job"]; var color = 'ラッキーカラー -- ' + json["horoscope"][ymd][seiza]["color"]; var love = '恋愛運(5段階) -- ' + json["horoscope"][ymd][seiza]["love"]; var rank = 'ランキング -- ' + json["horoscope"][ymd][seiza]["rank"]; var sign = '星座 -- ' + json["horoscope"][ymd][seiza]["sign"]; |
ここでメールに送信する情報をセットします。
コンテンツはそれぞれ改行する処理を追加して、それを変数 contents に集約してます。
1 2 3 4 5 6 |
//イケてない記述ですが、メールに送信する本文を指定してます var contents = sign + '\n' + rank + '\n' + content + '\n' + total + '\n' + money + '\n' + job + '\n' + love + '\n' + item + '\n' + color; var address = 'ここに送信するアドレスを指定します!'; var title = ymd + 'の占いです'; GmailApp.sendEmail(address, title, contents); |
これらを問題なくセッテイングできた場合、再生マークを押してプログラムを実行すると、問題なく送信できれば以下情報が届きます。
※始めてスプレッドシートを作成している場合はGmailなどのアプリに連携のテストが届きます

3.毎日自動配信する設定
毎回占い内容が届くようにするには、トリガーでセットしてあげる必要があります。
トリガーの設定記事は↓↓↓
前回の画像で申し訳ないですが、以下部分よりトリガーを開きます。

まずは右下の『トリガーを追加』を選択し、ポップアップウィンドウを表示させます。
ここでは実行する関数や、イベントソースの選択やイベントの種類を指定する必要があります。
それらを終えたら『保存』をクリックします。
実行する関数 | submitForm |
実行できるデプロイ | Head |
イベントのソース | 時間主導型 |
時間ベースのトリガーのタイプを選択 | 日付ベースのタイマー |
時刻を選択 | 配信したい時間をセット |

設定完了すると、指定した時間にメールが届くようになります!
トリガーの設定を忘れなければコピペで実装できる機能なのでぜひお試しください!
以上で「Googleスプレッドシートで『今日の運勢』を毎日メールする」は完了です!
最後までお付き合い頂きありがとうございました!