Python Google検索からタイトルとURLをスプレッドシートに書き出すMac用アプリ

Python学習【365日チャレンジ!】363日目のマスターU(@Udemy11)です。

数日前に鬼滅の刃を徹夜で読んでしまったのですが、あらためて再読していると、なんとなく東京食種(グール)と同じような感じだな〜と思えてきました。

東京喰種と違うところは、人からグールに変わるのは主人公のカネキだけだけど、鬼滅の刃は鬼舞辻無惨から血を与えられると鬼になるというところでしょうか。

人が人を食べる生物に変わるという意味では、彼岸島に近いものがありますが、彼岸島の場合は、雅(吸血鬼の王)だけでなく、雑魚キャラの吸血鬼の血でも体内に入ると吸血鬼になってしまいます。

それぞれおもしろい漫画ですが、鬼滅の刃は、ワンピースのように主要キャラが死にかけたときに回想シーンが入り、悪役側の十二鬼月ですら、倒されて死ぬ間際にやむなく鬼になった悲しい理由が描かれて死んでいきます。

すべて悪いのは、鬼舞辻無惨という設定で、人それぞれ様々な人生があり、生き方があるということをうまく描いているのが、これだけの人気漫画になった秘訣ではないかと思います。

それに、ストーリーをダラダラと伸ばすことなく、悪の権化である鬼舞辻無惨を倒した時点で完結するところも、もうちょっと話の先が見てみたいという人の心をくすぐる作品なんですよね。

鬼滅の刃のシーズン2が準備中だそうなので、ストーリーが分かっているにも関わらず、放映が始まったら、全話見てしまいそうな気がします。

まだ、鬼滅の刃シーズン1を見ていない人は、ぜひAmazonプライムでご覧になってみてください。

鬼滅の刃

それでは、今日もPython学習をはじめましょう。

昨日の復習

昨日は、Tkinterを使って、入力フォームから【スプレッドシートキー】と【秘密鍵ファイル名】、【検索キーワード】を取得して、検索結果をGoogleスプレッドシートに書き出すプログラムを作成しました。

これまでに作成してきたコードを再利用しているので、少しだけコードをカスタマイズすることでプログラム自体は完成しました。

スプレッドシートキーと秘密鍵ファイル名のテキストフィールドを逆に入力していたため、エラーが起こってしまい、そのことがわかるまで少し時間がかかりましたが、そのおかげでコードを見直して、無駄なコードを省くことができました。

詳細については、こちらの記事をごらんください。

今日は、作成したプログラムからMac用アプリを作成したいと思います。

control.pyの変更

今回作業する内容は、以前実践した上記の入力フォームから取得した値を元にスプレッドシートにデータを書き込むMac用アプリの内容と同じです。

まずは、Mac用アプリと同じ階層に秘密鍵を置いて、その秘密鍵を読み込めるようにするコードの変更です。

昨日作ったcontrol.pyの11行目を次のコードに変更します。

	credentials = ServiceAccountCredentials.from_json_keyfile_name(
		'../../../' + file_name, scopes)

作成するアプリの本体(Contents)の3階層下に実行ファイルがあるので、3階層上のフォルダにあるfilenameに変更していますが、変更するのはこの一部分だけです。

virtualenvとライブラリのインストール

次は不必要なライブラリなどを含まないようにsetup.pyを実行して、作ったアプリのパッケージに入れるPython環境をvirtualenvで作成し、必要なライブラリをインストールします。

まず、ターミナルから次のコマンドを実行し、websc(任意の名前)というvirturalenv環境を作成してから、その環境からコマンドを実行できるようにアクティベートします。

virtualenv websc
source websc/bin/activate

次に、必要なライブラリをインストールします。

pip install py2app
pip install gspread
pip install oauth2client
pip install bs4
pip install requests

これらのコマンドで、5つのライブラリをpipインストールします。

pipインストールには、-rオプションを使って、テキストファイルに書き出した必要なライブラリ一覧を読み込んで一括インストールする方法がありますが、テキストファイルを用意する前にインストールしちゃったので、次回チャンスがあればやってみようと思います。

setup.pyの作成

setup.pyの作成はpy2applet --make-setup interface.pyでできますが、アイコンや名前の設定を追記しないといけないので、以前作ったものを再利用しています。

from setuptools import setup

APP = ['interface.py']
APP_NAME = 'ScrapeG'
DATA_FILES = []
OPTIONS = {
    'iconfile':'clipboard.icns',
	'plist': {
		'CFBundleName': APP_NAME,
		'CFBundleDisplayName': APP_NAME,
		'CFBundleGetInfoString': "ScrapeG",
		'CFBundleIdentifier': "com.udemyfun.ScrapeG",
		'CFBundleVersion': "1.0",
		'CFBundleShortVersionString': "1.0",
		'NSHumanReadableCopyright': "Copyright (C) 2021, MasterU, All Rights Reserved"
	}
}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)

行数の関係上、HELPコードの記述を省いています。

今回指定しているアイコンも前回と同じ【IconArchive】から使わせていただきました。

アイコンのファイル名も以前作成したものと同じ名前に変更しているので、変更する部分は、ハイライトしている4行だけです。

忘れてはいけないのは、ダウンロードしたアイコンファイル(clipboard.icns)を、Pycharmプロジェクトの中のinterface.pyと同じ階層に保存しておくことです。

setup.pyの実行

すべての準備がととのったら、次のコードを実行して、py2appsetup.pyを実行します。

python setup.py py2app

少し時間がかかりますが、Done!と表示されたら、作成したプログラムのMac用アプリが、新しく追加されたdistフォルダの中に保存されています。

このフォルダの中に、秘密鍵ファイルを移動させるか、複製しておきます。

Python Google検索からタイトルとURLをスプレッドシートに書き出すMac用アプリ

アプリの実行

ScrapeG.appを実行すれば、入力フォームが起動します。

【スプレッドシートキー】、【秘密鍵ファイル名】、【検索ワード】を入力して、【抽出】をクリックすれば、スプレッドシートにデータが抽出されます。

Python Google検索からタイトルとURLをスプレッドシートに書き出すMac用アプリ

まとめ

いまさらながらですが、シングルリソース・マルチユースが非常に重要で効果抜群だということがよくわかってきました。

今回のMac用アプリは、入力フォームやGoogle検索の結果を抽出するプログラムはほぼ前回作成したものを活用することができました。

setup.pyにしても、まるごと再利用しています。

それだけ、一つのファイルを作り上げることができたら、そこから少しずつコードを加えたり、変更したりして、少しずつ違うアプリを作成することができるということです。

これからも

シングルリソース・マルチユース

を実践していきたいと思います。

それでは、明日もGood Python!