|
12 | 12 |
|
13 | 13 | projectsCsvFile = os.path.dirname(os.path.realpath(__file__))+'/../../website/data/projects.json'
|
14 | 14 |
|
15 |
| -landscapeBaseURL = 'https://landscape.netlify.app' |
16 |
| -landscapeHostedProjects = landscapeBaseURL+'/api/items?project=hosted' |
17 |
| -landscapeSingleItem = landscapeBaseURL+'/data/items/{}.json' |
| 15 | +landscapeBaseURL = 'https://landscape.cncf.io/api/projects/all.json' |
18 | 16 |
|
19 | 17 | # add an entry at the top as the header. unfortunately, we can't have comments in JSON files
|
20 | 18 | csvRows = [{
|
|
23 | 21 | "project": "AUTOGENERATED"
|
24 | 22 | }]
|
25 | 23 |
|
26 |
| -with urllib.request.urlopen(landscapeHostedProjects) as hostedProjectsResponse: |
27 |
| - for projectStage in json.load(hostedProjectsResponse): |
28 |
| - for project in projectStage['items']: |
29 |
| - with urllib.request.urlopen(landscapeSingleItem.format(project['id'])) as singleItemResponse: |
30 |
| - projectData = json.load(singleItemResponse) |
31 |
| - print("Processing {}...".format(projectData['name'])) |
32 |
| - csvRows.append({ |
33 |
| - 'name': projectData['name'], |
34 |
| - 'path': projectData['path'].split(' / ')[1] if 'path' in projectData else None, |
35 |
| - 'description': projectData['description'] if 'description' in projectData else None, |
36 |
| - 'homepage_url': projectData['homepage_url'] if 'homepage_url' in projectData else None, |
37 |
| - 'project': projectData['project'] if 'project' in projectData else None, |
38 |
| - 'repo_url': projectData['repo_url'] if 'repo_url' in projectData else None, |
39 |
| - 'logo': projectData['href'] if 'href' in projectData else None, |
40 |
| - 'twitter': projectData['twitter'] if 'twitter' in projectData else None, |
41 |
| - 'crunchbase': projectData['crunchbase'] if 'crunchbase' in projectData else None, |
42 |
| - 'chat_channel': projectData['extra']['chat_channel'] if 'extra' in projectData and 'chat_channel' in projectData['extra'] else None, |
43 |
| - 'accepted': projectData['extra']['accepted'] if 'extra' in projectData and 'accepted' in projectData['extra'] else None, |
44 |
| - 'dev_stats_url': projectData['extra']['dev_stats_url'] if 'extra' in projectData and 'dev_stats_url' in projectData['extra'] else None, |
45 |
| - 'artwork_url': projectData['extra']['artwork_url'] if 'extra' in projectData and 'artwork_url' in projectData['extra'] else None, |
46 |
| - 'stack_overflow_url': projectData['extra']['stack_overflow_url'] if 'extra' in projectData and 'stack_overflow_url' in projectData['extra'] else None, |
47 |
| - 'blog_url': projectData['extra']['blog_url'] if 'extra' in projectData and 'blog_url' in projectData['extra'] else None, |
48 |
| - 'mailing_list_url': projectData['extra']['mailing_list_url'] if 'extra' in projectData and 'mailing_list_url' in projectData['extra'] else None, |
49 |
| - 'slack_url': projectData['extra']['slack_url'] if 'extra' in projectData and 'slack_url' in projectData['extra'] else None, |
50 |
| - 'gitter_url': projectData['extra']['gitter_url'] if 'extra' in projectData and 'gitter_url' in projectData['extra'] else None, |
51 |
| - 'youtube_url': projectData['extra']['youtube_url'] if 'extra' in projectData and 'youtube_url' in projectData['extra'] else None, |
52 |
| - 'language': projectData['github_data']['languages'][0]['name'] if 'github_data' in projectData and 'languages' in projectData['github_data'] and len(projectData['github_data']['languages']) > 0 else None |
53 |
| - }) |
| 24 | +with urllib.request.urlopen(landscapeBaseURL) as hostedProjectsResponse: |
| 25 | + for project in json.load(hostedProjectsResponse): |
| 26 | + print("Processing {}...".format(project['name'])) |
| 27 | + |
| 28 | + repo_url = None |
| 29 | + language = None |
| 30 | + if 'repositories' in project and len(project['repositories']) > 0: |
| 31 | + for repo in project['repositories']: |
| 32 | + if repo['primary']: |
| 33 | + repo_url = repo['url'] |
| 34 | + if len(repo['languages']) > 0: |
| 35 | + largest_value = max(repo['languages'].values()) |
| 36 | + for key, value in repo['languages'].items(): |
| 37 | + if value == largest_value: |
| 38 | + language = key |
| 39 | + # only use the information from the first "primary" repository |
| 40 | + break |
| 41 | + |
| 42 | + csvRows.append({ |
| 43 | + 'name': project['name'], |
| 44 | + 'path': project['subcategory'] if 'subcategory' in project else None, |
| 45 | + 'description': project['description'] if 'description' in project else None, |
| 46 | + 'homepage_url': project['homepage_url'] if 'homepage_url' in project else None, |
| 47 | + 'project': project['maturity'] if 'maturity' in project else None, |
| 48 | + 'repo_url': repo_url if repo_url else None, |
| 49 | + 'logo': project['logo_url'] if 'logo_url' in project else None, |
| 50 | + 'twitter': project['twitter_url'] if 'twitter_url' in project else None, |
| 51 | + 'crunchbase': project['crunchbase_url'] if 'crunchbase_url' in project else None, |
| 52 | + 'chat_channel': project['chat_channel'] if 'chat_channel' in project else None, |
| 53 | + 'accepted': project['accepted_at'] if 'accepted_at' in project else None, |
| 54 | + 'dev_stats_url': project['devstats_url'] if 'devstats_url' in project else None, |
| 55 | + 'artwork_url': project['artwork_url'] if 'artwork_url' in project else None, |
| 56 | + 'stack_overflow_url': project['stack_overflow_url'] if 'stack_overflow_url' in project else None, |
| 57 | + 'blog_url': project['blog_url'] if 'blog_url' in project else None, |
| 58 | + 'mailing_list_url': project['mailing_list_url'] if 'mailing_list_url' in project else None, |
| 59 | + 'slack_url': project['slack_url'] if 'slack_url' in project else None, |
| 60 | + 'gitter_url': project['gitter_url'] if 'gitter_url' in project else None, |
| 61 | + 'youtube_url': project['youtube_url'] if 'youtube_url' in project else None, |
| 62 | + 'language': language if language else None |
| 63 | + }) |
54 | 64 |
|
55 | 65 | json_object = json.dumps(csvRows, indent=4)
|
56 | 66 |
|
|
0 commit comments