0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

飛行機情報をノートするBOT

Last updated at Posted at 2023-04-29

目的

tweeterで使っていたBotが最近の改正で継続が難しくなってしまい代替となるものが欲しかった

必要構成

  • Linux Mint 22
  • python 3.10.6
    • Misskey.py(pip install Misskey.py)
  • Misskeyアカウトとアクセストークン

内容

flightrader24のAPIによるJson情報を使ってMisskey上でノートするというものである。
監視する空域は経緯緯度で指定しないと全情報を取得してしまうので注意が必要である。今回は羽田新ルートを対象にした。

Misskeyのアカウトとアクセストークンは公式にしたがって取得しておく。
Misskeyのモジュールをインストールしておく。

無限ループのためC-cでキャンセルしないと抜けることができない。

main.py

#
#羽田新ルートの侵入を検知
#緯度(北35.71878,南35.61535)経度(西139.64919,東139.74154)
#
#

import urllib.request,requests
import json,time
from misskey import Misskey

url = 'http://data.flightradar24.com/zones/fcgi/feed.js?bounds=35.71878,35.61535,139.64919,139.74154&adsb=1&mlat=1&faa=1&flarm=1&estimated=1&air=1&gnd=1&vehicles=1&gliders=1&array=1'
api = Misskey('misskey.io')
api.token = 'Misskeyアクセストークン'

headers = {"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0",}
request = urllib.request.Request(url=url, headers=headers)


check_airplanename_before = ""  #前回の機体名
while True:
    try:
        time.sleep(5)
        with urllib.request.urlopen(request) as response:
            body = json.loads(response.read())
            headers = response.getheaders()
            status = response.getcode()
            
            check_airplanename = ""
            for info in body['aircraft']:
               check_airplanename = info[-2]  #機体名取得
               approach_airport = info[-6]  #着陸空港
               #depart_airport = info[-7]  #出発空港
               print(approach_airport)
            if (check_airplanename != ""
                 and check_airplanename_before != check_airplanename 
                 and approach_airport == "HND" ):
               api.notes_create(text="羽田新ルート情報実験中:"+ (','.join(map(str,body['aircraft'][0]))))
               check_airplanename_before = check_airplanename

    except urllib.error.URLError as e:
     print(e.reason)

まとめ

空域に対してノートをしてくれることを確認できた。自作関数を使うこともなく割と単純に作成することができた。

問題点

  • 空域に複数機体が侵入した場合jsonに依存する
  • 更新頻度の問題

課題

  • コンテナ化
  • 情報精度の向上

感想

Misskeyを利用してbotを作りたいと思っていた。Misskeyのモジュールで簡単にノートできて楽であった。
flightraderの情報は自身で確認しながら試行錯誤した。
コンテナ化してサーバー運用できれば有用そうである。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?