kiwo's blog

PythonのPythonista3で遊んでます。パソコン系の話題が好き!

Pythonistaでお天気アプリの作り方!

どうもこんにちは!
ツイッターのアカウントのリンクの貼り方が分からないkiwoです!



はじめに


今回はPythonでもよく使われているrequestsで遊びます!

正確にはPythonistaを使ってライブドアの天気APIのWeather Hacksを使用します。


では始めにAPIjsonデータのオブジェクトを貰います。
コードは実用的ではないのですがこのようになります。

import requests

url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=250020'

date = requests.get(url).json()
print(date)
url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=250020'

この部分がAPIのURLとなっています。
後ろの方のcity=250020は地名の番号で今回は滋賀県の天気を取得します!



これを実行すると…



よく分からない文字列が並んでいますね。

この情報は辞書型で収納されたデータがあり、この中からキーを取得しておよそのデータの内容を把握します。

キーの取得方法はこちらを実行します。

import requests

url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=250020'

date = requests.get(url).json()
print(date.keys())
	 

これが結果です。

この中にforecastsというのがありますね。
これは日本語にすると予測や予想という意味です。
恐らくこの中に天気の情報があるのでforecastの情報を抜き取ります。

コードはこちら。

import requests

url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=250020'

date = requests.get(url).json()
print(date['forecasts'])
	 

結果です。



これを見てみると天気のデータを発見!
'telop'というキーの中に天気の情報がありました!

というわけでtelopキーのデータを取得します。

コード

import requests

url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=250020'

date = requests.get(url).json()
print(date['forecasts'][0]['telop'])
print(date['forecasts'][1]['telop'])
	 

結果

これでお天気情報の取得任務完了です。



pyuiの設定

ここからはPythonista特有の遊びをしていきます。

それは何かというとuiモジュールを使ったアプリです!
すごく簡単なのでおススメかと。
あとuiモジュールの理解も進むかと。

ではやっていきます!

まずはPythonistaでタイトルは適当につけてファイル作成のところでScript with UIを選択します。

次にpyuiファイルのボタン等を設置します。
今回使うのは2種類だけ!

ここをタップで使用できます。


Labelというのが文字を表示する為の物
Buttonというのがタップすると動作してくれる物という雰囲気で覚えてください笑


これらを使ってこういう風に配置します。

上2つのラベルにはただ文字を打っているだけです。
その下2つは空白で!
ここにAPIさんから送られてきた情報を入れますので。

そして下の太陽のマークがbuttonとなります!



pyuiファイルの設定


ここからpyuiファイルの簡単な設定をしていきます。

まずラベルの設定ですが

ここのNameをlabel1とします。
恐らくデフォでなっているかと。
ここで注意してもらいたいのがtitleの方と間違えないように!


なぜこれが重要かと言うとここのNameを対象にコードで識別するからです。
また下のページでも出てくるのでそちらを見た方が分かりやすいと思います。

次にボタンの設定ですがここ!

今回はNameは関係ありませんがactionというのが重要になってきます。
コード側で定義された関数とここのactionでリンクさせる為です。

そしていよいよpyファイルのコードです。


pyファイルの設定

こちらがコードです!

import ui
import requests


url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=250020'

def tenki_button(sender):
    date = requests.get(url).json()
    tenki = date['forecasts'][0]['telop']
    tenki1 = date['forecasts'][1]['telop']
    # 上記で取得した天気の情報を変数に代入
    hyoji = sender.superview['label1']
    hyoji.text = tenki
    hyoji1 = sender.superview['label2']
    hyoji1.text = tenki1
    # 上記が取得した変数をlabalに送っています。['label1']の所が先ほどのNameとリンクしています!
v = ui.load_view()
v.present('sheet')
	 

def tenki_button(sender):
というところがさっきのボタンのactionという所とリンクしてます。

さっきのボタンをタップするとこの関数が実行されるようになっています。


これを実行すると

こうなってるので天気マークのボタンをタップしてtenki_buttonを実行させます。

すると


こうなります。
今日の滋賀の天気は微妙です。

これでお天気風アプリの出来上がりです。


さいごに


今日はとてもシンプルなアプリ作りをしました。
Python難しいけどとりあえず何か作って達成感味わいてえ!っていう方は今回のお天気風アプリがおススメです。




取り敢えずパソコンが欲しい…笑