Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

bottle の検索結果:

ngrokで自社ネット運用のRaspiを外に開放したりwebhookを受け取ったりする

…ython 3.7 bottle 概要 ざっくり書くと……こんな感じの動き ngrok公式に登録 発行されるyamlを適用 web鯖を立ち上げ ngrokコマンドを立ち上げ、後は認証やらをngrokの鯖が代行してくれる HTTP(s)だけじゃなく、TCPもいけるのでSSHの口を開けておく等の運用すら可能。アカウントも、一個使う分には無料!!! 有料アカウントは何種かあり、ドメイン指定とかのオプションが解禁されてきます。 上の方になるとIPアドレスのホワイトリスト運用なんて事ま…

LotY (Language of the Year) 2019 @shuzo_kino

…重宝していました。 bottleはとても活躍してくれましたね。 ……ただ、言語仕様の読み込みは甘いと言わざるを得ません。 完全に日々の仕事をこなす為の道具でしたね……。 Shell Script POSIX原理主義に憧れて、あれこれ修行をしていました。 調べれば調べるほど表現力豊かな言語なんだなぁと、日々関心している次第です。 学生時代にできなかったプロセス間通信が出来るようになったり、そこそこ成長があったように自負しています。 C言語 まさかの、低級言語の王様。 後半になっ…

入れ立てpip環境でCommand "python setup.py egg_info" failed with error code 1 in ……とか言われたらsetuptoolsがちゃんと入っていないかも

…ipの環境をつくり、bottleを導入しようとしたところ以下のエラーが。 $ pip3 install bottle Collecting bottle Downloading https://files.pythonhosted.org/packages/bd/99/04dc59ced52a8261ee0f965a8968717a255ea84a36013e527944dbf3468c/bottle-0.12.13.tar.gz (70kB) 100% |█████████…

Bottleでフォーム経由でファイルアップロード

…のところ from bottle import route, request @route('/upload', method='POST') def do_upload(): name = request.forms.name data = request.files.data if name and data and data.file: raw = data.file.read() # This is dangerous for big files filename =…

RequestsをつかってPythonで外部WEBに接続する その5:ファイルを送信

今回はBottleで立てた個人鯖に画像ファイルをおくるケースを考えてみます。 取りまとめ中…… 参考もと Requests: HTTP for Humans — Requests 2.18.4 documentation

RequestsをつかってPythonで外部WEBに接続する その3:jsonをpostする

…equests.post(url, data=json.dumps(payload)) Note, the json parameter is ignored if either data or files is passed. とあるので、ミスが起こらないようにdataやfileとは併用しないようにします。 参考もと Quickstart — Requests 2.18.4 documentation bottleで外部サービスにPOSTする - Bye Bye Moore

RequestsをつかってPythonで外部WEBに接続する

RequestsはPythonで外部WEBに繋ぐ場合に使えるライブラリです。 過去の記事だと shuzo-kino.hateblo.jp だとか shuzo-kino.hateblo.jp で使ってます。 参考もと Requests: HTTP for Humans — Requests 2.18.4 documentation

Python経由で手っ取り早くローカルHTMLファイルを外部に公開したいならhttp.server

…動できます わざわざbottleで立てる必要なんか無かったんや! 実際のところ "$WEBPAGEPATH"にhtml、css、JSといったローカルでも確認できる静的ファイル群があるとします。 その場合、以下のようにします $ cd $WEBPAGEPATH $ python3 -m http.server $ python3 -m http.server Serving HTTP on 0.0.0.0 port 8000 ... 参考もと 20.19. SimpleHTTP…

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

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

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

…を作る気はないので、Bottleと連携させます。 実際のところ 構成 $ tree . ├── app.py ├── static │ └── js │ └── client.js └── templates └── base.jade 3 directories, 3 files スクリプトの中身 app.py from bottle import route, get, post, request, run, redirect, static_file, Bottle f…

