Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

python

websocketで来た内容をIFTTTに投稿してみる

Python製軽量WEB鯖Bottleを使い、websocketで来た内容をIFTTTに投稿してみます。 ……jQueryクソ雑魚勢なので、やたら苦労しました……。 実際のところ 構成 ファイル構成は以下の記事と同様 shuzo-kino.hateblo.jp $ tree . ├── app.py ├── static │ └── js │ └…

BottleでjQueryのPOSTアクションをうけとる

クソ雑魚なのでjQueryは避けていたのですが…… 色々作るときに不便なのでやってみることにしました。 重いものを作る気はないので、Bottleと連携させます。 実際のところ 構成 $ tree . ├── app.py ├── static │ └── js │ └── client.js └── templates └── ba…

BottleでWebsocketする

なんどか紹介しているPython製軽量WEB鯖Bottleで、Websocketを扱う方法です。 実際のところ 環境導入 $ pip install bottle-websocket サンプル実行 公式提供のサンプルはgithubにあります。 実行には別途、geventという並行処理系ライブラリが必要です。 $ …

さくらVPS上にPython製Wiki "moinmoin"をつくる その1:導入編

MoinMoin*1はのPython製Wikiアプリです。 実際のところ 最新版は2016年10月リリースの"moin-1.9.9"です。 日本語版Wikipediaの記述は古いので注意! 以下、今書いてます( 参考もと tenkoma.hatenablog.com MoinMoinWiki - MoinMoin cu39.hateblo.jp MoinMoi…

easyrsa + uwsgi + nginx + bottleで簡易認証キー付きAPI鯖をつくる その1:設定

前回の続きっぽい話です。 easyrsaと前回の構成をつかてで簡易認証キー付きAPI鯖をつくります 実際のところ $ cd /etc/openvpn/easy-rsa/ $ sudo su# mkdir /etc/nginx/easyrsa/keys # cat keys/myservername.crt keys/ca.crt > keys/server_and_ca.crt # cp…

bottleで外部サービスにPOSTする

情けないミスを繰り返してしまったせいで長くなっちゃいましたが。 実際のところ requestsライブラリをつかいます。 この例では、"/api/func"にアクセスするとIFTTTに投稿するようになっています。 一通りのプロセスが終わると、返ってきたステータスコード*…

pythonの環境変数をみる

import sys sys.path #>>> ['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/ubuntu/.local/lib/python2.7/site-packages',…

Pipで入れてる筈のパッケージで"ImportError: No module named …"とか言われたら

Pipで入れてる筈のパッケージで"ImportError: No module named …"とか言われたら、 内部的にパスが通ってない可能性があります。 実際のところ 場当たり的対処 or 何らかの事情で環境変数を参照出来ない場合 当該パッケージのinstallコマンド。 当然先に入っ…

PythonスクリプトからIFTTTのWebhookに投稿する

今回はPythonをつかって、IFTTTのWebhook*1にしくみを知りたい方はこちら shuzo-kino.hateblo.jp ブラウザからポチポチやりたい方はこちら shuzo-kino.hateblo.jp 実際のところ 貴方のキーはYOURKEY、アプリ名はYOURAPPという想定でいきます。 requestsライ…

BottleでCookieを使う

何かと便利なCookieもBottleで活用可能です。 実際のところ response.set_cookie()で、request.get_cookieで拾います。 @route('/hello') def hello_again(): if request.get_cookie("visited"): return "Welcome back! Nice to see you again" else: respon…

BottleでWSGI経由のパラメータを読み込む

BottleでWSGI経由のパラメータを読み込む事ができます。 また、使っているならCGIやSSLのパラメータも取得可能です。 実際のところ お手軽に接続PCのIPアドレスを表示する奴を考えてみます。 #!/usr/bin/env python # -*- coding:utf-8 -*- from bottle impo…

【進行中】さくらVPS上にBottle鯖を立てる その5:外用に公開する

$ mkdir ZZZ $ cd $_$ ls index.py uwsgi.ini$ cat uwsgi.ini [uwsgi] socket = /var/run/uwsgi/ZZZ.vs.sakura.ne.jp.sock pidfile = /var/run/uwsgi/ZZZ.vs.sakura.ne.jp.pid daemonize = /var/log/uwsgi/ZZZ.vs.sakura.ne.jp.log chdir = /home/ubuntu/ZZZ…

さくらVPS上にBottle鯖を立てる その4:Python3環境にBottleを入れる

shuzo-kino.hateblo.jp の四回目。 今度はPython3環境を活かし、そこにBottleを入れるところまで。 実際のところ 今回の作業は全部リモート環境で。 まずは、諸々のアップデート。 remote:~$ sudo apt-get update remote:~$ sudo apt-get upgrade生のPython…

さくらVPS上にBottle鯖を立てる その2:Ubuntu LTSを入れる

shuzo-kino.hateblo.jp の続きです。 二回目の今回は、さくらVPSにUbuntu LTSを入れ、コンソールに入るところまで。 実際のところ VPSインスタンスの設定を行います。 「サーバ設定」のボタンをクリック。 しばらく読み込み画面が出た後、 インスタンスの管…

さくらVPS上にBottle鯖を立てる その1:さくらVPS契約

実験用にJSONを吐き出すBottle鯖が必要になったので、 さくらVPS上に構築してみようと思います。 全5回予定の初回である今回は、さくらVPSの契約まで。 実際のところ VPSとクラウドのちがい クソザコナメクジなので、ちゃんと説明できませんでした。 さくら…

pythonのglobal変数を関数内で利用するときはちゃんと宣言する

ちょっと横着して、グローバル変数を使おうとしたところ UnboundLocalError: local variable 'count' referenced before assignmentなるエラーが。調べてみると、Python公式に以下のような記述が Python では、関数内で参照されるだけの変数は暗黙的にグロー…

Pythonでも正オブジェクトの否定の否定はTrueだった

shuzo-kino.hateblo.jp 以前の記事で、RubyとJavascriptの正オブジェクトの否定の否定をやるとTrueが返ってくるという記事を書きました。 今回はその、Python版 実際のところ RubyやJavascriptと違い、"!"の構文がありません。 !a # 2> SyntaxError: invalid…

モジュールのインポート時にfromを使う理由

特に意味も理解せずサンプルコードに従っていましたが…… fromを経由すると個別のメンバを読み出して短く書いたりできるのですね 実際のところ mathモジュールのsinを使う場合、importだけなら以下のようにします import math math.sin(1) # 0.84147098480789…

Pythonモジュールで定義されているモノを調べる

Pythonモジュールの中身を調べるには、 importした上で組込み関数dirかhelpを使います。 実際のところ では、実際にsqlalchemyの中身を見てみましょうメソッドや特殊変数を見たい場合はdir import sqlalchemy dir(sqlalchemy) #>> ['BIGINT', 'BINARY', 'BLA…

sqlalchemyでデータを順番に並べる

sqlalchemyでデータを順番に並べる方法です 実際のところ idが5未満のデータをid順でソートするには以下のようにします。 for row in session.query(User).\ filter(text("id<3")).\ order_by(text("id")).all(): print(row) 参考もと Object Relational Tut…

sqlalchemyのfilter関数でANDやORな条件を指定する

sqlalchemyにおける検索条件について 実際のところ for user in session.query(User).\ filter(User.name=='ed').\ filter(User.fullname=='Ed Jones'): print(user) 上の例は、以下のように書くこともできます。 session.filter(User.name == 'ed', User.fu…

PythonのORマッパーSQLAlchemyを使ってみる

実際のところ $ pip install sqlalchemyimport sqlalchemy sqlalchemy.__version__ #>> '1.0.15' SQLiteのオンメモリDBをつかって、簡単な読み書きをするには以下のようにします。 from sqlalchemy import create_engine, Table, Column, Integer, String, M…

Pythonで可変長の引数をとる

Pythonで可変長の引数をとる方法です。 ……考えてみれば、あたりまえなのですがリストのスライスを使ってあげればいいです 実際のところ 四個以上あるような引数で、1〜3番目までとそれ以降をそれぞれ別に表示したい場合以下のようにします import sys prin…

pythonのクラスはただのオブジェクト

Rubyだと、クラスはClass型として扱われますね。 class Hoge def fuga() print(21) end end Hoge.class #=> Class ところが……pythonだと素のclassはobjectと同じく'type'を返します class Sample: def func(str): print(str) Class = Sample instance = Clas…

標準ライブラリtimeitで動作時間のサンプルを取る

リファクタリングの結果を取る場合には標準ライブラリtimeitが有効です。 実際のところ $ python -m "timeit" -s "1 + 1" 10000000 loops, best of 3: 0.0202 usec per loopそんな回数は要らないよ、というときは-nオプションを噛ませます $ python -m timei…

"if __name__ == '__main__':"という構文

"if __name__ == '__main__':"という構文をよく見かけますね。 これは、公式だと以下のように説明されています。 A module’s __name__ is set equal to '__main__' when read from standard input, a script, or from an interactive prompt. まぁ、要するに…

psycopg2で画像データを読み書きする

psycopg2で画像データを読み書きする方法です。 実際のところ 画像データの格納にはbytea型を使います。 PostgreSQLのbytea型はmemorybuffer型を返すので、ちゃんとbytes関数なりで整形しないといけません。 import psycopg2 DSN = "dbname=postgres user=sh…

psycopg2でデータをINSERTする

前回に引き続き、psycopg2でデータをINSERTする方法です。 実際のところ imageというbytea型のbyte_dataカラムを持っているテーブルに対し、バイナリデータを叩き込む方法は以下の通り。 import psycopg2 DSN = "dbname=postgres user=shuzo_kino" SQL3 = "I…

psycopg2を使ってPostgreSQLにあるデータを読み出す

psycopg2を使ってPostgreSQLにあるデータを読み出す 実際のところ 以下のSQL文を叩くケースを考えます。 固定の時間値を返す。 imageテーブルからとりあえず一個引っ張り出す せっかくwith節を使う事ができるので使ってみます。 import psycopg2 DSN = "dbna…

Python系の導入時に"BUILD FAILED (OS X x.x.x using python-build y.y.y)"などと出る場合、xcode-selectがうまく導入できていないのかも

今回はmacOSのお話。 多分、他のOS Xでも同じです。Python系の導入時に"BUILD FAILED (OS X x.x.x using python-build y.y.y)"などと出る場合、xcode-selectがうまく導入できていないのかも知れません。 実際のところ 背景 postgresqlをpythonで使うpsycopg2…