api.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # -*- coding: utf-8 -*-
  2. from __future__ import absolute_import, unicode_literals
  3. import json
  4. def parse_line(line, category):
  5. name = line.split('](')[0][3:]
  6. url = line.split('](')[1].split(')')[0]
  7. description = '' if line[-1] == ')' else line.split(') ')[1][2:]
  8. return {
  9. 'name': name,
  10. 'description': description,
  11. 'url': url,
  12. 'category': category,
  13. }
  14. def parse_section(section, category=''):
  15. return [parse_line(l, category) for l in section.split('\n')]
  16. def parse_subsections(section):
  17. subsections = section.split('### ')[1:]
  18. items = []
  19. for subsection in subsections:
  20. split_section = subsection.split('\n\n')
  21. section_title = split_section[0]
  22. items += parse_section(split_section[1], section_title)
  23. return items
  24. def cut_section(start):
  25. return readme.split('## %s\n\n' % start)[1].split('\n\n## ')[0]
  26. def parse_readme(readme):
  27. return {
  28. 'apps': parse_subsections(cut_section('Apps')),
  29. 'tools': parse_section(cut_section('Tools')),
  30. 'resources': parse_subsections(cut_section('Resources')),
  31. 'sites': parse_section(cut_section('Open-source sites')),
  32. }
  33. if __name__ == '__main__':
  34. readme = open('README.md', 'r').read()
  35. readme_payload = parse_readme(readme)
  36. with open('./dist/api/v1/readme.json', mode='w+', encoding='utf-8') as f:
  37. f.write(json.dumps(readme_payload, indent=True))