昨日Start-upという2019年の韓国映画をみたのですが、記録のために自作の映画ツイートツールを使ったところ違う公開年のタイトルが出てきてしまいました。
まあありがちなタイトルだし仕方ないよね。
昨日はコード内に公開年のリクエストを追加して投稿したのですが、どうせなら公開年の指定も出来るようにしようということで久しぶりにコードを修正しました。
リメイク版のタイトルでも同じように投稿できるようにしたいです。
公開年を引数で指定してAPIのパラメータに一緒に渡すようにします。
自作ツール:
OMDB APIを取得するツールをpythonで自作する - paloma blog
引数処理の練習
pythonにはargparseというモジュールがあるのでこれを使って簡単に作ります。
まずは練習。
--yearで引数名を指定。
渡された引数はargs.yearでアクセスできます。
引数ありなしで出力を分岐させます。
masashi@PC-ubuntu:~$ cat argtest.py import argparse parser = argparse.ArgumentParser() parser.add_argument('--year', type=int) args = parser.parse_args() if args.year: print('{}年宇宙の旅'.format(args.year)) else: print('2001年宇宙の旅')
実行。
masashi@PC-ubuntu:~$ python3 argtest.py 2001年宇宙の旅 masashi@PC-ubuntu:~$ python3 argtest.py --year 2022 2022年宇宙の旅
出力変わってますね。OK。
修正点
diffだけ見せられてもナンノコッチャですが、自分のおさらいのため載せておきます。
大まかに
- 公開年を指定するargparseの処理を追加
- 映画のタイトル入力をsysの引数処理からargparseで拾うように変更
- タイトルにハイフンが入っていると引数扱いで処理してしまうのでタイトル用の引数を作成
- 「-」のみの引数も扱えるのでこれが干渉していると思われる
- year引数の有無でAPIに渡すパラメータを分岐
を変更しました。
(movies) masashi@PC-ubuntu:~/movietweet$ git diff b84ea1 getinfo.py diff --git a/getinfo.py b/getinfo.py index a22db63..045d32f 100644 --- a/getinfo.py +++ b/getinfo.py @@ -3,15 +3,22 @@ import sys import json import configure import re +import argparse KEY = configure.APIKEY url = 'http://www.omdbapi.com/' -gettitle = '+'.join(sys.argv[1:]) + +parser = argparse.ArgumentParser() +parser.add_argument('--title', nargs='+', help='Input movie title', required=True) +parser.add_argument('--year',type=int, help='Specify released year') +args = parser.parse_args() + +gettitle = '+'.join(args.title) getinfo = ''.join([url, '?apikey=', KEY, '&t=', gettitle]) -def main(): +def getmovieinfo(infos=getinfo): - movieinfo = requests.get(getinfo) + movieinfo = requests.get(infos) dataload = json.loads(movieinfo.text) datadump = json.dumps(dataload, indent=0) @@ -21,5 +28,13 @@ def main(): print(shapedata) +def main(): + + if args.year: + getinfo_y = ''.join([url, '?apikey=', KEY, '&t=', gettitle, '&y={}'.format(args.year)]) + getmovieinfo(getinfo_y) + else: + getmovieinfo() + if __name__ == '__main__': main()
動かしてみる
修正した情報取得スクリプトを動かしてみます。
引数なし
(movies) masashi@PC-ubuntu:~/movietweet$ python getinfo.py --title start-up | grep -E '(Year|Title|Actor)' Title: Start-Up Year: 2020\u2013 Actors: Bae Suzy, Nam Joo-hyuk, Kim Seon-Ho
引数あり
(movies) masashi@PC-ubuntu:~/movietweet$ python getinfo.py --title start-up --year 2019 | grep -E '(Year|Title|Actor)' Title: Start-Up Year: 2019 Actors: Ma Dong-seok, Jeong Min Park, Jung Hae-In
OKですね。
同じタイトルですが公開年と役者が違うものが出力されました。
本処理
理由は忘れてしまいましたがメインの処理は成形含めシェルスクリプトで呼び出すようにしているので実行します。
引数なし
(movies) masashi@PC-ubuntu:~/movietweet$ bash twmovieinfo.sh start-up 2022-05-05に「Start-Up」を視聴しました。 Infomation --- Year: 2020\u2013 Genre: Comedy, Drama, Romance Director: N/A Actors: Bae Suzy, Nam Joo-hyuk, Kim Seon-Ho --- 投稿しますか?: [y/n]n スクリプトを終了します。
引数あり
(movies) masashi@PC-ubuntu:~/movietweet$ bash twmovieinfo.sh start-up --year 2019 2022-05-05に「Start-Up」を視聴しました。 Infomation --- Year: 2019 Genre: Action, Comedy, Drama Director: Jeong-Yeol Choi Actors: Ma Dong-seok, Jeong Min Park, Jung Hae-In Production: N/A --- 投稿しますか?: [y/n]n スクリプトを終了します。
OK!
引数ありの内容は昨日の投稿と同じです。
2022-05-04に「Start-Up」を視聴しました。
— masashi (@palomax69) 2022年5月4日
Infomation
---
Year: 2019
Genre: Action, Comedy, Drama
Director: Jeong-Yeol Choi
Actors: Ma Dong-seok, Jeong Min Park, Jung Hae-In
Production: N/A
---
まとめ
pythonの引数処理の追加を行いました。
引数処理は自分で作ると大変ですが、便利なモジュールがあり助かります。
本ツールはbash-snipetsのmoviesコマンドを参考に作成しましたが、公開年指定はオリジナルにも無いのでいい感じに機能追加できたと思います。
(オリジナル版を修正、プルリクしても良かったのですが)
いろいろ動かなくて四苦八苦でしたがうまいこと収まってよかったです。
最近積んであったモンハンワールドばかり遊んでいて、久しぶりにpython書きました。
簡単な修正に見えるかもしれませんが、こんなんでも自作のものが動くと楽しいです。