投稿日:2022-11-12
#Grasshopper
#Rhinoceros
#Python
今回は、node.js で API を作成し、GhPython コンポーネントから、作成した API を叩いてみました。4 枚のパネルに対して UserAttributes を設定し、GhPython から API を叩き、CRUD 操作を一通り行い、DB で attributes を管理するといった内容になってます。
初めに以下の前提があることを認識してから記事を読んでいただけると幸いです。
では解説していきます。
今回の概要は上の様になってます。
みたいな内容になってます。
ちなみに諸々のバージョン。
ちなみにサーバーサイドの言語選定理由は、ただ単に自分がやりやすいツールを使っているだけです。お好きなサーバーサイドの言語で実装していただいて全く問題ありませんし、DB に関しても RDB 系のデータベースでもなんでもいいです。ブラウザで完結して楽だから今回 MongoDB を選定しているだけです。mongoose は mongoDB との接続を行ってくれるモジュールとなっております。
とりあえず grasshopper の GhPython コンポーネントから API を叩いてみましょう。リクエスト先は
を使用します。こちらは API サーバーになっており、リクエストを送ると適当なダミーデータを JSON で返してくれます。今回は JSON Placeholder の Users(10 ユーザーのダミーデータ)を取得してみます。
1import urllib2 2import json 3 4def fetch_data(): 5 6 url = 'https://jsonplaceholder.typicode.com/users' 7 8 response = json.load(urllib2.urlopen(url)) 9 for value in response: 10 print value 11 12fetch_data();
Python のモジュール urllib2 を使用し、リクエストを送ってます。json 形式でレスポンスが返ってくるので、パースしてから出力してます。上画像の様に、データが取得できているのがわかります。
このエンドポイントを、自分で作った API のエンドポイントにして諸々の処理を施していく感じです。
上が作成した API となります。詳しくは説明しませんが 5 つのエンドポイントを作成しています。ソースコード興味ある方は
参照願います。
それでは Grasshopper の解説を行っていきます。
1import urllib2 2import json 3 4def postPanel(): 5 6 url = 'http://localhost:3000/api/panels/' 7 handler = urllib2.HTTPHandler() 8 opener = urllib2.build_opener(handler) 9 10 id = attributes[0] 11 delivery = attributes[1] 12 13 sendValues = { 14 "_id":id, 15 "delivery":delivery 16 } 17 18 sendValuesJson = json.dumps(sendValues).encode("utf8") 19 20 request = urllib2.Request(url, sendValuesJson) 21 request.add_header("Content-Type",'application/json') 22 response = json.load(urllib2.urlopen(request)) 23 print response 24 25if method == 0 and trigger == True: 26 postPanel()
1import urllib2 2import json 3 4def getAllPanels(): 5 6 url = 'http://localhost:3000/api/panels' 7 8 response = json.load(urllib2.urlopen(url)) 9 for value in response: 10 print value 11 12if excute: 13 getAllPanels();
1import urllib2 2import json 3 4def getAllPanels(): 5 6 url = 'http://localhost:3000/api/panels/' + id 7 8 response = json.load(urllib2.urlopen(url)) 9 print response 10 11 _id = response['_id'] 12 delivery = response['delivery'] 13 14 return _id,delivery 15 16if excute: 17 attributes = getAllPanels();
1import urllib2 2import json 3 4def updatePanel(): 5 id = attributes[0] 6 delivery = attributes[1] 7 8 url = 'http://localhost:3000/api/panels/'+id 9 handler = urllib2.HTTPHandler() 10 opener = urllib2.build_opener(handler) 11 12 sendValues = { 13 "_id":id, 14 "delivery":delivery 15 } 16 17 sendValuesJson = json.dumps(sendValues).encode("utf8") 18 19 request = urllib2.Request(url, sendValuesJson) 20 request.add_header("Content-Type",'application/json') 21 request.get_method = lambda: 'PUT' 22 response = json.load(urllib2.urlopen(request)) 23 print response 24 25if method == 1 and trigger == True: 26 updatePanel()
1import urllib2 2import json 3 4def deletePanel(): 5 6 id = attributes[0] 7 8 url = 'http://localhost:3000/api/panels/'+id 9 10 handler = urllib2.HTTPHandler() 11 opener = urllib2.build_opener(handler) 12 13 request = urllib2.Request(url) 14 request.add_header("Content-Type",'application/json') 15 request.get_method = lambda: 'DELETE' 16 response = json.load(urllib2.urlopen(request)) 17 print response 18 19 20if method == 2 and trigger == True: 21 deletePanel()
以上になります。かなりざっくりした説明になりましたが、ご興味ある方は
に Grasshopper ファイルも push しとくのでのぞいてみてください。元々は、GoogleDrive に格納済みのスプレッドシートを Grasshopper 上で参照する必要があり、API を叩いていたら今回の様なこともやってみようかなと思った次第です。(※スプシの方もそのうちブログ書くと思います。 → 書きました。ご興味あれば以下のリンクご参照ください。)やってることは、ただ GhPython コンポーネントから API を叩く、それだけです。node.js でやってることも基本的なことばかりです。javascipt の基礎知識は必要ですが、適当に udemy で node.js の講座を購入してやれば、簡単に作れます。そのうち役に立ちそうだなと思い記事にしときました。是非ご参考ください。
【参考文献】
以上
icon