in my 雑記

プログラミング bump 日々のことなど

pythonで簡単にguiアプリが作れるeelを試してみた

eelはelectronのサーバサイドの処理をpythonで書けるようにしたものです。
前からpythonのguiアプリは何がいいかと思っていましたがこれはかなりいいです。

html + css + jsで書けるのでwebの人も簡単に使えるし、パッケージ化もすごく簡単でした。
ちょっとしたpythonの処理をgui化して人に配布したい場合はこれ一択な気がします。
とりあえず、以前気になっていた「画像をミニチュアっぽくする処理」をguiアプリ化したいと思います。

www.uosansatox.biz

やりたいこと

・eelみたいなものを待ち望んでいた。
・仮想DOM的なJSフレームワークを触ってみたい。(vueがgoogleトレンドで強かったのでこれにした)。
・bootstrap4リリースされたから触ってみる。
・配布できる形までもっていく。

eelの使い方(サンプル)

ファルダ構成は以下のように配置します。
以下のサンプルはjs-python間でデータの受け渡しの例です。

web-hello.html
hello.py

hello.py

# pip install ellでインストールしたellをインポート
import eel

# フォルダ構成で作ったwebファイルを読み込みます
eel.init('web')

# @eel.exposeを関数の前につけるとこの関数がjsでも呼べるようになります。
@eel.expose
def say_hello_py(x):
    print('Hello from %s' % x)

# 上で宣言した関数はpythonでも呼べます
say_hello_py('Python World!')

# eel.xxxでjsで宣言した関数も呼び出すことができます。
eel.say_hello_js('Python World!')

# hello.htmlを読み込んでellをスタートします
eel.start('hello.html', size=(300, 200))

hello.html

<!DOCTYPE html>
<html>
    <head>
        <title>Hello, World!</title>
        
        <!-- ell.jsインクルード -->
        <script type="text/javascript" src="/eel.js"></script>
        <script type="text/javascript">
        
        // eel.expose(XXX)でこの関数をpythonから呼べるようにします。
        eel.expose(say_hello_js);
        function say_hello_js(x) {
            console.log("Hello from " + x);
        }
        
        // pythonで宣言した関数をjsで呼びます。
        eel.say_hello_py("Javascript World!");
        
        </script>
    </head>
    
    <body>
        Hello, World!
    </body>
</html>

作ったもの

github.com

pythonがインストールされている環境なら

python run.py

で実行できます。
画像を選択して、convertで変換する簡単なアプリですがとても簡単にできました。
以下のコマンドでパッケージ化もできます。

python -m eel run.py web -noconsole

感想

web言語を使ってpythonでguiアプリを作れるのは素晴らしい。
以前はelectron&flask等でもできたけどこっちのほうが圧倒的に簡単。

pyhtonを入れたらとりあえず入れるライブラリ

PCをクリーンインストールしたので、よく使うライブラリをまとめた。
anacondaとかでまとめて入れてもいいけど、いちから入れたほうが最小限で済むので好き。
個人的なメモ。

sqlite3

slite(DB)に接続、操作する用のライブラリ。
ちょっとした、スタンドアロンのアプリとか、軽いスクレイピングデータ保存するときとかに使う。 sqliteは並列処理に弱いため、スクレイピング処理が遅くて並列処理にしようと思ってsqliteを使っていると、
DBごと変更せざるおえなくなる。
あくまで、ちょっとしたものを作るときに使う。
sqliteはデータを単一ファイルで持っているのでいろいろ手軽。

pip install sqlite3

psycopg2

postgresql(DB)に接続、操作するようのライブラリ。
sqliteで物足りないときに使う。
使い方はsqlite3とほぼ同じなので、移行しやすい。

pip install psycopg2

tqdm

プログラムの進捗をプログレスバーで表示してくれる。
超手軽にプログレスバーをつけてくれる、開発時にとりあえずfor文につけておくと便利。

pip install tqdm

line_profiler

プログラムの時間がかかる個所を分析するライブラリ。
関数にアノテーションをつけるだけで使える。

pip install line_profiler

joblib

並列化用ライブラリ。
高速化のために色々試みたけど、どうにもならんってときは並列化が手っ取り速い。
並列化ライブラリの中ではとても簡単にかける。

