ono
2025 年 1 月 26 日午前 8:04
1
以下の記事を参考に、とある映画館の上映スケジュール(上映中作品のタイトル、公開予定作品のタイトル)を毎日決まった時間にスクレイピングし、Bubble アプリのDBへ適切な形で保存しようとしています。
https://blog.nocodelab.jp/entry/scraping
dexiの方では、以下のように実装しています。
最初に開くURLでは、上映中作品のタイトルを引っ張ってきて「title」に格納し、2つ目と3つ目に開くURLでは、公開予定作品のタイトルを引っ張ってきて「title1」に格納しています。
すると、それぞれ以下のようになります。
dexiの方で決まった時間にスクレイピングするよう、スケジュール設定はしてありますので、常に最新の上映スケジュールは抽出できています。
そして、これらデータをAPIでBubbleに渡し、Bubble内のDBに保存しないままrepeatinggroupで表示すると、以下のようになってしまいます。
この、何も表示されていない空の部分を非表示にしたいのですが、どのようにすればよいでしょうか(いろいろ試してみましたがうまくできず)。
そもそも、スクレイピングが終わった時点ですぐに(空の部分は除いて)先にBubbleのDBに保存した方がよいでしょうか?
それかBackend workflowでスケジュールを設定しておき、決まった時間にBubbleのDBを上書き(更新)すべきか。
他にも良い案がありましたら、お手数をおかけしますがその辺りもご教示いただけますと幸いです。
とにかくどんな方法でもよいので、最初に述べました
上映スケジュール(上映中作品のタイトル、公開予定作品のタイトル)を毎日決まった時間にスクレイピングし、Bubble アプリのDBへ適切な形で保存
ができればと思っております。
お手数をおかけしますが、何卒よろしくお願いいたします。
ono
2025 年 1 月 26 日午前 8:14
2
追記(自分用メモ)
Do a search forを使ったとき、特定の要素のみを非表示にすることができたりするようですので、まず一番最初に表示をする前にBubbleのDBに保存することはマストですかね。。?
そのとき、空部分を除いてDBに保存するのか。
あるいは空部分も含めて保存し、表示をするときに空部分を除いて表示をするのか。
そもそもどのように保存するのか。
あるいは、根本的にdexiの方でうまい抽出方法があるのか。
お手数をおかけしますが、よろしくお願いいたします。
Dexiを使ったことはないのですが、
説明を拝見すると、APIからJSONデータを取得しているようですね。
Bubbleのデータベースに保存する必要はマストではないですよ。
記事ではAPI Connectorを使っているようですが、データ取得時にフィルターをかけることができます。
例えば、以下のようにGETリクエストにパラメーターを追加することで、
タイトルが空のデータを除外できるかもしれません。
(未検証ですが参考にしてくださいね)
例:
GET https://api.dexi.io/runs/{runId}/latest/result?filter=Title ne ''
詳しくは、DexiのAPIドキュメントも参考にしてみてください。
[Dexi API ドキュメント ]
もしAPIでフィルターが難しい場合には、
一度すべてのデータを取得してから、Bubble側でフィルタリングする方法もあります。
Bubbleでのフィルタリング方法
API設定例:
URL: https://api.dexi.io/runs/{runId}/latest/result
クエリパラメーター設定例:
Key: filter
Value: Title ne ''
また、BubbleのRepeating Group を使えば、取得後に以下の設定で簡単にフィルタリングできます。
GetLatestResult row:filtered [Title is not empty]
APIの設定やコードについては、いろいろな方法があるので、
まずは試してみて、うまくいかない場合は別の方法も考えてみてください。
「いいね!」 1
ono
2025 年 1 月 26 日午前 11:44
4
tsubasa様
ありがとうございます。
ご教示いただいた方法も試してみましたがなぜかうまくいかず、その後いろいろ試してみまして、Advancedで試してみたらなぜかうまくいきました。
この後、もう一度ご教示いただいた方法含め、シンプルに実装できないか挑戦してみようと思います。
申し訳ございません。
私の説明不足だったのですが、上映スケジュールをBubble内からユーザーが手動で変更したり、この上映スケジュール自体を生成AIにリクエストとして投げたりする関係上、DBには保存しておきたいのです。
となると、Bubble内でBackend workflowでスケジュールを指定しておき、時間になったら(空の分をフィルタリングした上で)DBに上書き(更新)する、という方法が無難でしょうか?
あるいは、dexiの方でexecute(スクレイピング実行)が終わったら、自動的にDBを上書きしてくれればよいのですが、調べてみてもそれができるのかどうか分からず。。。
お手数をおかけしますが、ご教示いただけますと幸いです。
引き続きよろしくお願いいたします。
順調に進んでいるようで良かったですね!
基本的には、Bubbleのワークフローを活用して、定期的にDBを更新するのが無難 だと思います。
(例えば、Backend Workflowを使ってスケジュールを設定するなど)
あるいは、dexiの方でexecute(スクレイピング実行)が終わったら、自動的にDBを上書きしてくれればよいのですが、調べてみてもそれができるのかどうか分からず。。。
→ dexiのAPIには、実行完了後に自動でBubbleのDBを更新するような「終了ステータス通知」機能がないように思います。
そのため、やるとすると、
DBの差分を確認して更新する仕組み を作るのが良さそうです。
多分ですが、、idや作成日などをキーにして、定期的にCron(スケジュール実行)を使ってチェック&更新 する方法などになると思いますよ。
「いいね!」 1