この記事は信州大学 kstm Advent Calendar 2018の6日目の記事として書いています.
#はじめに
皆さん,唐突ですが,ポケモンターミナルというものをご存知でしょうか.
iTerm2等で背景画像をポケモンにすることができるものです.
しかも,そのポケモンの数は719種類対応しており,ほとんどのポケモンを網羅しています.
話は変わりますが,最近,異常気象多いですよね.
研究室の学生をやっていると「雨が降る」とか「雷雨になりそう」となった時は早く帰りたくなるものです.
そこで,普段使うターミナルが「天気によって背景が変わるといいな」と思ったので今回の記事に至りました.
(要は暇つぶしです.)
#準備
ポケモンターミナルをインストールしてください.
注意点として,Python 3.6以上の環境でないと動かないようです.
事前に環境を整えておくと良いでしょう.
詳しくはリンク先にインストール方法,より詳しい注意点などが書いてあるのでそれを参照して下さい.
筆者はiTerm2とTilix(OSはArchLinux)上での駆動を確認しています.
#天気を取得する準備
今回は天気を取得する上でOpenWeatherMapsというサイトで提供されているAPIを使用します.
注意点として無料プランではAPIを叩くのは1分間60回までが上限とされています.
後々コードは示しますがコード自体はターミナルのタブを1つ開く毎に1回コールします.
1分間に連続して,タブ60個も開かないよね!?
- こちらからアカウント登録して下さい.無料なので安心して下さい.
- 登録完了後,ユーザーページに行くと下の項目にAPI Keyという項目(下の画像の黒いバーの部分)があります.この項目を控えて置いて下さい.あとで使用します.
#天気予報化のコード
まず,先ほど控えたAPI KeyをWEATHERAPPID,
天気予報して欲しい地域のエリア名をWEATHERPLACEという名前の環境変数で記録しておいてください.
天気予報して欲しい地域のエリア名の例はこちらのページで設定してみたい地域を調べて,出てきた結果に応じてやって見てください.
東京の場合は環境変数が以下のようになります.
WEATHERPLACE="Tokyo, JP"
下記コードについて,簡単に説明します.
実装時に天気で姿が変わるポケモンが適していると思ったので,
快晴:ポワルン 晴れの姿
曇り:ポワルン 普通の姿
雨・霧雨:ポワルン 雨の姿
雷雨:サンダー(伝説のポケモンだし,低確率でいいよね?)
雪:ポワルン 雹の姿
その他:ポワルン 普通の姿
という感じにテキトーに組みました.
見にくいとか気に食わない点があれば,自分で別ポケモンの画像に差し替えてください.
あまりにもテキトーに組んだので文字が見にくいとかが発生してる.自分でも別ポケモンの背景選定している最中.
# -*- coding:utf-8 -*-
import os
import subprocess
import shlex
import urllib.request
import json
if __name__ == "__main__":
api_key = os.environ.get('WEATHERAPPID')
area_name = os.environ.get('WEATHERPLACE')
url = "http://api.openweathermap.org/data/2.5/forecast?"+"q="+area_name+"&units=metric"+"&appid="+api_key
source = urllib.request.urlopen(url)
data = json.loads(source.read())
num = data['list'][2]['weather'][0]['id']
if num/100 == 8:
if num%100:
cmd = "pokemon castform" #cloud
else:
cmd = "pokemon castform-sun" #clear
elif num/100 == 6:
cmd = "pokemon castform-hail" #snow
elif num/100 == 5 or num/100 == 3:
cmd = "pokemon castform-rain" #rain or drizzle
elif num/100 == 2:
cmd = "pokemon Zapdos" #thunderstorm
else:
cmd = "pokemon castform" #other
cmd = shlex.split(cmd)
ret = subprocess.check_output(cmd)
print(ret)
上記のコードを利用する場合,.zshrcや.bashrcへ以下を記入して終了です.
python pokemonTerminalByWeather.py
お疲れ様でした.