Mosquittoをwebsocket対応にさせる その2:mqttws31を動かす

…の続きです。 まずはbottle抜きで有名所のJS製MQTTクライアントmqttws31を動かしてみます 実際のところ まずはindex.html。 mqttws31はCDN版を借りてきます。 そっけないので、本文に"sample"とか書いてますが、ここはお好みで。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>TEST</title> <script src="https://cd…

Mosquittoをwebsocket対応にさせる その1:環境構築

…e 1.4.14 (bottled) Message broker implementing the MQTT protocol https://mosquitto.org/ /usr/local/Cellar/mosquitto/1.4.14_1 (33 files, 630.0KB) * Poured from bottle on 2017-10-05 at 23:55:29 From: https://github.com/Homebrew/homebrew-core/…

BottleでWebsocketする

…hon製軽量WEB鯖Bottleで、Websocketを扱う方法です。 実際のところ 環境導入 $ pip install bottle-websocket サンプル実行 公式提供のサンプルはgithubにあります。 実行には別途、geventという並行処理系ライブラリが必要です。 $ pip install gevent $ pip install gevent-websocketまず、python。 "echo.py" from bottle import get, ru…

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

… # service nginx restart 参考もと python - How to implement private/public apikey with werkzeug/bottle? - Stack Overflow GitHub - OpenVPN/easy-rsa: easy-rsa - Simple shell based CA utility Module ngx_http_ssl_module Module ngx_http_uwsgi_module

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

… -*- from bottle import route, get, run, default_app, request, template import requests @get('/api/func') def api_func(): data = {"value1": "abc", "value2": "def", "value3": "ghi"} headers = {'Content-Type': "application/json"} url = 'https…

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: response.set_cookie("visited", "yes") r…

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

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

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

…e/ubuntu/ZZZ/ master = true plugin = python file = index.py chmod-socket = 666 uid = www-data gid = www-data 参考もと qiita.com inari.hatenablog.com qiita.com Running your Python Bottle application on Nginx using uWSGI - RunAbove knowledge base

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

…環境を活かし、そこにBottleを入れるところまで。 実際のところ 今回の作業は全部リモート環境で。 まずは、諸々のアップデート。 remote:~$ sudo apt-get update remote:~$ sudo apt-get upgrade生のPythonは2系、3を使いたい場合はpython3とします。 RasPiでも同じですね。 remote:~$ python3 -V Python 3.5.2パッケージツールはpipにします。 apt-getで入るやつは古い…

さくらVPS上にBottle鯖を立てる その3:秘密鍵を入れたマシン以外で入れないようにする

shuzo-kino.hateblo.jp のシリーズ第三弾。 今回は秘密鍵を入れたマシン以外で入れないようにします。 これで実害を喰らう可能性は相当低くなりますね。 実際のところ 以降、IPは160.16.xxx.xxx、ユーザはubuntuであるとします。まずはログインできるかお試し。 ここは特に問題ないはず。 local$ ssh ubuntu@160.16.xxx.xxx ubuntu@160.16.xxx.xxx's password: Welcome to Ubu…

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

shuzo-kino.hateblo.jp の続きです。 二回目の今回は、さくらVPSにUbuntu LTSを入れ、コンソールに入るところまで。 実際のところ VPSインスタンスの設定を行います。 「サーバ設定」のボタンをクリック。 しばらく読み込み画面が出た後、 インスタンスの管理画面がでます。 最初はこんな感じ 右の方の「各種設定」から、OSインストールを選択 初回なので、変な欲を出さず標準OSインストールを選びます こんな画面がでてきます。OSの選択画面ですね。 OSを…

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

…にJSONを吐き出すBottle鯖が必要になったので、 さくらVPS上に構築してみようと思います。 全5回予定の初回である今回は、さくらVPSの契約まで。 実際のところ VPSとクラウドのちがい クソザコナメクジなので、ちゃんと説明できませんでした。 さくら公式によると…… 「VPS」とさくらのクラウドの違いは?VPS(さくらのVPS)とさくらのクラウドは同じ「仮想専用サーバー」サービスです。仮想専用サーバーとは、物理サーバー上で複数の仮想サーバーを構築し、そのひとつひとつを…

