見出し画像

【番外編】GlideをZappierと連携させてPythonのスクレイピングコードを動かそう!

こちらの一連の記事は、Sabinukyリリースまでに私たちのとった行動や検討内容をまとめたものです。悩んだこと、起こった問題等全て実話に沿って記載しています。

どうも、こんにちは〜!まいこさま@Saninukyです!前回の番外編に続き、スクレイピング機能にまつわるお話です。今回はどうやってスクレイピング機能が動く契機を与えるか?について検討/実装してみた結果をお伝えします!

前回の番外編の記事↓

Zappierとは?機能や料金形態など

私たちの利用しているノーコードツールである、GlideはZappierという任意のサービスやアプリを連携させてタスクを自動化させることのできるツールと連携が可能です。詳しくは以下の公式サイトよりご覧ください↓

料金形態としては、Freeのものもあり以下のとおり無料で使ってみることも可能です!但し、継続的に利用する場合は月100タスク(Zappierで自動化タスクを実行する回数)じゃ足りなくなることも多いので、有料プランの検討も必要です。

スクリーンショット 2020-12-28 8.16.05

Pythonコードでのスクレイピング

前回の番外編の記事にて、スプレッドシート上でスクレイピングの関数を動かし自動的にWebサイトの情報を取得する方法をご紹介しました。実際に実装してみて、取得がスプレッドシートを開くたびに行われることから読み込みに時間がかかることから、行が追加されたときに一回webサイトを参照し取得するようなPythonコードを書いた方が、実行時間も早いのでは?と考えさっそく食べログサイトのURLを値として渡し、そのお店の住所(前回はお店の名前だったので)を取得するようなPythonコードを作成しました。 Zappierで実行するPythonコードは外部ライブラリが使えないので注意!

//Json型でURLを受け取る想定
def addressget(request):
    import requests
    import re
    import json
    import codecs
  
    url=request_json['url']
    urlget=requests.get(url).text
    dataget=re.findall('<p class="rstinfo-table__address">(.*?)</p>',urlget)
    datagets=str(dataget)
    address=datagets.split('>')
    address1=address[2].split('<')[0]
    address2=address[6].split('<')[0]
    address3=address[8].split('<')[0]
    address4=address[9].split('<')[0]
    addressfix=address1+address2+address3+address4
    print(addressfix)
    jsonshopinfo={"address":''}
    jsonshopinfo['address']=addressfix
    jsonshopinfo=json.dumps(jsonshopinfo, ensure_ascii=False)
return jsonshopinfo

もともとコードを書くつもりがなく、試行錯誤しながら試したものなので大変読みづらく申し訳ございません・・・・。

Glide×Zappierについて

Glideのスプレッドシート上で実際やりたい手順は以下の通り

1.スプレットシートに行が追加される
 (=私たちのサービス上ではユーザーがお店情報を投稿する)
2.Zappierと連携し、スプレッドシートの行が追加されたこと
 を検知する
3.スプレッドシートの追加された行に入力されたURLをもとに
 Zappier上でPythonコードを動かす
4.Pythonの実行結果から得られたお店の住所を
 スプレッドシートに返す

上記の流れをZappier上で組み立てていきます。

Zappierでの設定方法

まず、Zappierにログインし、Make a zapを押す

スクリーンショット 2020-12-28 8.32.07

今回はスプレッドシートの行追加を契機にコードを動かしたいので、Trigger EventにはNew Spreadsheat Rowを選択する。

スクリーンショット 2020-12-28 8.32.33

対象のスプレッドシートを選択して・・・

スクリーンショット 2020-12-28 16.20.25

次のアクションとして、Run pythonを設定し、先ほどのコードを挿入します。

スクリーンショット 2020-12-30 9.12.43

次のアクションとして、実行したPythonの戻り値をスプレッドシートに反映するように設定したら完成!

スクリーンショット 2020-12-30 9.14.55


問題点

今回、実際に実装してみて2つの問題点が見えました。

・Zappierの無料プランでは、タスク実行の契機が15分に一回と即情報を反映させたい場合は時差ができてしまうという(有料プランでも5分に一回が最短)

・実行するPythonコードの実行時間が1秒以上かかると実行できない

Sabinukyは現在収益がないので、有料プランにすると完璧にマイナスコストになってしまうので、無料かつPythonコードを即実行できる手法を模索し、GCP連携に行き着いたので次回記事でご紹介させていただきます!(by Adalo)

★Sabinukyの紹介ページはこちら★

感想やコメント頂けると励みになります!



Sabinukyの今後の開発費用に利用させて頂きます。ご支援頂けますと幸いです。