Udemy講座の100 Days of codeを進めていきます。今回は21-30daysです。
- Day31 Flash Card App Capstone Project
- Day32 Send Email (smtplib) & Manage Dates(datetime)
- Day33 API Endpoints & API Parameters – ISS Overhead Notifier
- Day34 API Practice – Creating a GUI Quiz App
- Day35 Keys, Authentication & Environment Variables: Send SMS
- Day36 Stock Trading News Alert Project
- Day38 Workout Tracking
- Day39-40 Flight Deal Finder FlightClub
Day31 Flash Card App Capstone Project
引き続きtkinterを用いてフランス語、英語のFlash Card(暗記帳)を作成します。
UIの配置、ボタンの動作はだいぶ慣れてきたので特に問題なかったですが、一定時間後に要素を更新する作業が苦戦しました。
window.after
をプログラム実行時、及び✔ボタンを押したときに適用することでフランス語から英語へ遷移するタイムラグを実装します。また学習できた単語を取り除くことで覚えるべき単語のみが表示されるようにします。このため覚えるべき単語リストはオリジナルのデータとは別に用意し、オリジナルの単語リストデータは変更されないようにするべきです。
ちなみに講義の中でグーグルスプレッドシートには文字を訳する関数があることを知りました。GOOGLETRANSLATE
GOOGLETRANSLATE(入力文字, 変換前言語, 変換後言語)
で単語を変換してくれます。
Day32 Send Email (smtplib) & Manage Dates(datetime)
smtplibモジュールを使用し、自身のGmailからYahoo mailへメールを送信します。
このあたりの認証、セキュリティの操作は怖いので中々触れたくない分野ではありますが、プログラムから実際にメールを送信させることができるので中々面白いです。
課題ではbirthdays.csvの名前、email、誕生年、月、日が格納されたcsvファイルを読み取り、その中に今日の日付の人がいれば誕オメールを送るプログラムの作成です。
datetime.now()から今日の日付を取得、pandasを用いてbirthdays.csvの取得し、dict型へ格納、dictのkeyに日付をvalueに名前、メールを含んだデータを設定し、今日の日付と比較しながら存在すれば、そのデータから名前、メールアドレスを取得し送信します。
送信する部分のコードは
with smtplib.SMTP("smtp.gmail.com", port=587) as connection: # gmailの場合
connection.starttls()
connection.login(MY_EMAIL, MY_PASSWORD)
connection.sendmail(from_addr=MY_EMAIL, to_addrs=YOUR_EMAIL,
msg="Subject:Happy Birthday!\n\n{}".format(CONTENTS))
Day33 API Endpoints & API Parameters – ISS Overhead Notifier
APIを使用してwebサイトからデータを取ってきます。取得の際にはrequests使用します。
import requests
response = requests.get(url="https://api.kanye.rest/")
response.raise_for_status()
data = response.json()
quote = data["quote"]
canvas.itemconfig(quote_text, text=quote)
ちなみにこのAPIはkanye westの引用がランダムで取得できるものです。
raise_for_status()
で正しく取得できているかチェック(HTTPコードをチェックします)、response.json()
でデータを取得します。データを取得した際に、今回のようなデータであれば、コンソールに出力してkeyを指定すればいいのですが、データ量が多くなると、ほしいデータを取得するのにkeyがわからず苦労するかもしれません。
コンソールに出力したものをこちらのtextに張り付けると、viewerでフォーマットされたものが見ることができます。これでkeyを指定しやすくなるでしょう。
Day34 API Practice – Creating a GUI Quiz App
day17で作成したクイズプログラムを改良します。day17ではあらかじめファイルにクイズ情報を格納していましたが、今回はAPIを使用して、実行するたびにクイズの内容を取得、問題が変わるようにします。
取得先はOPEN TRIVIA DATABASEです。API HelperからAPI URLを取得することもできますが、APIドキュメントからパラメータを与えてほしい問題を取得することができます。
今回は問題数10、yes,noでこたえられる問題なのでamountに10、typeにbooleanのパラメータを与えます。
import requests
parameters = {
"amount": 10,
"type": "boolean"
}
response = requests.get(url="https://opentdb.com/api.php", params=parameters)
response.raise_for_status()
data = response.json()
question_data = data["results"]
これで問題を取得できます。あわせてTkinterを使用してGUIでクイズをすることができるようにします。
完成形はこのような感じです。
Day35 Keys, Authentication & Environment Variables: Send SMS
APIで取得した情報に加えて、day35ではその情報に応じてSMSを送信するプログラムを作成します。使用するのはTwilioです。無料コインがもらえるのでお試しで使用できます。
取得する情報はその日の天気で、もしその日に雨が降りそうであれば、”Bring an umbrella!”とメッセージを送信するようにします。
from twilio.rest import Client
client = Client(account_sid, auth_token) # use your sid and token
message = client.messages.create(
body="It's going to rain today. Remember to bring an umbrella☂",
from_="from_number",
to="to_number"
)
サンプルコードもTwilioのサイトにあるので参考にしつつコードを作成します。
そして、雨が降るかどうか、傘を持っていくかどうかはできれば毎日判断したいのでこれを毎日実行してくれるようにします。今回はpythonanywhereを使用します。
ある程度制約はあるものの、手軽にpythonを利用したWebアプリをデプロイすることができます。個人的に傘を持っていくかどうかジャッジしたいだけですので十分のはずです。
Day36 Stock Trading News Alert Project
これまでのまとめのような課題です。
前日、前々日の株価の終値をAPIにて取得(今回はTesla社の株価を取得します)。
取得した前日、前々日の株価の変化が5%以上あれば、Tesla社に対して何かしらあったと判断し(良いか悪いかは判別しない)、Tesla社に関するニュースをまたAPIで取得します。
株価の取得はStock Price API、ニュースの取得はNews APIから取得します。API中々便利ですね。API毎にparamが異なるためドキュメントからどの情報が欲しいのか、どのようなパラメータを与えてあげればいいのかを読む練習になります。
最終的に取得したニュースを自身のケータイにSMS送信するようTwilioを使用します。
さらっと書いてありますが、いざプログラムを作成!となると中々ハードワークです。
プログラムを分割させ、どれから作成していくか考える力も試されます。
Day38 Workout Tracking
その日に運動した内容を入力するとGoogle スプレッドシートに運動した種類、時間、消費カロリーを入力するプログラムの作成を行います。
運動した内容、時間を入力するとNutritionixのAPIを使用して消費カロリーを取得することができます。取得した内容をSheetyを使用してGoogle スプレッドシートに入力していきます。
Sheetyを用いたコードは
sheet_headers = (os.environ["NAME"], os.environ["PASSWORD"])
sheet_endpoint = os.environ["SHEET_ENDPOINT"]
sheet_input = {
"workout": {
"date": today_date,
"time": now_time,
"exercise": exercise["name"].title(),
"duration": exercise["duration_min"],
"calories": exercise["nf_calories"]
}
}
sheet_response = requests.post(sheet_endpoint, json=sheet_input, auth=sheet_headers)
requestsを用いてデータを送信することができます。
Day39-40 Flight Deal Finder FlightClub
Tequilaを用いて自分が旅行へ行きたい場所へのフライト料金が向こう6ヵ月今の値段よりも安いプランが出た際に、TwilioからSMS送信するプログラムを作成します。
行きたい場所のリスト、値段はあらかじめGoogle スプレッドシートに記載して置き、その場所への直行便をTequila APIから調べます。
正直day39-40は個人的に難しい課題だったため、軽く飛ばしてしまいました。
のちにもう一度取り組みたいと思っています。
コメント