どうも、Champignon(きのこ)です。
今回は、プログラミングのお話です。
この記事を読んでいただきたい方
●Pythonを英語(TOEIC)やフランス語など語学に活かしたい方。
●Pythonでレンタルサーバーを活用したい方。
英語やフランス語などの語学、
特に単語暗記が習慣付かない私のような人にお勧めの内容になっています!!
この記事を読むと
どんなことができる?
自動で、暗記したい単語がLINEに届くようになります!
このように、
苦手な単語・熟語を、定期的にLINEに通知させることができます!
(私の場合、2時間ごとに通知させるようにしています!)
スマートウォッチを使うとより効果的!
時計にLINEの通知がくるので、半強制的に勉強できますw
これを実践する方法を、
次の章からステップバイステップで解説していきます!
必要な知識・もの
これを行うために必要な知識・ものは以下の通りです。
- Python(初級程度)
- レンタルサーバー(私が使っているのはConoHa WINGです。他のサーバーでもPythonが使えるのであればたぶん行けます。LINE Notifyを使う上では、herokuを使っている方が多いように見受けられます。)
- LINEアカウント
- ちょっとした根気
LINE Notifyを使おう
LINE Notifyとは
Webサービスからの通知をLINEで受信
できるサービスで、
GitHubその他のLINE Notifyと提携しているサービスの通知をLINEで受け取れるというものです。
提携しているサービスを使うだけでなく、
発行されるトークンを用いて、テキストをLINEに送信できたりします。
しかもそれが、
Pythonを用いてできるのです!!
送信する部分のPythonコードはこんなに簡単なものです。
(全ソースコードは後半にあります。)
payload = {"message" : message}
requests.post(url ,headers = headers ,data=payload)
LINE Notify活用のアイデア
そこで私は、
「Pythonで実行した結果をLINEに送れれば、
いろいろできそうじゃない!?」
「しかも、
WordPress用に”ConoHa Wing”のレンタルサーバー借りてるから、
サーバー上で定期的に実行させるとかもできるんじゃない!!??」
と、めっちゃテンションがあがりました。
そこで、手始めに、
英語やフランス語その他の言語の勉強に役立ちそうな
プログラムを作ってみることにしました。
英語やフランス語その他の言語習得において、毎日こつこつと継続することが大切と言われますが、なかなか難しいですよね。。。
その一因として、
勉強を開始するためには、能動的に動かないといけない
(自分で単語帳を開いたり、学習アプリを開いたりetc.)、
というのがあると思います。
しかし、それが例えば、
1時間に1回、覚えるべき英単語がLINEに届いたらどうでしょうか?
さすがにLINEで通知まできたら、その単語くらいは覚えよう!ってなりそう!!
単語を覚えた後、
そのまま英語の勉強を始めるきっかけにできそう!!
そう思いませんか???
しかし、いざ取り組んでみると、結構大変だったので、ステップバイステップでこの方法を共有したいと思います。
[Step 1]
LINE Notifyのセットアップ
アカウント作成と簡単なPythonのコード(コードは後述)を記述するだけです。
詳細の手順はこちらの記事を参考にさせていただきましたので、こちらをご参考いただき、アカウントを作成してください。
[Step 2]
レンタルサーバーのセットアップ
私がサーバーの知識がほとんどなかったからかもしれませんが、
ここが一番大変でした。。。
この中でもいくつか段階がありますので、1つ1つ見ていただければと思います。
SSHへアクセスする
サーバー上でPythonのコードを動かすために必要なライブラリをインストールするために、行うものです。
ConoHa Wingは標準でサーバー上でPythonを用いることができます。
しかし、Python標準のライブラリには搭載されていないライブラリ(今回であれば、”Requests”は別途主導でインストールする必要があります。
そのインストールを行うために、SSHへ接続します。
(”pip”を使わずにライブラリをインストールする方法があれば、もしかしたらこの工程はいらない。もしご存知であれば教えていただきたいです!)
SSHへの接続方法は、
公式サイトをご確認いただき、アカウントを作っていただいたうえで、
こちらのサイトをご参考に、コマンドプロンプトから入ってください。
SSHでやること
ここでやることは以下の2つです。
①ライブラリ置き場を作る
SSHに接続したとき、ディレクトリは、
/home/ユーザーごとに違いますので、確認してください!/
です。
ここで、
mkdir 任意の名前
で、インストールしたライブラリを格納するフォルダを作ってください。
(この後、Pythonコードでここにパスを通します。)
②ライブラリをインストールする
ライブラリ用のフォルダが作成できれば、
次はライブラリのインストールです。
pip install requests -t ~/ライブラリ用のフォルダ名
でOKです。
[Step 3]
単語帳を用意しよう。
このあとのPythonのコードをご説明するときにも言及しますが、
この記事のゴールは
サーバーからLINE Notifyで通知することではなく、
英語やフランス語学習を習慣化することです。
そのため、自分が苦手な英単語・フランス単語を準備する必要があります。
その方法は、
TOEIC800点!一瞬で単語を調べて覚える方法【リーディング対策】【自作単語帳】
や
最強のフランス語の読解・単語学習法(Comprendre Lire)!第二外国語の単語暗記に最適!!
などをご参照ください。
これらの方法を使えば、
リーディングの勉強しながら、自分が苦手な英単語・フランス単語を収集することができます。
ここで作った単語のCSVファイルをこの後使います。
[Step 4]
Pythonのコードを書く
まだまだ改良の余地はありますが、今回はとりあえず動かすことが目的だったので、参考程度にご覧ください。
#!/opt/alt/python36/bin/python3.6
# -*- Coding: utf-8 -*-
import sys
sys.path.append("PATH")
import random
import requests
url = "https://notify-api.line.me/api/notify"
access_token = 'トークン'
headers = {'Authorization': 'Bearer ' + access_token}
def go_line():
with open("PATH", encoding="utf-8") as f:
text = f.read()
text = text.split("\n")
message = ""
for _ in range(n):
message += "\r\n\n" + text[random.randint(0,n)]
payload = {"message" : message}
l = requests.post(url, headers = headers ,data=payload)
if __name__ == "__main__":
go_line()
これで、
単語が入っているCSVファイルを読み込む
→ランダムで選び出す
→LINEに通知する
ということができます!
(うまく動作するかローカルで試してみてもよいと思います。)
※1
このコードは、[Step 3]で紹介した方法を用いて、CSVファイルが、
「単語, その訳」(単語ごとは改行(“\n”)で区切られている)
という構成になっていることが前提です。
※2
上記ソースコードの補足をしておきます。
- 4行目:
“requests”をインストールしたフォルダのパスを入力してください。 - 9行目:
“トークン”はLINE Notifyで発行されたトークンを入力してください。 - 13行目:
“PATH”は、Step 3で作成したCSVファイルをFTPでサーバーに置いた後、置いたところのパスを入力してください。 - 17行目:
“n”は一度にLINE NotifyでLINEに送る単語数です。 - 18行目:
“n”はCSVファイルに存在する単語数です。単語をランダムでLINEに送信するために、ランダムで出力した数字の行数に存在する単語を送るためです。
[Step 5]
ジョブスケジューラを設定しよう
いよいよ最後です!
ご自身のConoha wingにアクセスして、
「サーバー管理」から「ジョブスケジューラー」へ進みましょう!
ここの設定はこちらの記事を参考にさせていただきました。
私は、「2時間に1度」LINEに通知したかったので、
“cron”を用いて、上記の写真のように設定しました。
“cron”を用いる場合、さきほどの記事にコマンドが説明されているので、ご参考ください。
後はコマンドに、
「Pythonパス」「半角スペース」「Pythonコードのパス」
を入力すれば完了です。
※
「Pythonパス」は公式サイトに掲載されています。
さいご
いかがだったでしょうか?
はじめて取り組むときは結構苦戦すると思いますが、
一度環境を作ってしまうと、他にもいろいろ応用する余地があると思います。
是非トライしてみてください。