5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

信州大学 kstmAdvent Calendar 2018

Day 6

ポケモンターミナルを天気予報化する

Last updated at Posted at 2018-12-05

この記事は信州大学 kstm Advent Calendar 2018の6日目の記事として書いています.

#はじめに
皆さん,唐突ですが,ポケモンターミナルというものをご存知でしょうか.
iTerm2等で背景画像をポケモンにすることができるものです.
しかも,そのポケモンの数は719種類対応しており,ほとんどのポケモンを網羅しています.
話は変わりますが,最近,異常気象多いですよね.
研究室の学生をやっていると「雨が降る」とか「雷雨になりそう」となった時は早く帰りたくなるものです.
そこで,普段使うターミナルが「天気によって背景が変わるといいな」と思ったので今回の記事に至りました.
(要は暇つぶしです.)

#準備
ポケモンターミナルをインストールしてください.
注意点として,Python 3.6以上の環境でないと動かないようです.
事前に環境を整えておくと良いでしょう.
詳しくはリンク先にインストール方法,より詳しい注意点などが書いてあるのでそれを参照して下さい.
筆者はiTerm2とTilix(OSはArchLinux)上での駆動を確認しています.

#天気を取得する準備
今回は天気を取得する上でOpenWeatherMapsというサイトで提供されているAPIを使用します.
注意点として無料プランではAPIを叩くのは1分間60回までが上限とされています.
後々コードは示しますがコード自体はターミナルのタブを1つ開く毎に1回コールします.
1分間に連続して,タブ60個も開かないよね!?

  1. こちらからアカウント登録して下さい.無料なので安心して下さい.
  2. 登録完了後,ユーザーページに行くと下の項目にAPI Keyという項目(下の画像の黒いバーの部分)があります.この項目を控えて置いて下さい.あとで使用します.
api key.png

#天気予報化のコード
まず,先ほど控えたAPI KeyをWEATHERAPPID,
天気予報して欲しい地域のエリア名をWEATHERPLACEという名前の環境変数で記録しておいてください.
天気予報して欲しい地域のエリア名の例はこちらのページで設定してみたい地域を調べて,出てきた結果に応じてやって見てください.
Screen Shot 2018-12-05 at 14.48.33.png
東京の場合は環境変数が以下のようになります.

WEATHERPLACE="Tokyo, JP"

下記コードについて,簡単に説明します.

実装時に天気で姿が変わるポケモンが適していると思ったので,

快晴:ポワルン 晴れの姿
曇り:ポワルン 普通の姿
雨・霧雨:ポワルン 雨の姿
雷雨:サンダー(伝説のポケモンだし,低確率でいいよね?
雪:ポワルン 雹の姿
その他:ポワルン 普通の姿

という感じにテキトーに組みました.
見にくいとか気に食わない点があれば,自分で別ポケモンの画像に差し替えてください.
あまりにもテキトーに組んだので文字が見にくいとかが発生してる.自分でも別ポケモンの背景選定している最中.

pokemonTerminalByweather.py
# -*- 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

お疲れ様でした.

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?