質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1395閲覧

cloud functionsで関数のテストをするとエラーが出る

emememem

総合スコア1

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2022/11/28 08:57

編集2022/11/29 09:42

前提

実現したいこと

あるwebサイトのhtmlを取得
→クラスを指定して要素を取得
→これを定期実行
→要素が変化したら(サイトが更新されたら)trueを返す
というプログラムを作成しています。
定期実行に関してはをgoogleのcloud functionsのpubsubトリガーで行います。

発生している問題・エラーメッセージ

コードはgoogle colaboratoryで実行するとうまくいきました。
しかしcloud functionsでデプロイ後,関数をテストすると下記のエラーが出ます。

Error: function terminated. Recommended action: inspect logs for termination reason. Additional troubleshooting documentation can be found at https://cloud.google.com/functions/docs/troubleshooting#logging Details:500 Internal Server Error: The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.

該当のソースコード

言語はpythonです。

from bs4 import BeautifulSoup import requests def detect_updates(): url = "webサイトのurl" res = requests.get(url) soup = BeautifulSoup(res.text,'html.parser') #new_elemに取得したclassの要素を入れる new_elem = str(soup.select(".クラス名")) #old_elem.txtに入っているclassの要素をold_elemに入れる try: with open("old_elem.txt") as f: old_elem = f.read() except: old_elem = "" #old_elemとnew_elemを比較 if new_elem == old_elem: return False else: with open("old_elem.txt","w") as f: f.write(new_elem) return True

試したこと

ログを見たところ,これが原因の文章かと思われます。
TypeError: detect_updates() takes 0 positional arguments but 2 were given

コメントアウトなどして原因箇所を探ってみましたが,分からず。
最終的に下記のコードでテストしても同じエラーが出てきました。

def detect_updates(): print("aaa")

補足情報(FW/ツールのバージョンなど)

下記の動画を参考に作成しました。
https://www.youtube.com/watch?v=1-UOksMm0r8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

68user

2022/11/29 06:04

functions のログにエラー内容が出ているはずですので確認してみましょう。
emememem

2022/11/29 09:46

回答ありがとうございます。 ログを見たところ引数の数が原因かと思われましたが,未だ解決できていません。
68user

2022/11/29 12:11

そもそもその動画は function 前提で説明してないように見えますので、function にのっけたいのであれば hello world レベルから始めたほうがよいでしょう。 1st gen のサンプル https://cloud.google.com/functions/docs/samples/functions-helloworld-pubsub?hl=ja 2nd gen のサンプル https://cloud.google.com/functions/docs/samples/functions-cloudevent-pubsub?hl=ja いずれもコード部分で「python」タブを選択してください。
68user

2022/11/29 12:12

エラーは 2 arguments と言ってるんだから、多分今は 1st gen で登録しているのだろうと思われます。
emememem

2022/11/29 13:12

確かに動画とは環境が違いますね。 サンプルから始めてみようと思います。 丁寧な回答ありがとうございます!
guest

回答1

0

自己解決

時間をおいて同じコードを書いて実行したらなぜか出来てしまいました。明確な原因は不明のままです。
回答くださった方々有難うございました。

投稿2022/11/30 03:10

emememem

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問