-1

首先,我对python完全陌生。我是一名平面设计师,我需要为群组徽标获取群组成员的照片。我发现了这个: https ://github.com/lionaneesh/IIITD-Students-Collage 它几乎应该做我需要的事情,但显然我做错了什么并且它没有按预期工作。

当我执行这个脚本时:

import json
from urllib2 import urlopen


fp = open("test2.txt")
data = json.loads(fp.read())
fp.close()

user_photos = {} # id -> [User's Name, Photo URL]

for user in data["data"]:
    print user
    page = urlopen("http://graph.facebook.com/" + user["id"] + "?fields=picture")
    page_data = json.loads(page.read())
    photo_url = page_data["picture"]["data"]["url"]
    user_photos[user["id"]] = [user["name"], photo_url]

fp = open("user_photos.json", "w")
fp.write(json.dumps(user_photos))

我收到此错误:

Traceback (most recent call last):
 File "C:\test.py", line 11, in <module>
    for user in data["data"]:
KeyError: 'data'
>>> 

有人可以向我解释如何解决它或在哪里寻求帮助?

编辑:这是 text2.txt 中数据的外观:

{
  "id": "1390694364479028", 
  "members": {
    "data": [
      {
        "name": "Patryk Wiśniewski", 
        "administrator": false, 
        "id": "321297624692717"
      }, 
      {
        "name": "Backed PL", 
        "administrator": false, 
        "id": "1440205746235525"
      }, 

等等,与其他组成员信息

4

3 回答 3

1

KeyError表示 dict 对象中没有这样的键。因此,根据您的脚本,这意味着您的文件不包含这样的 JSON 数据结构。

{"data": {"id": 10000}, {"id": 20000}, {"id": 30000}}

如果您发布 的内容test2.txt或输出会有所帮助print(data)

编辑:根据你的 text2.txt 文件,你的程序流程应该是这样的

for user in data["members"]["data"]:
    print user
    page = urlopen("http://graph.facebook.com/" + user["id"] + "?fields=picture")
    page_data = json.loads(page.read())
    photo_url = page_data["picture"]["data"]["url"]
    user_photos[user["id"]] = [user["name"], photo_url]

您只需更改data["data"]data["members"]["data"]使您的脚本工作。

于 2014-05-31T19:10:55.957 回答
1

您可能只是在 test2.txt 中没有“数据”的 JSON 字段

于 2014-05-31T19:12:56.723 回答
0

查看文档,您的 txt 文件栏中的详细信息应该具有与以下内容完全相同的结构。

{
  "data": [
    {
      "name": "Arushi Jain", 
      "administrator": false, 
      "id": "100000582289046"
    }, 
    {
      "name": "Ajay Yadav", 
      "administrator": false, 
      "id": "100004213058283"
    }, 
    and so on ........

  ], 
  "paging": {
    "next": "https://graph.facebook.com/114462201948585/members?limit=5000&offset=5000&__after_id=712305377"
  }
}

{

 {
  "data": [                    # how yours should look
   {
        "name": "Patryk Wiśniewski",
        "administrator": false,
        "id": "321297624692717"
      },
      {
        "name": "Patryk Kurowski",
        "administrator": false,
        "id": "1429534777317507"
      },
      {
        "name": "Jan Konieczny",
        "administrator": false,
        "id": "852450774783365"
      }

  ], 
  "paging": {
    "next": "https://graph.facebook.com/114462201948585/members?limit=5000&offset=5000&__after_id=712305377"
  }
}

这是在循环中执行的第一件事,所以如果它不完全匹配,那么它将像在你的错误中那样失败。

于 2014-05-31T20:21:32.860 回答