Ubuntuにログインした時に、天気予報アプリを自動起動する。

#####実行した環境
Ubuntu Stdio 17.10
Python 3.6.3

lubuntuのノートパソコンにインストールしようとしたら、tkinterがインストールされていなかったので、パッケージのインストールのやり方を紹介。

一番最初にパッケージが不足しているエラーがでたら、
ModuleNotFoundError: No module named 'パッケージ名'
$ pip install パッケージ名　　　　Python2系
$ pip3 install パッケージ名　　　　Python3系

パッケージ名がわからない時は、
$ pip search パッケージ名の一部の名前　　　　Python2系
$ pip3 search パッケージ名の一部の名前　　　　Python3系

pipで見つからない時は、
$ apt search tkinter
・・・
python-tk/artful,now 2.7.14-1 amd64 [インストール済み]
  Tkinter - Python により Tk アプリケーションを作成

python3-tk/artful,now 3.6.3-0ubuntu1 amd64 [インストール済み]
  Tkinter - Writing Tk applications with Python 3.x

tkinterのインストールのやり方
$ sudo apt update
$ sudo apt install python3-tk　　　　　　Python3系の場合

#１．プログラムを作成する。
Pythonで天気の情報を取得する方法・City Code等は、下記のHPを参考にしてください。

```python:weather.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import requests
import json
import time

import tkinter as tk

url = 'http://weather.livedoor.com/forecast/webservice/json/v1'
payload = {'city': '270000'} # 大阪
data = requests.get(url, params = payload).json()

printdata = data['title']

printdata = printdata + "\n" 

printdata = printdata + "\n" + data['description']['text']

for forecast in data['forecasts']:
    printdata = printdata + "\n" 
    printdata = printdata + "\n" + forecast['dateLabel']+'('+forecast['date']+')　：' + forecast['telop']

printdata = printdata + "\n" 

root = tk.Tk()
root.title('天気予報')
 
text_widget = tk.Text(root, font=('', 20, "bold"))
text_widget.grid(column=0, row=0, sticky=(tk.N, tk.S, tk.E, tk.W))
 
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)

text_widget.insert('1.0', printdata)
root.mainloop()
```

weather.pyに実行権限を与えます。

```python:
$ chmod +x weather.py
```

端末で実行する。

```python:
$ ./weather.py
```

#２．ショートカットを作成する。
テキストエディタでweather.desktopを作成します。

```python:weather.desktop
[Desktop Entry]
Name=天気予報
Comment=This is my comment
Exec=python3 "/home/・・・/weather.py"
Icon=/home/・・・/application.png
Terminal=false
Type=Application
```

weather.desktopに実行権限を与えます。

```python:
$ chmod +x weather.desktop
```

weather.desktopがダブルクリックで起動するか確認する。

#３．ログインした時に自動起動するように設定する。
#####Ubuntu Stdio 17.10の場合
設定マネージャー　ー＞　セッションと起動　ー＞　自動開始アプリケーション　ー＞　「＋追加(A)」ボタン　ー＞　名前を入力し、コマンド欄の右側のファイルアイコンをクリックし、weather.desktop（表示は上記の場合「天気予報」）を選択する。　ー＞　OK
#####Linux Mint 18.2の場合
Menu　ー＞　アプリケーション　ー＞　設定　ー＞　自動起動するアプリ　ー＞　自動起動するアプリの設定　ダイアログ　ー＞　自動起動するプログラム　タブ　ー＞　追加ボタン　ー＞　名前を入力する「天気予報」　ー＞　コマンド(M):　参照... ボタン　ー＞　weather.desktopを選択　ー＞　追加(A)　ボタン


これで、次のログインから下記のようなウインドウに天気予報が表示されます。
weather.desktopファイルを「Exec=/home/・・・/weather.py」のように記載すると、実行されませんので注意。

![fuyou.png](https://qiita-image-store.s3.amazonaws.com/0/238800/088d2570-13d3-2eae-2029-0d5ec18da5c4.png)

#YAHOO雨雲レーダーを開く　ボタンを追加する
天気予報を見て天気が悪そうな場合、YAHOO雨雲レーダーを見て雨が降るかどうか確認したいので、YAHOO雨雲レーダーを開く　ボタンを追加しました。

上記のコードにボタンだけを追加する予定だったのですが、技術的に未熟なためエラーが解決出来ず、ボタンの追加の参考にしたHPのやり方に変更しました。

```python:weather1.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import requests
import json
import time

import webbrowser
import tkinter

#YAHOO雨雲レーダーを開く
def on_clicked():
    url1 = "https://weather.yahoo.co.jp/weather/zoomradar/"
    webbrowser.open(url1) 

url = 'http://weather.livedoor.com/forecast/webservice/json/v1'
payload = {'city': '270000'} # 大阪
data = requests.get(url, params = payload).json()

printdata = data['title']

printdata = printdata + "\n"

printdata = printdata + "\n" + data['description']['text']

for forecast in data['forecasts']:
    printdata = printdata + "\n"
    printdata = printdata + "\n" + forecast['dateLabel']+'('+forecast['date']+')　：' + forecast['telop']

printdata = printdata + "\n"

window = tkinter.Tk()
window.title('天気予報')

label = tkinter.Label(window, text = printdata, justify='left', font=('', 20, "bold")) 
label.pack()  

button = tkinter.Button(window, text = "YAHOO雨雲レーダーを開く", command = on_clicked, font=('', 20, "bold") ) 
button.pack() 

window.mainloop()
```

![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/238800/f109485e-f769-2120-4be3-e3ba4589effb.png)

端末からHPを開くとワーニングがどうしても出てしまうのですが、検索しても解決策がなかなか見つかりません。
ログインした時に、自動で起動した場合は端末が起動していないのでワーニングは表示されません。
![warning.png](https://qiita-image-store.s3.amazonaws.com/0/238800/5c3338e4-f3a2-52ba-d66d-9744fdaf1b43.png)

参考
python お天気apiから近日の天気を取得する
https://qiita.com/shizuma/items/ad04e08ab31ba436d34e

Pythonで天気情報を取得する
http://rongonxp.hatenablog.jp/entry/2017/10/05/230320

livedoor Weather Hacks APIで、お天気データのJSONを取得するための1次細分区（cityタグ）の地域id一覧まとめ
https://www.kaden1000.com/2013/04/livedoor-weather-hacks1%E6%AC%A1%E7%B4%B0%E5%88%86%E5%8C%BA%EF%BC%88city%E3%82%BF%E3%82%B0%EF%BC%89%E3%81%AE%E5%9C%B0%E5%9F%9Fid%E4%B8%80%E8%A6%A7%E3%81%BE%E3%81%A8%E3%82%81/

ボタンを追加する参考にしたHP
http://www.nslabs.jp/monkey-python-02b.rhtml