leaflet-realtimeで「ピザ配達状況」めいたマップアプリをつくる

…を用意します。 私はbottleでやっつけてます。 shuzo-kino.hateblo.jp 本当に最小構成でこんな感じ from bottle import get, run @get('/api/status') def api_status(): return {"geometry": {"type": "Point", "coordinates": [111.19591175057819, -4.9534701779661079]}, "type": "Featur…

LotY (Language of the Year) 2017 @shuzo_kino

…ssやsinatraよりbottleのが手にあったからね、仕方ないね。 Lua FlashAirやその他組込み機器用に一気に需要が増した言語です。 C/C++に組み込む事ができて十分高速。 その分、あまり魔界記法的な事はできないようですが……。 中国語 ついにRosetta Stoneを(ほぼ)完了、CEF B1まで行きました。 言うて何ら資格試験はやっていないので、HSK3級を狙って勉強を続けます。 当初の懸念通り、みたいコンテンツが繁体字ばっかりで猛烈に後悔しております。

0.0.0.0は来るもの拒まずの特殊なIPv4アドレスである

…8*1になります。というわけで、bottleで以下のようにやると簡易的に自分のPCを外からアクセスできるWEB鯖にすることができます。 run(host='0.0.0.0', port=8080) たとえば、自前のアドレスが"192.168.100.100"だったとしたら、同一LAN内であれば http://192.168.100.100:8080とやればアクセス可能になります。 参考もと 0.0.0.0 ‐ 通信用語の基礎知識 *1:厳密には0.0.0.0.0.0::128

Bottleで直接送りつけられる画像データを受け取る

…; } これを受けるbottleの受け手は以下の通り。 "Content-Type image/jpeg"なデータはrequestのbodyに入っています。 ただ、ここデータ型はストリームタイプなので、適宜捕まえてファイル化して保存しないといけません。 @post('/img') def receiveImg(): timestump = strftime('%m%d%H%M%S') upload = request.body with open("/tmp/img/" + …

Pythonでディレクトリ中のファイルをソートし最新版をとってくる

…す。 実際のところ Bottleで"/tmp/img"にある時間の画像の最新版を取るスクリプトは以下の通り。 タイムスタンプをファイル名として居る時、logfiles[-1]が最新です。 import os @get('/get/recentPic') def send_recent_image(): logdir='/tmp/img' logfiles = sorted([f for f in os.listdir(logdir)]) return static_file(…

Bottleで画像を受け取る

Bottleで画像を受け取る方法です 形式としては、formで添付ファイルとして来ているようなケースを想定します。 このスクリプトでは組込み機器との連携を前提にしているので投稿フォームは無し。 実際のところ Jpeg画像を受け取るケースを考えます。 @post('/img') def receiveImg(): timestump = strftime('%m%d%H%M%S') upload = request.files.get('upload') name, ext =…

Bottleで簡易なデータ受信用鯖をつくる

…す。 実際のところ bottleなら最小構成で楽々。 from bottle import post, request, run @post('/') def receivedata(): body = request.params print(body.value1) @post('/json') def receiveJson(): data = request.json["username"] print(data) run(host='localhost', port…

bottleのURLキャプチャで正規表現をつかう

bottleのURLキャプチャで正規表現をつかう方法です。 エントリ番号を入力する所で文字列や日本語を投入されないようにできます。 実際のところ 一致させる場合 @get('/blog/:num#[0-9]+#') 特定の文字列だけキャプチャという事も可能 @get('/hello/:name#(shuzo|taro)#') 一致はさせたいが、変数は不要の場合 POST何かのときに有用ですね。 @post('/blog/#[0-9]+#') 参考もと bottle.paws.…