概要
日本全国の空港はMETARというものを発出しています。
METARを知らない方はこちら!
まあ、これを読んでいる人はほとんどの方はMETARが何かを知っていると思います。
今回は、METARを自動取得し、Twitterに自動投稿する方法を解説したいと思います。
構成
プログラミング言語:python
サーバー:conoha wing
サーバーに関しては、30分に一回自動でTwitterに投稿するために私は使っています。
もともと、このサイトを運営するために用いているので、せっかくならという感じです。
実際のプログラム
ライブラリと変数
import urllib.request
airport = ["RJCC","RJAA","RJTT","RJGG","RJOO","RJBB","RJFF","ROAH"]
URL_start = "http://tgftp.nws.noaa.gov/data/observations/metar/stations/"
URL_end = ".TXT"
まず、一行目はURLの内容を取得するためのライブラリです。
二行目はMETARを取得したい空港一覧です。私の場合は、大きい空港だけが欲しかったので、このようになっています。他の空港が取得したい場合には "空港名" を追加してください。
URL_startのところでは、今回METARを取得するURLを指定しています。
URL:https://tgftp.nws.noaa.gov/data/observations/metar/stations/
このURLは更新速度は遅いですが世界各国のMETARを4レター順にまとめてくれています。
自分の好きな空港の4レターがわからない場合は、こちらで検索してみてください。
URLを見てみればわかりますが、RJTTのURLは
となっているので、空港コードを除いた前半をURL_start、後半をURL_endとしています。
残り
for i in airport:
content_start = i + "のMETARです\n"
URL = URL_start + i + URL_end
data = urllib.request.urlopen(URL)
html = str(data.read()).replace("'"," ").replace("b"," ").replace("\\n"," ")
data.close()
for文で一つ一つ指定した空港を取得しています。
URLの箇所で空港ごとのURLを生成しています。
それを、urllib.request
で中身を取得し、成形をしています。
実際に取得してみるとわかりますが、htmlの中身をそのままとってくるので、改行の\nなども取得されてしまいます。
それを消すために、replace関数で消しています。
METARをhtmlという変数内に保存されるので、Twitterに自動投稿するなり、データベースに入れるなりしてください。
おまけ
私はTwitterに自動投稿したかったのでそのスクリプトを記載しておきます。
import urllib.request
import tweepy
airport = ["RJCC","RJAA","RJTT","RJGG","RJOO","RJBB","RJFF","ROAH"]
CONSUMER_KEY = ''
CONSUMER_SECRET = ''
ACCESS_TOKEN_KEY = ''
ACCESS_TOKEN_SECRET = ''
update_url = "https://api.twitter.com/1.1/statuses/update.json"
URL_start = "http://tgftp.nws.noaa.gov/data/observations/metar/stations/"
URL_end = ".TXT"
auth = tweepy.OAuthHandler(CONSUMER_KEY,CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN_KEY,ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
for i in airport:
content_start = i + "のMETARです\n"
URL = URL_start + i + URL_end
data = urllib.request.urlopen(URL)
html = str(data.read()).replace("'"," ").replace("b"," ").replace("\\n"," ")
content_end = "\n#"+i+" #"+i+"_METAR"
data.close()
try:
api.update_status(content_start + html+ content_end)
except:
pass
Twitterに投稿するためのライブラリはTweepyを用いています。
これを使うのが一番簡単です。間違えても、ライブラリを使わずにやろうと思わないでください笑
時間の無駄です。
次に、Twitterで開発者の申請を行ってください。
この部分は他の人がたくさん解説しているので、そちらのサイトを参照してください。
開発者申請して自分の「Keys and tokens」欄に行って、以下の情報をメモっておきましょう。
API key、API secret key、Access token、Access token secret
これらを以下のものに入れてください。
CONSUMER_KEY =
CONSUMER_SECRET =
ACCESS_TOKEN_KEY =
ACCESS_TOKEN_SECRET =
あとは、スクリプトをコピペすれば完璧です。
自動で空港のハッシュタグも追加するようになっています。
いらない場合は、
content_end = "\n#"+i+" #"+i+"_METAR"
の箇所を消してください。
また、Tweepyでは同じものをTweetしようとするとErrorが出てしまうので
try: api.update_status(content_start + html+ content_end)
except: pass
の箇所で、エラーの場合はTweetしないようにしています。
###最後に
今回の内容は自分の備忘録的な感じです。
自分のサイトも運営しているので興味ある人はぜひ!
https://www.skytrophy.com/