Tumblr Python 存储来自 JSON 的帖子照片网址



我正在尝试弄清楚如何将多个 url 链接存储到 python 数组键或任何其他方法中,只要我可以存储多个 url 链接。

在我使用的数据中,每个帖子可能包含也可能不包含多个"照片"图像对象(以 JSON 格式),因此我想存储每个帖子图像对象。

例如,来自 https://www.tumblr.com/docs/en/api/v2
的数据

"posts": [
         {
            "blog_name": "derekg",
            "id": 7431599279,
            "post_url": "http://derekg.org/post/7431599279",
            "type": "photo",
            "date": "2011-07-09 22:09:47 GMT",
            "timestamp": 1310249387,
            "format": "html",
            "reblog_key": "749amggU",
            "tags": [],
            "note_count": 18,
            "caption": "<p>my arm is getting tired.</p>",
            "photos": [
               {
                  "caption": "",
                  "alt_sizes": [
                     {
                        "width": 1280,
                        "height": 722,
                        "url": "http://derekg.org/photo/1280/7431599279/1/
                           tumblr_lo36wbWqqq1qanqww"
                     },
                     {
                        "width": 500,
                        "height": 282,
                        "url": "http://30.media.tumblr.com/
                           tumblr_lo36wbWqqq1qanqwwo1_500.jpg"
                     },
                     {
                        "width": 400,
                        "height": 225,
                        "url": "http://29.media.tumblr.com/
                           tumblr_lo36wbWqqq1qanqwwo1_400.jpg"
                     },
                     {
                        "width": 250,
                        "height": 141,
                        "url": "http://26.media.tumblr.com/
                           tumblr_lo36wbWqqq1qanqwwo1_250.jpg"
                     },
                     {
                        "width": 100,
                        "height": 56,
                        "url": "http://24.media.tumblr.com/
                           tumblr_lo36wbWqqq1qanqwwo1_100.jpg"
                     },
                     {
                        "width": 75,
                        "height": 75,
                        "url": "http://30.media.tumblr.com/
                           tumblr_lo36wbWqqq1qanqwwo1_75sq.jpg"
                     }
                  ]
               }
            ]
         }
      ]

到目前为止我的蟒蛇:

raw_json_data = requests.get('api.tumblr.com/v2/blog/{blog-identifier}/likes?api_key={key}')
data = raw_json_data.json()
data_format = data['response']['liked_posts']
number = 0
dat = [{} for i in range(len(data['response']['liked_posts']))]
for posts in data_format:
    #print(posts['blog_name'])
    #print(posts['timestamp'])
    g = 0
    dat[number]['blog_name'] = posts['blog_name']
    dat[number]['tags'] = posts['tags']
    dat[number]['timestamp'] = posts['timestamp']
    if len(posts['photos']) > 1:
    dat[number]['url'] = {}
    g = 0
    for g, u in range(len(posts['photos'])):
        dat[number]['url'][g] = u['alt_sizes'][0]['url']
        g += 1
    number += 1
with open(json_storage, 'w') as outputFile:
    json.dump(dat, outputFile)

我现在收到一个错误,它仍然没有存储到我的 JSON 文件中,并且所有帖子中现在都缺少密钥"url"

我没有看到最小的工作示例(我需要看到 JSON 解析),但在我看来,您正在尝试在一个语句中创建多层字典键。由于依赖__setitem__,Python 一次只允许您初始化一个键/索引。因此,您需要先初始化...['url'],然后才能分配给...['url'][g]

dat[number]['url'][g] = ...也可以被认为是 ((dat[number])['url'])[g] = ... .现在,您应该能够看到在分配发生之前尝试执行的两个索引读取。

使用字典理解的部分示例(伪代码!):

for posts in JSON_DATA:
    #print(posts['blog_name'])
    #print(posts['timestamp'])
    dat[number]['blog_name'] = posts['blog_name']
    dat[number]['tags'] = posts['tags']
    dat[number]['timestamp'] = posts['timestamp']
    g = 0
    if len(posts['photos']) > 1:
        dat[number]['url'] = {k:v['alt_sizes'][0]['url'] for (k, v) in enumerate(posts['photos'])}

使用基本相同的 for 循环的替代示例(更多伪代码):

for posts in JSON_DATA:
    #print(posts['blog_name'])
    #print(posts['timestamp'])
    dat[number]['blog_name'] = posts['blog_name']
    dat[number]['tags'] = posts['tags']
    dat[number]['timestamp'] = posts['timestamp']
    g = 0
    if len(posts['photos']) > 1:
        dat[number]['url'] = {}
        for g, u in enumerate(posts['photos']):
            dat[number]['url'][g] = u['alt_sizes'][0]['url']
    number += 1

最新更新