今回はPythonのプログラムでIPアドレスを取得し、LINEに通知する方法について解説します。
Raspberry Pi起動時に、IPアドレスが変わってしまいSSHやリモートデスクトップが繋がらないといったことがよくあると思います。
今回、紹介するPythonのプログラムをサービスに登録しておくと、IPアドレスが変わった場合でもディスプレイを接続してIPアドレスを確認する必要がなくなりますので、ぜひ活用してみてください。
Raspberry Piでディスプレイを繋がずにIPアドレスを確認できる。
Raspberry Pi(ラズベリーパイ)とは
Raspberry Pi(ラズベリーパイ)はイギリスのラズベリーパイ財団が教育用に開発したボードコンピュータです。
最新のRaspberry Pi 4では、ARMアーキテクチャを採用したBroadcom製の高性能SoC BCM2711を搭載しており、1.5GHzで動作するARM Cortex-A72が4コアとマイコンボードの中では非常に高速な処理能力を持っています。また、ユーザーがアクセス可能な40ピンのGPIOも搭載しており、外部ハードウェアを制御することが可能です。
詳細なスペック等は以下の記事で解説していますので、あわせてご覧ください。
LINEへの通知方法:LINE Notify
LINE NotifyはGitHub,IFTTT,MackerelなどのWebサービスからの通知を、LINEで受信することが出来るサービスです。
今回はこのLINE Notifyを使ってIPアドレスをスマホのLINEに送信します。
LINE Notifyを使用するためには、アクセストークンを取得しておく必要があります。
手順は以下の記事で解説していますので、事前に済ませておいてください。
作成したPythonコード
ここからは実際にPythonコードの実装方法について解説していきます。
Pythonコード解説
LINE NotifyのAPIエンドポイントと、事前に取得したアクセストークンを定義しています。
# APIのURLとトークン
url = "https://notify-api.line.me/api/notify" # URL
access_token = "(LINE Notifyで取得したトークン)" # 取得したトークン
通知メッセージの初期値を設定しています。
# 送信するメッセージを設定
message = "Raspberry Piからの通知:\n"
get_ip_address()
という関数を定義しています。この関数は、Raspberry PiのIPアドレスを取得します。具体的には、まずホスト名(ここではRaspberry Piのホスト名)を取得し、そのホスト名からIPアドレスを得ます。IPアドレスの取得に問題がある場合は、エラーメッセージを返します。
def get_ip_address():
try:
hostname = socket.gethostname()
ip_address = socket.gethostbyname(hostname)
except socket.error:
ip_address = "Error: IPアドレスを取得できません。"
return ip_address
main()
関数では、まずget_ip_address()
関数を呼び出してIPアドレスを取得し、それをメッセージに追加します。
def main():
# IPアドレスの取得
ip_address = get_ip_address()
global message
message += "IPアドレス: " + ip_address
次に、headers
変数にはLINE NotifyのAPIが要求する形式の認証情報を含めます。そして、send_data
変数には送信するメッセージを含めます。その後、requests.post()
メソッドを使用して、LINE NotifyのAPIにHTTP POSTリクエストを送信します。
headers = {"Authorization": "Bearer " + access_token}
send_data = {"message": message}
# メッセージを送信
result = requests.post(url, headers=headers, data=send_data)
print("Send Massage")
print(result)
全体のソースコード
作成した全体のソースコードは以下の通りです。
import requests
import socket
# APIのURLとトークン
url = "https://notify-api.line.me/api/notify" # URL
access_token = "(LINE Notifyで取得したトークン)" # 取得したトークン
# 送信するメッセージを設定
message = "Raspberry Piからの通知:\n"
def get_ip_address():
try:
hostname = socket.gethostname()
ip_address = socket.gethostbyname(hostname)
except socket.error:
ip_address = "Error: IPアドレスを取得できません。"
return ip_address
def main():
# IPアドレスの取得
ip_address = get_ip_address()
global message
message += "IPアドレス: " + ip_address
headers = {"Authorization": "Bearer " + access_token}
send_data = {"message": message}
# メッセージを送信
result = requests.post(url, headers=headers, data=send_data)
print("Send Massage")
print(result)
if __name__ == "__main__":
main()
実行結果
先ほどのプログラムを実行した結果です。
以下のようにLINE NotifyのトークにIPアドレスが送られてきました。
\ Pythonを自宅で好きな時に学べる! /
まとめ
今回はPythonのプログラムでIPアドレスを取得し、LINEに通知する方法について解説しました。
Raspberry Pi以外でもLinuxを搭載したマシンであれば使用できますので、ぜひ活用してみてください。
また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。
スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
コメント