0

私は次のコードを持っています:

from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
import tweepy

consumer_key=""
consumer_secret=""
access_key = ""
access_secret = "" 

def twitterfeed():
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_key, access_secret)
    api = tweepy.API(auth)
    statuses = tweepy.Cursor(api.friends_timeline).items(20)
    for status in statuses:
        return list(str(status.text))

この twitterfeed() メソッドは bash/console で動作し、私と購読者の最新のツイートを表示します。しかし、このツイートをページに表示したい場合:

if __name__ == '__main__':
    config = Configurator()
    config.add_route('hello', '{name}')
    config.add_view(twitterfeed(), route_name='hello')
    app = config.make_wsgi_app()
    server = make_server('0.0.0.0', 8080, app)
    server.serve_forever()

pyramid.exceptions.ConfigurationExecutionError: <type 'exceptions.AttributeError'>: 'list' object has no attribute '__module__' in: Line 24エラーが表示されます

どうすれば修正できますか?django の実際の例があれば、それが役に立ちます。

4

1 に答える 1

2

関数の結果ではなく、関数を登録する必要があります。

config.add_view(twitterfeed, route_name='hello')

それ以外の場合は、返されたリストtwitterfeedを代わりにビューとして登録しようとしています。

request関数もパラメーターを受け入れる必要があることに注意してください。また、応答オブジェクトも返す必要があります。次のように変更します。

from pyramid.response import Response

def twitterfeed(request):
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_key, access_secret)
    api = tweepy.API(auth)
    statuses =  tweepy.Cursor(api.friends_timeline).items(20)

    return Response('\n'.join([s.text.encode('utf8') for s in statuses]))

Python にデフォルトのエンコーディングを選択させるのではなく、自由にツイートを UTF8 にエンコードしました (ツイートに国際文字が含まれていると、UnicodeEncodeError 例外が発生します)。

続行する前に、ピラミッド ビューについてよくお読みください。

余談ですが、コマンドライン バージョンでは最初のツイートのみが個々の文字のリストとして返されました ( return list(str(status.text)))。

于 2013-01-27T12:53:51.133 に答える