前提・実現したいこと
Google App Scripts でWebAPIを作り、pythonからURLアクセスし、レスポンス(text)を受け取りたい。
参考サイト:https://qiita.com/satto_sann/items/be4177360a0bc3691fdf
現状
URLアクセスすればコード200とレスポンスをブラウザに表示されるようになりました。
サイト紹介のAPIのURL:https://script.google.com/macros/s/AKfycbzZtvOvf14TaMdRIYzocRcf3mktzGgXvlFvyczo/exec?text=Hello&source=en&target=ja
source code
今回python側のJSON受け取りの問題なのですが念のためGAS側も掲載します。
GAS
1function doGet(e) { 2 // リクエストパラメータを取得する 3 var p = e.parameter; 4 // LanguageAppクラスを用いて翻訳を実行 5 var translatedText = LanguageApp.translate(p.text, p.source, p.target); 6 7 // レスポンスボディの作成 8 var body; 9 if (translatedText) { 10 body = { 11 code: 200, 12 text: translatedText 13 }; 14 } else { 15 body = { 16 code: 400, 17 text: "Bad Request" 18 }; 19 } 20 // レスポンスの作成 21 var response = ContentService.createTextOutput(); 22 // Mime TypeをJSONに設定 23 response.setMimeType(ContentService.MimeType.JSON); 24 // JSONテキストをセットする 25 response.setContent(JSON.stringify(body)); 26 27 return response; 28}
python
1import urllib 2import urllib.request 3import pdb 4response = urllib.request.urlopen('https://script.google.com/macros/s/AKfycbzZtvOvf14TaMdRIYzocRcf3mktzGgXvlFvyczo/exec?text=Hello&source=en&target=ja') 5 6print('url:', response.geturl()) 7print('code:', response.getcode()) 8print('text:', response.info()['body']) 9print('text3:', response.info()) 10print('text4', response.headers['Content-Type']) 11print('text4', response.headers) 12 13print('text4', response.body['text']) 14print('Content-Type:', response.info()['Content-Type']) 15content = response.read() 16print(content) 17response.close()
発生している問題・エラーメッセージ
しかし、そのままprint表示しますとResponse<200>のみで”こんにちは"のみを返却して利用したいのですが、目当てのものが取得できないでおります。
かなりたくさんの方法でレスポンスからtextの結果のこんにちはを受け取ろうとしましたが、他のものがprint表示されています。
試したこと
①
python
1import json 2import urlopen 3import pdb 4jsons = urlopen("https://script.google.com/macros/s/AKfycbzZtvOvf14TaMdRIYzocRcf3mktzGgXvlFvyczo/exec?text=Hello&source=en&target=ja").read().decode('utf-8').split('\n') 5 6result = [] 7for v in jsons : 8 try: 9 js = json.loads(v) 10 result.append( js['info'] ) 11 except Exception: 12 pass 13pdb.set_trace() 14print(result)
②
python
1from urllib.request import Request, urlopen 2from urllib.error import URLError 3req = Request("https://script.google.com/macros/s/AKfycbzZtvOvf14TaMdRIYzocRcf3mktzGgXvlFvyczo/exec?text=Hello&source=en&target=ja") 4try: 5 response = urlopen(req) 6except URLError as e: 7 if hasattr(e, 'reason'): 8 print('We failed to reach a server.') 9 print('Reason: ', e.reason) 10 elif hasattr(e, 'code'): 11 print('The server couldn\'t fulfill the request.') 12 print('Error code: ', e.code) 13print(response)
③
python
1import requests 2import json 3 4#GET先URL 5# url = "https://script.google.com/macros/s/AKfycbzZtvOvf14TaMdRIYzocRcf3mktzGgXvlFvyczo/exec" 6 7#JSON形式のデータ 8jsonData = { 9 "text": "Hello", 10 "source": "en", 11 "target": "ja" 12} 13 14#GET送信 15response = requests.post( 16 url = "https://script.google.com/macros/s/AKfycbzZtvOvf14TaMdRIYzocRcf3mktzGgXvlFvyczo/exec", 17 params = jsonData 18 ) 19 20resDatas = response.json() 21 22print(resDatas)
④
python
1import execjs 2print(execjs.eval("'red yellow blue'.split(' ')")) 3 4ctx = execjs.compile("""function add(x, y) {return x + y;}""") 5print(ctx.call("add", 1, 2)) 6 7import requests 8get_url_info = requests.get('https://script.google.com/macros/s/AKfycbzZtvOvf14TaMdRIYzocRcf3mktzGgXvlFvyczo/exec?text=Hello&source=en&target=ja') 9print(get_url_info) 10 11 12payload = {'text': 'Hello', 'source': 'en', 'target': 'ja'} 13r = requests.get('https://script.google.com/macros/s/AKfycbzZtvOvf14TaMdRIYzocRcf3mktzGgXvlFvyczo/exec', params=payload) 14print(r.args['text'])
どのようにすればレスポンスコード200ではなくtextのこんにちはを取得できるのでしょうか。
pythonのHTTPGET時のJSONのパラメータ受け取りについてアドバイス頂けないでしょうか。
よろしくお願い致します。
補足情報(FW/ツールのバージョンなど)
python3.7
windows10 home
GAS
2020/05/24 10:56 追記
GAS側で公開設定しなければレスポンスのContentTypeがJSONにならずデコードエラーになってしまう(API実行後のpython受け取り時)ため、しっかりと公開をしているか再度確認しました。
エラーの際の画面
しかし再度API実行したところ状況変わらずでした。
ひとつ懸念点は、どうやらGASは唯一のデメリットとして反映するまでに時間がかかるとのことでした。でもすぐに反映できたと言われたため私は他に原因があるのでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/23 07:56
2020/05/23 08:03
2020/05/23 10:16
2020/05/23 10:35
2020/05/23 11:31 編集
2020/05/23 14:59 編集
2020/05/23 15:18
2020/05/23 22:26
2020/05/23 22:58
2020/05/24 02:08
2020/05/24 04:24
2020/05/24 07:53 編集