pip install joblib

requests

HTTPリクエストを返してくれるライブラリ。
スクレイピング、クローリングには必須。
デフォで入ってるurllibより簡単に短く書ける。
セッション管理もできるので、ログインするサイトとかにも使える超万能。

pip install requests

beautifulsoup4

HTTPリクエストからほしい要素だけを抜け出してくれる。
requestsとセットで使う。
スクレイピング、クローリングには必須。

pip install beautifulsoup4

selenium

requestsだとjavascriptのレンダリングまでしてくれないのでその時に使う。
後webブラウザの自動化をしたいときに使用。
自動化するブラウザはchroniumが良い。
ただし、javascriptのレンダリングだけならSplash使うとよさそうだと思う。

pip install selenium

tensorflow

機械学習用のライブラリ。 windowsだとpython3.5の64bitじゃないと動かないので注意。
googleが開発しているので今後も伸びていくだろう。

pip install tensorflow

keras

tensorflowを簡単に使えるラッパーライブラリ。
kerasはjavascriptやらjavaやらでも使える。
機械学習=pythonだと思っていたけど、今はどんな言語でも簡単にできるようになった。

pip install keras

pandas

データ構造という形式で配列の操作ができるライブラリ。
私はmatplotlibでデータを可視化するときぐらいしか使ってない。

pip install pandas

matplotlib

データをグラフ表示するライブラリ。
pandasと一緒に使う。

pip install matplotlib

codecs

txt、csvファイル操作用ライブラリ。
デフォでも入っているが、こっちのほうが文字コードに強い。
UnicodeErrorにあいたくないならこっちを使ったほうがいい。

pip install codecs

flask

ウェブアプリのフレームワークライブラリ。
1分でローカル環境でハローワールドできる手軽さが最高。
あとラインのapi使うときとかに重宝する。

pip install flask

line-bot-sdk

ラインのapiを使うためのライブラリ。
flaskと一緒に使うと手軽。
ラインボット作るときに使った。

pip install line-bot-sdk

twitter

作ったシステムのログをtwitterで吐くのに使ってる。

pip install twitter

google-api-python-client

googleapiは多岐にわたるgoogleの様々な機能をapiを介して使用できる。
ただ、googleapiはほとんどの機能が有料でしかも高い。
無料で使うなら機能は結構制限される。

pip install google-api-python-client

PyDrive

googleapiのgoogledriveを操作するラッパー。
サーバー間のデータのやり取りならftpを使うよりこっちのほうが手軽にできるし、
同時にバックアップも取れるし、一石二鳥。

pip install PyDrive

pythonでgoogle driveを操作する

pythonでクラウドストレージを色々いじってみたらgoogledriveが一番簡単に操作できたので、紹介します。

準備

・google apiに登録して「クライアントID」、「クライアントシークレット」を取得する。(以下参考) qiita.com ・google apiのライブラリ「google-api-python-client」とそれを使いやすくしてくれるラッパー「PyDrive」をインストール。

pip install google-api-python-client
pip install PyDrive

・google apiに認証する情報を記載した「settings.yaml」を作成。api登録時に取得した。「クライアントID」「クライアントシークレット」を記載。

client_config_backend: settings
client_config:
  client_id: <クライアントID>
  client_secret: <クライアントシークレット>

save_credentials: True
save_credentials_backend: file
save_credentials_file: credentials.json

get_refresh_token: True

oauth_scope:
  - https://www.googleapis.com/auth/drive.file
  - https://www.googleapis.com/auth/drive.install

プログラム

settings.yamlと同階層でイカプログを実行してください。

# -*- coding: utf-8 -*-
################################################################
# メインプログラム
################################################################
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

################################################################
# 承認
################################################################
gauth = GoogleAuth()
gauth.LocalWebserverAuth()
drive = GoogleDrive(gauth)


################################################################
# サンプル1
################################################################

# Hello.txtテキストを作成し中身に「Hello」と記載。
file1 = drive.CreateFile({'title': 'Hello.txt'})
file1.SetContentString('Hello')
# アップロード
file1.Upload()



################################################################
# サンプル2
################################################################

