#はじめに
タイトルの通り。
ほぼ忘備用です。
Brythonは全く触ったことない初心者が書いてます。
#経緯的な
pythonをjavascriptで動かすためにBrythonを触っていたところ、
そのBrythonではrequestsモジュールがサポートされていないことが分かった。
ので、
ajax使ってそれっぽいもの作ってみよう、ということに。
※Brythonについてはここ読んで
#準備
さてここから本題。
上記のここからBrython一式をダウンロード。
(今回は)不必要なものもあったので、それらを省略したパスがこんな感じ。
www----fonts
L--tests----ace
L--brython_test_utils
L--editor.html
L--editor.py
L--tests_editor.py
L--requests.py
L--dom_js_tests.js
L--jsobj_tests.js
拡張子ついてない物はファイルです。
(今回、特に触っていないので中身はそのまま使ってもらえば大丈夫かと)
この中で大事なのは自作したrequests.py。
この中にrequestsもどきを書いて、他で呼ぶ形にしています。
import json
def get(send_url,params="None"):
from browser import document, ajax
#paramsが設定されていた場合に実行(パラメータをセット)
if params != "None":
send_url = send_url + "?"
params_count = len(params.keys())
for paramskey in params.keys():
send_url = send_url + paramskey + "=" + params[paramskey]
params_count = params_count -1
if params_count != 0:
send_url = send_url + "&"
req = ajax.Ajax()
# send a POST request to the url
# Bind the complete State to the on_get_complete function
req.open('GET', send_url, False)
req.set_header('content-type', 'application/x-www-form-urlencoded')
req.send()
return req
getが呼ばれたらsend_url(送り先)とparam(パラメータ)を受け取って、req.send()で送信。
返ってきた値をreturnで返しています。
「req.open('GET',send_url,False)」部分で、同期通信をしています。
FalseをTrueに変えれば非同期通信になりますが、空っぽのreqが返ることになるので一旦同期しています(多分スレッドとか使えば非同期でも最終的に値を返せる…はず)。
これで準備終わり。
#実行
localhostでいいのでサーバを立てて、~www/tests/editor.htmlにアクセス。
ボクはお手軽だったのもあってXAMPP使って立てました。
パスは環境に合わせて調整してください(~部分)。
下の画像のような画面が開けばOK(レイアウト変えてないのでBrythonの画面ままです)。
runのボタンを押すと、
左側に書いたPythonを実行し、その結果が右側に出力されます。
ではやっていきましょう。
今回はこちらのAPIをお借りしました。
ランダム生成された個人情報っぽい情報が取得できます。
実行するPythonはこちら
import requests
import json
url = 'https://randomuser.me/api/'
res = requests.get(url)
response = json.loads(res.text)
print(response)
result = response["results"][0]
#print("result" ,result)
#gender = result["gender"]
#結果
実行した結果がこちら。
途中で関係ないボタン等を削ったので見た目少し違ってます。
無事、requestsが動いているように見える動作ができました。
最後に行のコードもコメント外せば出力されます。
返ってきたレコードの一部を取得したい場合は、適当に使ってください。
#課題
(解決方法知ってるよ!って方がいればコメントで是非)
・非同期通信でも、最終的に画面で書いたコード部分に値を渡したい。
・一部APIでCORSのためか値を返してくれない(通信そのものが失敗している)。
→「https://zipcloud.ibsnet.co.jp/api/search 」(パラメータで渡した情報の住所を取得するAPIです)」
→APIの詳しいことはこちら(郵便番号検索API)