我正在使用Flask中的应用程序并希望为用户添加Facebook个人资料照片。由于我有用户' Facebook ID,我发现通过Facebook Graph访问照片非常简单,它通过此URL返回JSON数据:
img_url = 'http://graph.facebook.com/%s/picture?width=%d&height=%d&redirect=false' \
% (fb_id, width, height)
这里是img_url应该返回的JSON数据:
{
"data": {
"height": 200,
"is_silhouette": false,
"url": "JPG_URL_HERE",
"width": 200
}
}
对于特定的图片网址,我使用Requests获取带有unicode对象的Python字典。
r = requests.get(img_url).json()
return r['data']['url'].encode('utf-8')
所有这些在Python解释器中都能正常工作,并返回带有图像URL的字符串。但是当我使用Vagrant中的代码运行应用程序时,我得到了数据'的KeyError。对于出了什么问题的任何想法?
File "/vagrant/app/templates/user/profile.html", line 1, in top-level template code
{% extends "base.html" %}
File "/vagrant/app/templates/base.html", line 38, in top-level template code
{% block content %}{% endblock %}
File "/vagrant/app/templates/user/profile.html", line 9, in block "content"
<p><img src="{{ current_user.picture(200, 200) }}"></p><br>
File "/vagrant/app/models.py", line 52, in picture
return r['data']['url'].encode('utf-8')
KeyError: 'data'
答案 0 :(得分:0)
在您的密码中:
r = requests.get(img_url).json()`
我认为r
可能会导致str
类型,因此您应该将其翻译成dict,如下所示:
import json
r = requests.get(img_url).json()
r_dict = json.loads(r)
return r_dict['data']['url'].encode('utf-8')
试一试。