# 一覧を取得し表示
file_list = drive.ListFile({'q': "'root' in parents"}).GetList()
for file1 in file_list:
  print('title: %s, id: %s' % (file1['title'], file1['id']))



################################################################
# サンプル3
################################################################

# 指定したIDのデータを削除
file3 = drive.CreateFile({'id': "1WvL7H71lI-cdeAA0wYUtk7T_K-LytRWZ"})
file3.Delete()



################################################################
# サンプル4
################################################################

# 指定したIDのデータをダウンロード
file3 = drive.CreateFile({'id': "1WvL7H71lI-cdeAA0wYUtk7T_K-LytRWZ"})
file3.GetContentFile('hoge1.txt')


################################################################
# サンプル5
################################################################

# ローカルにあるdata.txtをアップロード
file2 = drive.CreateFile()
file2.SetContentFile('data.txt')
file2.Upload()

終わり

データのアップ、リスト取得、ダウンロード、デリートのやり方を紹介。
ひとまずこれだけできれば、ファイル操作はなんでもできそう。

はてなブログの新着記事を500件表示するサイトを作った

www.jeta.work

久々にはてなブログを更新して、
サイト巡りでもしようかなと思ったら、

新着記事を表示するページが消えていた、、、

調べてみると、こんな記事が、、、

staff.hatenablog.com

はてなブログは横のつながりが大きいことがメリットだったのに、新着サイトが消えてしまうのはとても残念。
あと、新着サイト眺めてると思いがけない情報を知ることができたりして、面白いんだけどなぁ。

と言うことで、
新着記事(新着エントリー)を500件表示してくれるサイトを作りました。

このサイト

すごくシンプル。
新着サイトを昇順で表示します。
以前よく見ていた、新着記事500件表示してくれるサイトが見れなくなっていたので、それに倣って作りました。

技術セットは
pyThon(flask) + postgresql + nginx + CentOS7
uiにgoogleさんの提供してる「Material Design Lite」を使ってみた。
デザインセンスがまるでないので、こう言うのは本当にありがたいですね。

ぜひ、ご活用ください。

python3 で 捨てアド の 作成 と 観覧 を行う

f:id:inmyzakki:20170902164248p:plain
pythonネタです。
pythonで捨てアドの作成&観覧がしたかったので、
モジュールとかapiがないか、探したけどなかったので作りました。

出来ること

・捨てアドの作成ができること
・作った捨てアドの観覧ができること

続きを読む

利用可能なproxyを探して匿名でスクレイピングする[python]

f:id:inmyzakki:20170902164248p:plain

はじめに

久々のpython記事です。
最近はNodeJsで遊んでいたんですけど、
やっぱりpythonは書きやすくていいですね。

出来ること

・無料で公開されているproxyをスクレイピングする。
・取得したproxyが使えるものかチェックする。
・使えなかったらほかのpeoxyを使う。
・取得したproxyを使ってrequestでスクレイピングができる。
・取得したproxyを使ってseleniumでwebブラウザの自動操作ができる。
・ループ処理でインターバル時間ごとにスクレイピングする。
・スクレイピングするごとにproxyを新しいものにする。

続きを読む

自動 はてなブックマーク bot を作った [python selenium ]

f:id:inmyzakki:20170624011458j:plain:w500

自動ではてなブックマークをしてくれるbotを作りました。
気になるワードを指定しておくと、はてなブログの新着で、指定した言葉を含む記事を 自動でブックマークしてくれます。
気になる言葉の情報収集や、
同じような趣味をしているブログを調べるのにご活用ください。
一応使い方も書いておきますが、自分が動けばいいや程度に作っています。
もし、環境を整えずに使いたい方がいたら、この記事をブックマークしてください。
ブックマークする方が多かったら、誰でも簡単に使えるように(exe化してスタンドアロンで動くようにしようかなぁ)して公開します。

機能

・指定したユーザーでログインできる。
・自動でブックマークできる。
・自動で無料スターをつけれられる。
・記事にブックマークボタン、スターボタンがない場合はできない。
はてなブログに投稿されている、すべての新着記事を対象とする。
・ブックマーク、スターの条件として本文に含むワードをand,orで複数指定できる。
・ブックマーク、スターの条件として、本文の文字数を指定できる。
はてなブックマークのタグを指定して登録できる。

続きを読む