Ver Mensaje Individual
  #4 (permalink)  
Antiguo 05/01/2014, 17:09
Avatar de 23r9i0
23r9i0
 
Fecha de Ingreso: noviembre-2008
Ubicación: Catalonia
Mensajes: 203
Antigüedad: 15 años, 5 meses
Puntos: 33
Respuesta: leer multiples json, comprobar url, crear json

Tengo un par de dudas, problemas

- El script tarda aprox un minuto en completarse, diria que es mucho.
- Como puedo ordenar el json para que este ordenado por las categorias como lo tengo en existing.

Código Python:
Ver original
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import os, fnmatch, json, requests
  4.  
  5. json_files = []
  6. existing = {'Serif':[], 'Sans Serif':[], 'Display':[], 'Handwriting':[]} # Categorias
  7. include = ['name', 'fonts', 'fullName', 'style', 'weight', 'subsets']
  8.  
  9. def deleted_items(data, sub, inc):
  10.     for d in data.keys():
  11.         if not d in inc:
  12.             del(data[d])
  13.         if d == sub:
  14.             for subdata in data[d]:
  15.                 for x in subdata.keys():
  16.                     if not x in inc:
  17.                         del(subdata[x])
  18.     return data
  19.  
  20. for r, d, f in os.walk('googlefontdirectory'):
  21.     for p in fnmatch.filter(f, 'METADATA.json'):
  22.         json_files.append(os.path.join(r, p))
  23.  
  24. for filename in json_files: # len(json_files) = 724
  25.     with open(filename, 'rb') as f:
  26.         try:
  27.             data = json.load(f)
  28.             name = data['name'].replace(' ', '+')
  29.             url = 'http://www.google.com/fonts/specimen/' + name
  30.             resp = requests.head(url)
  31.             if 200 == resp.status_code:
  32.                 cat = data['category']
  33.                 data = deleted_items(data, 'fonts', include)
  34.                 existing[cat].append(data)
  35.         except ValueError:
  36.             pass
  37.  
  38. with open('existing.json', 'wb') as f:
  39.     json.dump(existing, f, indent=2)

Como vereis estoy recorriendo el directorio del googlefontdirectory creado mediante mercurial (hg) y al ser diferente del directorio de google fonts tengo que comprobar que fuente esta disponible para añadirla al json y luego elimino el contenido innecesario para no hacer un json mas grande de lo que deberia.

Última edición por 23r9i0; 05/01/2014 a las 17:16 Razón: Extender post