-2

Google App Engineから入手できるurlfetchを使用して、URLコンテンツをフェッチしています。しかし、500内部サーバーエラーが発生します。

これが私が使用している完全なアプリコードです:-

比較-hatke.py

import urllib2
from google.appengine.api import urlfetch
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
import datetime

class MainPage(webapp.RequestHandler):
    def curlTry:
        url = "http://www.google.com/"
        result = urlfetch.fetch(url)
        if result.status_code == 200:
            print(result.content)

application = webapp.WSGIApplication([('/', MainPage)],debug=True)


def main():
    run_wsgi_app(application)

if __name__ == '__main__':
    main()

app.yaml

application: compare-hatke
version: 3
runtime: python27
api_version: 1
threadsafe: false

handlers:
- url: /.*
  script: compare-hatke.app

これがエラーログです。彼らが言及している構文エラーを理解できません

  Traceback (most recent call last):
  File "/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 196, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 269, in _LoadHandler
    raise ImportError('%s has no attribute %s' % (handler, name))
ImportError: <module 'compare-hatke' from '/base/data/home/apps/s~compare-hatke/3.365290288779373200/compare-hatke.pyc'> has no attribute app

私が行方不明になっている場所を教えてください。ありがとう !

4

2 に答える 2

2

クラスの Python メソッドは、それが属するインスタンスを識別するために、関数定義で self パラメーターを参照する必要があります。これは基本的な構文エラーです。

それを修正しても、MainPage クラスが GET 要求を処理できるようにルーティングをセットアップする必要があります。これは、GAE で get メソッドを使用することによって最も簡単に実行できます。これが機能したら、ドキュメントに他の方法が示されます。

これを試して:

class MainPage(webapp.RequestHandler):
    def get(self): # responds to http GET, and adds self parameter
        url = "http://www.google.com/"
        result = urlfetch.fetch(url)
        if result.status_code == 200:
            print(result.content)
于 2013-02-14T03:20:21.873 に答える
2

main() メソッドで python2.5 スタイルのアプリ定義を使用しています。

2.7 のチュートリアルhttps://developers.google.com/appengine/docs/python/gettingstartedpython27/helloworldに再度アクセスする必要があります。アプリは次のようになります。

import urllib2
from google.appengine.api import urlfetch
from google.appengine.ext import webapp2

import datetime

class MainPage(webapp2.RequestHandler):
    def curlTry(self):
        url = "http://www.google.com/"
        result = urlfetch.fetch(url)
        if result.status_code == 200:
           self.response.write(result.content)

app = webapp2.WSGIApplication([('/', MainPage)],debug=True)

app.yaml 定義と一致するようにします。app.yaml は、どこかで定義する必要がcompare-hatke.appあることを意味します (私の例のように)compare-hatke.pyapp

さらに、2.7でwebapp2を使用する必要があり、curlTryクラスメソッドがどのように呼び出されるかはわかりませんが、それはあなたの質問とは別の問題です.

ここでいくつかのビットが欠けているため、ゼロから始めて 2.7 チュートリアルを実行することをお勧めします。

response.write を使用する必要があることを反映するようにコードを修正し、ハンドラーをクラス メソッドではなくインスタンス メソッドにしました。ただし、現在の app.yaml は、投稿された app.yaml と現在のコードに基づいて、GET/POST リクエストを curlTry にマップしません。ここにリンクしたチュートリアルをもう一度見てください。

T

于 2013-02-14T05:49:08.997 に答える