【问题标题】:Tumblr Python storing of post photos urls from JSONTumblr Python 存储来自 JSON 的帖子照片 url
【发布时间】:2017-01-01 17:33:57
【问题描述】:

我试图弄清楚如何将多个 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”

【问题讨论】:

  • 尝试将 'url' 替换为 2。这样行吗?

标签: python arrays json tumblr


【解决方案1】:

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

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

使用dictionary comprehension的部分示例(伪代码!):

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

【讨论】:

    猜你喜欢
    • 2012-09-30
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    相关资源
    最近更新 更多