Grasshopperで外部サービスと連携する──API連携の超超入門
✅はじめに
私は普段、RhinocerosやGrasshopperを仕事で使っています。
一方で、建設業向けのWebGLを使ったWebアプリの開発も行っており、
その流れで、仕事外でもRhinoやGrasshopperとWebを組み合わせて、思いつきでいろいろ試すことがあります。
試してきたことを個人のブログでいくつかアウトプットしているのですが
例えば:
①Grasshopperで生成したオブジェクトにUserTextを付与し、その情報をデータベースで管理する
②RhinoモデルをWebと同期させて、お互いに変更を反映し合う
③GrasshopperとWebを連携し、変更や更新を半リアルタイムで反映する
④Grasshopperをスプレッドシートと連携してデータを取得してみる
こういった連携を考え始めると「Rhino/Grasshopperはまだまだ面白くできるのでは?」と思えてきます。
今回は、Grasshopperと外部サービスを連携させる超超入門編として、
「Grasshopperから外部APIにアクセスして情報を取得する」という、シンプルな操作だけに絞って解説します。
✅APIってそもそも何?
API(エーピーアイ)は Application Programming Interface の略で、要は「プログラム同士がデータをやりとりするための入り口」のことです。
多くのソフトウェアやWebサービスはAPIが用意されており、外部のプログラムからデータを取得したり、操作を行ったりできます。
APIにアクセスするとは、HTTP通信を通じて外部のサーバーにリクエストを送り、
その応答としてデータを受け取ったり、情報を更新したりするという行為です。
例えば:
気象データAPIから気温情報を取得
材料情報APIから材料情報を取得
社内のデータベースAPIに部材情報を書き込む
こうした操作も、Grasshopperのスクリプト内から行うことが可能です。
✅実際にAPIにアクセスしてデータを取得してみる
さて、兎にも角にもまずは手を動かして実際にAPIサーバーからデータを取得してみます。
今回はAPI通信の練習用として有名なダミーAPI JSONPlaceholder を使います。
ここでは、ダミーのユーザ情報や投稿データなどがAPI形式で提供されており、API通信の練習素材としては非常に適しています。
通信にはGrasshopperのPythonスクリプトコンポーネントを使用します。
【Rhino8の場合】
Rhino8ではPythonのバージョンが3系に変わったため、標準ライブラリの使い方も少し変わります。
import urllib.request
import json
def fetch_data():
url = 'https://jsonplaceholder.typicode.com/users'
with urllib.request.urlopen(url) as response:
data = json.load(response)
for value in data:
print(value)
fetch_data()
簡単に何をやっているか?
urllib.request.urlopen()
→ 指定したURLにアクセスして、APIサーバーのレスポンス(JSON)を受け取っています。json.load()
→ 受け取ったJSONデータをPythonの辞書・リスト形式に変換しています。print(value)
→ データの中身を1件ずつ出力しています。with構文
→ 通信が終わった後に自動で接続を閉じてくれる安全な書き方です。
【Rhino7以前の場合】
Rhino 7以前では内部Pythonは2系のIronPythonが使われており、ライブラリの書き方が少し違います。
import urllib2
import json
def fetch_data():
url = 'https://jsonplaceholder.typicode.com/users'
response = urllib2.urlopen(url)
data = json.load(response)
for value in data:
print value
fetch_data()
こちらのポイント
urllib2
→ Python 2系ではURL通信用ライブラリが分かれていました。print value
→ Python 2系は print が文なので括弧が不要です。
画像のPanelコンポーネントをみてみるとJSONPlaceholderからデータが返ってきてるのがわかります。
こんな感じでAPIに対してリクエストを送り、responseを受け取ってデータを取得することができました。
✅まとめ
Grasshopperの中でも、意外と簡単にAPIを叩いて外部データを取得できることが分かったかと思います。
こういった連携ができるようになると、外部サービスや他ツールとのデータのやり取りがぐっと柔軟になりますし、Grasshopperの活用の幅も大きく広がります。
冒頭で挙げたような「Webと組み合わせた試み」も、実はすべてこの基本的な仕組みの上に成り立っています。
もし興味があれば、ぜひ手を動かして色々試してみてください。API連携すると、Grasshopperでもっと面白いことができるかもしれません。
以上
▼関連リンク
