2017-01-01 9 views
1

Я пытаюсь выяснить, как хранить несколько URL-ссылок в ключ массива python или любые другие методы, пока я могу хранить несколько ссылок URL.

При использовании данных, каждое сообщение может содержать или не содержать несколько объектов изображения «фотографий» (в JSON), поэтому я хочу хранить каждый объект почтового изображения.Tumblr Python сохранение почтовых фотографий URL-адреса от JSON

E.g. данных из 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" 
        } 
        ] 
       } 
      ] 
     } 
     ] 

An мой питона до сих пор:

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» теперь отсутствует все сообщения

+0

Попробуйте заменить 'URL' с 2. Это работает? –

ответ

0

Я не вижу minimal working example (мне нужно увидеть JSON-синтаксический анализ), но мне кажется, что вы пытаетесь создать несколько слоев словарных ключей в одном выражении. Python позволяет вам одновременно инициализировать один ключ/индекс за счет использования __setitem__. Итак, вам нужно будет инициализировать ...['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 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 

 Смежные вопросы

  • Нет связанных вопросов^_^