自動化厨のプログラミングメモブログ │ CODE:LIFE

Python/ExcelVBA/JavaScript/Raspberry Piなどで色んなことを自動化

APIで取得したJSONをいい感じにスプレッドシートに展開したい

SlackなどのAPIからJSONデータを取得したあとそれをスプレッドシートに展開する場合、オブジェクトのkeyを一個ずつ指定して二次元配列を作ってシートに展開...みたいなことをやっていました。

しかし、いちいちkeyを指定してやるのが面倒だしコードも見やすくはないのでkeyを全てシートの1行目に展開、対応する値を行ごとにセットする方法を考えてみました。

  • やりたいこと
  • ネストされたJSONをテーブルにするため「フラット化」する
  • 今回の肝になる flattenObj 関数
    • SlackAPIのユーザ情報をスプレッドシートに展開してみる
  • 各ステップの解説
    • 配列内のObjectをフラット化
    • 1つ目の配列のkeyをヘッダーとして定義
    • headers をループして生成した配列を body 配列にまとめる
    • headers と body を結合
    • setValues
  • あとがき

 

やりたいこと

画像左のSlackAPIで取得したユーザデータなどをスプレッドシート上にテーブルとして展開したい。

しかも もとのJSONのパターンに関わらず使い回せるように作っておきたい。

f:id:maru0014:20210621215928p:plain

しかし、単純に配列をループしてObject.keysをループしても profile 以下のデータまでループする作りではないので以下画像のとおりオブジェクトのままセットされちゃいます。

えー、じゃあObjectの中のObject.keysもループしてさらに下の...うーん。

f:id:maru0014:20210621215943p:plain

続きを読む

MacroDroidを使ってSESAMEのステータスをワンボタンで確認する

f:id:maru0014:20210526225616p:plain
サクッとステータス確認。80%くらいあると思ったら意外と減ってた。

昨年IFTTTの有料化によって回避策として投稿した記事にて

「セサミのステータス(バッテリー、ロック状態)をウィジェットボタン一つでわかるようなスクリプトは出来るでしょうか?」

とコメントでリクエストを頂いたので作ってみました。

続きを読む

Rakuten miniとMacroDroidを使って登下校時の通知システムを0円で作る

f:id:maru0014:20210519230606p:plain 誤家庭の子育てITネタです。

メール通知だけの簡単バージョンとAlexaに喋らせる誤家庭バージョンの作り方を書いてみました。

背景

4月から娘が小学校に行き始めました。最初は保護者が一緒に登校して、帰りは先生方が付いて下校するのですが今月からは子供だけで下校することに。

学校までは遠くもないですが、やはり心配ということで登下校時の通知システムを構築しました。

  • 背景
  • MacroDroidとは
  • メール通知マクロを設定
    • 登校メール
    • 下校メール
  • 聞かれそうな質問に予め答えておきます
  • 誤家庭向けのAlexa通知システム
    • 各ノードの設定
    • MacroDroidの設定
    • 登校通知
    • 下校通知
  • 数日動作させてみての感想
続きを読む

プライベートチャンネル自動生成 GASでSlackスラッシュコマンド(後編)

前回、GASでSlackのスラッシュコマンドのテストを行いました。 無事に応答が返ってくるのも確認できたので実際にプライベートチャンネルを作成する処理を書いていきます。 codelife.cafe

動作概要の確認

  1. スラッシュコマンド /soudan を実行
  2. プライベートチャンネル private_soudan_<ユーザ名>を生成
  3. チャンネルにコマンド実行ユーザとスプレッドシートで指定したユーザを追加
  4. チャンネル作成完了のメッセージを返す
  5. エラーが発生した場合はエラーコードを返す

こんなかんじで動きます。

  • Slack App の設定
    • Slash Commandを変更
    • OAuth Tokenを取得
    • 権限スコープを設定
  • Google Apps Script を作成
    • getSlackUsers() ユーザ情報を一括取得
    • createSlackGroups(channel_name) プライベートチャンネル作成
    • inviteSlackUser(channel_id, user_id) チャンネルにユーザを追加
    • getInviteSlackUsers() 参加ユーザリストを取得
    • doPost(e) SlashCommandからのリクエスト受付
  • 検証
    • エラー処理の確認
  • まとめ
続きを読む

相談用プライベートチャンネル自動生成 GASでSlackのスラッシュコマンド(前編)

shanaiho.smarthr.co.jp 会社の同僚からこんなのをやりたいとURL付きのチャットが来たので、GASで実装できるか検証してみます。

最終目標

  1. 所定のスラッシュコマンドを実行する
  2. プライベートチャンネルを生成
  3. プライベートチャンネルに実行ユーザと固定ユーザを追加
  4. チャンネルの案内メッセージを返す

というのを作るんですが…そもそもSlackのSlash Commandを作ったことがないので前編ではどんな風にGASに対してリクエストを送信できるのかを実験。 まずはSlash Commandを実行すると送信したリクエスト内容をそのまま返すだけの機能を作ってみます。

  • Google Apps Script を作成
  • Slack Apps を作成
  • Slash Commands を作成
  • アプリをWorkspaceにインストール
  • 実験
  • まとめ
続きを読む