在Google App Engine调用Twitter API时遇库导入及路径配置问题
解决Google App Engine部署Twitter脚本的导入与模块问题
一、先搞定views.py的内容
你当前的main.py里引用了views.IndexHandler,所以views.py需要包含这个请求处理类,把你原有的Twitter请求逻辑整合进去就行。示例代码如下:
from google.appengine.ext import webapp import json import oauth2 as oauth class IndexHandler(webapp.RequestHandler): def get(self): # 补全你缺失的密钥 access_token = "3309947392-8Ynx4uOXC63dFM9yeABJDmfkhak5b9DyN9WeloJ" access_token_secret = "你的access_token_secret" consumer_key = "GEsMKJfyKfUMnh7lkiLRdPZfK" consumer_secret = "你的consumer_secret" consumer = oauth.Consumer(consumer_key, consumer_secret) token = oauth.Token(access_token, access_token_secret) client = oauth.Client(consumer, token) timeline_endpoint = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=whatsrelevancy&count=1" response, data = client.request(timeline_endpoint) # 将原始数据输出到页面 self.response.headers['Content-Type'] = 'application/json' self.response.out.write(data)
这样访问项目根路径时,就会执行Twitter API请求并返回原始数据了。
二、更优雅的路径重定向方式
你用fix_path.py的思路是对的,但GAE有更标准的第三方库处理方案:
- 确保你的项目目录结构如下:
你的项目目录/ main.py views.py app.yaml appengine_config.py lib/ oauth2/ # oauth2库的所有文件 - 在项目根目录创建
appengine_config.py,写入以下内容:
这样GAE启动时会自动加载这个配置,你在import sys import os.path # 把lib目录添加到Python的搜索路径 sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'lib'))views.py里直接写import oauth2 as oauth即可,不需要再用from lib import ...的写法,也省去了单独维护fix_path.py的麻烦。
三、更好的Twitter API调用方式
你当前用的oauth2库比较老旧,推荐使用tweepy——一个更简洁易用的Twitter API封装库,能帮你简化OAuth认证和请求逻辑:
- 把
tweepy安装到lib目录:pip install tweepy -t lib/ - 修改
views.py里的逻辑:
Tweepy会自动处理OAuth签名、JSON解析等细节,代码更简洁也更易维护。from google.appengine.ext import webapp import tweepy class IndexHandler(webapp.RequestHandler): def get(self): # 配置认证信息 auth = tweepy.OAuthHandler("你的consumer_key", "你的consumer_secret") auth.set_access_token("你的access_token", "你的access_token_secret") api = tweepy.API(auth) # 获取用户时间线 tweets = api.user_timeline(screen_name="whatsrelevancy", count=1) # 输出原始JSON数据 self.response.headers['Content-Type'] = 'application/json' self.response.out.write(tweets[0]._json)
四、关键注意事项
- 务必补全代码中缺失的
access_token_secret和consumer_secret,否则API请求会直接失败 - 部署前先用
dev_appserver.py本地测试,确认没有导入错误或认证问题 - 如果你使用的是GAE Python 3环境,不需要
appengine_config.py,直接把lib放在项目根目录即可(你的代码看起来是Python 2环境,因为用到了webapp模块)
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

