LoginSignup
kokidddd
@kokidddd (fasdfas asdfasdf)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Google App Engine, pythonでapi用のエンドポイント作成方法

解決したいこと

現在ebayのapiを利用してpythonのプログラムを作成しようとしています。
現在、ebayでapiを利用するためには、’Marketplace account deletion notification endpoint’と’Verification token’の設定が必要なようです。

そこでGoogle app engineを利用してエンドポイントの作成を試みました。
ファイルはmain.py, app.yaml, requirements.txtの三つを作成しました。
しかし、デプロイをすると、URLでは「Service Unavailable」と表示されてしまいます。
また、ebayの「Event Notification Delivery Method」で先ほど記述した二つを入力し、saveをすると’Marketplace account deletion endpoint validation failed. Click here to learn more about setting up an endpoint.’と表示されてしまいます。
ebayのapiをgaeで利用できるようにしたいです。

例)
Ruby on RailsでQiitaのようなWebアプリをつくっています。
記事を投稿する機能の実装中にエラーが発生しました。
解決方法を教えて下さい。

作成したコード

main.py
import hashlib
from flask import Flask, request, jsonify

app = Flask(__name__)

verification_token = 'MCYーーーーーーーBVB'
endpoint = 'https://WATASINOPUROJEKUTO.uc.r.appspot.com/ebayApi/endpoint'


@app.route('/ebayApi', methods=['GET'])
def ebay_api():
    challenge_code = request.args.get('challenge_code', '')

    if challenge_code:
        hash_object = hashlib.sha256()
        hash_object.update(challenge_code.encode())
        hash_object.update(verification_token.encode())
        hash_object.update(endpoint.encode())
        response_hash = hash_object.hexdigest()
        return jsonify({'challengeResponse': response_hash}), 200
    else:
        return jsonify({'error': 'No challenge code provided'}), 400

if __name__ == '__main__':
    # 本番環境では、WSGIサーバーを使ってアプリケーションを実行する
    # 例えば、Gunicornを使う場合:
    # gunicorn -w 4 -b 0.0.0.0:8080 your_flask_app:app
    app.run(debug=False, host='0.0.0.0', port=8080)




app.yaml
runtime: python39
service: default
entrypoint: gunicorn -b :$PORT main:app

handlers:
- url: /ebayApi
  script: auto

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。
gae側で何か問題があるのではないかと考え、以下のような簡易的なコードをデプロイした結果問題なく’hello world’が表示されました。

from flask import Flask 
app = Flask(__name__)
@app.route('/')
def hello():
    return 'hello, world', 200
    

完全独学でgaeの利用は初めてなのに加えエンドポイントの作成?も初なのでわからないことだらけです。
色々調べてはみたのですが、ネット上にほとんどないのでこちらで質もさせていただきました。
お答えいただけると幸いです。

0

1Answer

HelloWorldはうまくいっていることと、503 Service Unavailableが出ていることから
どこかの行でエラーが出ているのだと思います。
少し情報が少ないので以下のことを試して頂くとよいかと思います。

  1. GAEのログを見る
    GCPはデフォルトでログ取得がOnになっているはずなので、以下からご指定のプロジェクトとGAEを選択してエラーログを確認してみてください。
    https://console.cloud.google.com/logs
  2. ログの追加
    上記でログが足りないようであればtry except句を使用して、エラー内容をログに表示してみてください。
  3. ローカルでの実行
    エラー内容的に恐らくGAEでなくても発生するエラーではないかと思います。
    開発用サーバのコードもすでに入っているようですので、ローカルで実行しても同じ現象になるか確認することで、GAEの問題かコードの問題かを切り分けられると思います。
0

Your answer might help someone💌