投稿日:2022-12-15
#Grasshopper
今回は GoogleDrive に格納されている SpreadSheet のデータを、Hops を使用して Grasshopper から取得してみました。(※Hops は Rhino7.4 以降使用できるプラグインになりますのでご注意ください)
Grasshopper で SpreadSheet のデータを読み込む方法はいくつかあるかと思います。
などなど、いろんな方法が考えられるかなと思います。
まずは外部から SpreadSheet にアクセスできるように準備を行っていきます。(※Google アカウントがある前提で解説していきます。)
にアクセスして、ログイン後上箇所から、新しいプロジェクトを適当なプロジェクト名で作成します。今回は「grasshopper-spreadsheet」という名前で作成しました。
続いて、検索欄から GoogleDriveAPI と GoogleSheetsAPI を検索し有効にします。
サービスアカウントを作成します。適当な名前・ID を入れて作成します。説明以降は省略できます。
サービスアカウントが作成されたら、アカウントをクリックし、秘密鍵を JSON 形式で作成します。JSON ファイルがダウンロードされると思いますが、後ほど使用しますのでデスクトップなどに置いておいてください。
Hops component を作成していきます。開発環境は以下になります。
1from flask import Flask 2import ghhops_server as hs 3import gspread 4from oauth2client.service_account import ServiceAccountCredentials 5import os 6 7app = Flask(__name__) 8hops = hs.Hops(app) 9 10@hops.component( 11 "/getSpreadsheet", 12 name="ss", 13 description="Get sheet value", 14 inputs=[], 15 outputs=[ 16 hs.HopsString("value", "value", "fetch value"), 17 ], 18) 19 20def getSpreadsheet(): 21 scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'] 22 jsonKey = os.path.abspath('各自ダウンロードしたjsonKeyファイル') 23 credentials = ServiceAccountCredentials.from_json_keyfile_name(jsonKey, scope) 24 gc = gspread.authorize(credentials) 25 sheet = gc.open("スプレッドシートの名前").sheet1 26 getSheet = sheet.get_all_values() 27 return getSheet 28 29if __name__ == "__main__": 30 app.run() 31
上が作成した hops component になります。app.py というファイル名で作成してます。
getSpreadSheet 関数で一連の処理を書いてます。
このファイルを実行すると、
でサーバーが起動します。
grasshopper から Hops コンポーネントで
アクセスすれば、Grasshopper 側で値を取得できます。
1response = value.decode('unicode-escape')
これでスプレッドシートの値が取得できました。
最後に、取得したデータを少し加工します。 部位・仕上・単価・単位の 4 項目があり、プラグイン human の Item Selector コンポーネントで、部位と仕上でフィルターをかけられるようにしてます。これでほしい値を Selector で選べるようになってます。 Hops component に引数を渡して app.py 側で処理することもできるかなと思います。 スプレッドシートと連携する機会はさほどないかもしれませんが、もしかしらたら役に立つかもと思いブログにしておきました。以上 【参考】