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

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

pyenvでPython3.7.0をインストールしようとしたらWARNING発生

pyenvでPython 3.7.0をインストールしようとしたらエラー発生。

WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?

拡張機能が足りないけどいいすか?みたいな内容らしい。

それぞれapt-getすればOK。

$ sudo apt-get update
$ sudo apt-get install -y libbz2-dev libreadline-dev libsqlite3-dev

マナーモードのまま寝るとGalaxy Note8のアラームが鳴らない問題

有給消化期間かつ岡山→東京の引っ越しもようやく落ち着いてきて朝もゆっくり二度寝している最近ですが、今日はきちんと7時に起きようとスマートフォンのアラームをセットしていました。 が、鳴らない!

マナーモードでもアラームだけはなる設定のはずなのに通知をミュートの例外に設定しても、鳴らない!

何故だ・・・と思い寝起きの頭で考えること2分。諦めてぐぐるとめっちゃ分かりやすい記事を発見。

(Galaxy) アラームを設定する方法を教えてください。 | Samsung JP

Galaxyの公式サイトでした。意外とサポートもちゃんとしているんですねぇ。

今回の問題点は「時計」アプリの唯一の設定項目である「アラームとタイマーをバイブに設定」でした。

これをオンにしているとマナーモードではバイブレーションのみのアラームになるようです。

なんでこれがデフォルト設定なんだ・・・と思いますが、解決しました。

Galaxyシリーズでマナーモード・サイレントモードでアラーム音が鳴らなくて困っている方は是非ご確認ください。

GASとSlackとGoogleHomeで毎朝なにを着れば良いか教えてもらう

f:id:maru0014:20181014232943p:plain

最近は季節の変わり目で朝起きて寒いなーと思って上着を着ていくと、意外と昼間は暑くて上着が邪魔になったり。逆に意外と寒かったり。

朝どんな服装にするべきか悩ましいのですが、tenki.jpではどれくらいの服装なら体感温度が適温になるのか「服装指数」というものを表示してくれています。

これを毎朝確認すれば前述のような自体は避けられる!と思ったが自動化厨にとってそれは大変面倒くさいというもの。

今回はGASでお手軽にスクレイピング→Slackへ投稿→GoogleHomeに喋らせるという仕組みを作りました。

※今回の記事では「GASでスクレイピング→Slackへ投稿」までを紹介します。「→GoogleHomeに喋らせる」は以下の過去記事を参照ください。

code-life.hatenablog.com

Googleスプレッドシートでスクレイピング

東京地方(東京)の服装指数 - 日本気象協会 tenki.jp

https://tenki.jp/indexes/dress/3/16/4410/

東京の方はこちらのページですね。お住まいの地域に合わせてページURLをコピーしておきましょう。

このページに欲しい情報は全て載っています。

  1. 服装指数
  2. どんな服装にすべきかのコメント
  3. 天気
  4. 最高/最低気温

これらの情報をスプレッドシート上に取得・表示できるようにするのですが、Googleスプレッドシートには超便利な関数「importxml」があります。

この関数は=importxml("スクレイピング対象URL","XPathクエリ")のように記述するだけで対象要素のテキストをセルに表示することができます!

スプレッドシートの完成イメージ

f:id:maru0014:20181014234349p:plain

だいたいこんなかんじです。ぶっちゃけ3行目以下は不要なんですが、なぜかXpathのインデックス番号を指定しても全部取得されちゃってめんどくさいので諦めてこのまま使いました。

関数入力

各項目を以下のようなXpathで取得します。

※今回スクレイピング対象URLはI1セルに入力してあります。

項目 関数入力
A 日付 =today()
B 指数 =importxml(I1,"//*[@id='main-column']//*[contains(@class, 'indexes-telop-0')]")
C 天気 =importxml(I1,"//*[@id='main-column']//*[@class='weather-telop']")
D 最高気温(℃) =importxml(I1,"//*[@id='main-column']//*[@class='high-temp']")
E 最低気温(℃) =importxml(I1,"//*[@id='main-column']//*[@class='low-temp']")
F 降水確率 =importxml(I1,"//*[@id='main-column']//*[@class='precip']")
G コメント =importxml(I1,"//*[@id='main-column']//*[contains(@class, 'indexes-telop-1')]")
H 文章 =CONCATENATE("本日の天気は",C2,"、最高気温",D2,"、最低気温",E2,"、降水確率",F2,"%、服装指数は",B2,"です。",G2,"。")

H列にはSlackへ投稿させるメッセージ内容です。各項目を文章として結合しています。

以下を参考にしました

review-of-my-life.blogspot.com

qiita.com

GASでスプレッドシートのデータを取得してSlackへ投稿

Slackで事前に着信Webフックを用意しておきます。以下の過去記事を参考に設定してください。

code-life.hatenablog.com

コード.jsに以下のように記述

var postUrl = 'ここにSlackの着信WebフックURL';

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシートを取得
  var sheet = spreadsheet.getActiveSheet(); //シートを取得
  var message = sheet.getRange("H2").getValue(); //投稿用文章が入っているセルの中身を取得
  
  var payload = JSON.stringify(
  {
     "text" : message
  });
  
  var options =
  {
    "method" : "post",
    "contentType" : "application/json",
    "payload" : payload
  };
  
  UrlFetchApp.fetch(postUrl, options); //Slackへ投稿
}

ここまでできたらテスト実行。再生ボタンを押しましょう。

f:id:maru0014:20181015000147p:plain

これでSlackへ無事投稿されればOK。

毎朝自動実行する

再生ボタン左にある時計アイコンをクリック。

以下のように設定して保存すれば毎朝教えてくれます。

f:id:maru0014:20181015000336p:plain

Docomoのsimロック解除済みGalaxy Note8 SC-01Kをソフトバンク回線で使ってみた。方法と注意点

www.nttdocomo.co.jp

まず結論から言うと問題なく使えた。

前提条件

  • simロック解除済みのGalaxy Note8 SC-01Kをヤフオクで購入
  • ソフトバンクsimカードはAndroid端末用のためIMEI制限がかかっている

使用状況

  • 通話利用可能
  • SMS利用可能
  • 通信品質問題なし
  • S!メール(ソフトバンクのメールアドレス)利用可能
  • Wi-Fiテザリング可能

注意事項(ソフトバンクのお客様サポートページは必読)

www.softbank.jp

※記事執筆時点と異なる内容の場合がありますので必ず現時点の情報をご確認ください。

① simロックが解除されていない端末は利用できません

当然ながらsimロックが解除されていないスマートフォンは利用できません。

Galaxy Note8がソフトバンクからも発売されていたら何も問題なかったのですが、残念ながらDocomoとauからしか発売されておらずこの度の状況になりました。 当然ですがDocomoやauの端末をそれら以外の会社で使おうとすればsimロック解除が必須となります。

メルカリやヤフオクなどで購入する場合は必ずロックが解除されたものを選びましょう。

続きを読む

Raspberry PiのセットアップからPython実行環境構築とイメージファイルバックアップまで

Raspberry Piを購入してから10ヶ月ほど経ちましたが、分からないなりに色々いじくり回していると余計に訳がわからない事態に陥ることもしばしば。

仕方ないクリーンインストールするか・・・ということが何度もありました。

その手間をなるべく省くために大まかなセットアップ手順とリセットを楽にするためのimgバックアップの方法をメモしておきます。

  • Raspberry PiのRaspbianセットアップと設定後イメージファイルのバックアップ
    • ①OSのイメージファイルをダウンロード
      • どちらを選べばいいのか
    • ② EtcherでSDカードに書き込む
    • ③ 起動後すぐにSSH接続できるように設定しておく
      • Wi-Fi設定
        • 最新版では一度有線接続してセットアップが必要かも
      • SSHの有効化
    • ④ Raspberry Piにセットして起動し、SSH接続
      • 有線LANで直接接続する場合
      • 無線LANでする場合
    • ⑤ raspi-configで各種設定
      • 1 ChangeUser Password
      • 3 Boot Options・・・起動方法
      • 4 Localisation Options
      • 5 Interfacing Options
      • 7 Advanced Options
    • ⑥ IPアドレスを固定する
  • こだわり設定
    • ①「SDカード寿命対策」
      • 1. Swap領域の無効化
      • 2. テンポラリ領域 を RAM へ
      • 3. rsyslog の ログ出力を抑制
      • 4. ログ出力ディレクトリ を RAM へ
    • ② 軽量化・高速化
      • 1. カーネルのログを抑制
      • 2. CPU の 動作クロック設定
      • 3. アップデートやらクリーンアップやらをshファイルで一括実行
  • イメージファイルのバックアップ
  • Python実行環境を整える
    • git経由でpyenvをインストール
    • 依存関係のあるライブラリをインストール
    • pipenvをインストール
    • pipenvでプロジェクト単位の仮想環境構築
    • 仮想環境でHello World!
      • pipでパッケージをインストールするには
      • 別の仮想環境に切り替える
  • あとがき

Raspberry PiのRaspbianセットアップと設定後イメージファイルのバックアップ

NOOBSが書き込まれたSDカードが付属しているパターンならそれを使ってもいいと思います。

①OSのイメージファイルをダウンロード

RASPBIAN

www.raspberrypi.org

RASPBIANにはDESKTOP版とLITE版の2種類が用意されています。

DESKTOP LITE
容量 4.49GB 1.73GB
UI GUI / CLI CLIのみ

GUI・・・グラフィックユーザーインターフェース。Windowsのようにマウスを使って視覚的、直感的な操作。

CLI・・・コマンドラインインターフェース。マウスなどは使わずキーボードでのコマンド入力のみで操作。

どちらを選べばいいのか

CLIでの操作に慣れていない場合やSDカードの容量に余裕がある(8GB以上)場合はDESKTOP版。

とりあえず手持ちの古いSDカード(4GB)などで安く済ませたい、Raspberry Pi Zeroなのでスペックが低いという場合はLITE版。

※DESKTOP版も設定で後からCLIに切り替えることが可能です。

続きを読む