forked from alecmuffett/real-world-onion-sites
-
Notifications
You must be signed in to change notification settings - Fork 0
/
get-securedrop-csv.py
executable file
·39 lines (34 loc) · 1.24 KB
/
get-securedrop-csv.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/bin/env python3
import csv
import pprint
import json
import requests
import html
output_csv = 'securedrop-api.csv'
sd_url = 'https://securedrop.org/api/v1/directory/'
fieldnames = "flaky category site_name onion_name onion_url proof_url comment".split()
def xx(thing, key):
val = thing.get(key, None) or '' # catches instance where key=existing and val=None
return html.escape(val)
def push(stack, entry):
method = 'http' # this needs some discussion with Securedrop
result = dict()
result['flaky'] = ''
result['category'] = 'securedrop'
result['site_name'] = xx(entry, 'title')
result['onion_url'] = '{0}://{1}'.format(method, xx(entry, 'onion_address'))
result['onion_name'] = xx(entry, 'onion_name')
result['proof_url'] = xx(entry, 'landing_page_url')
result['comment'] = 'via: {}'.format(sd_url)
stack.append(result)
if __name__ == '__main__':
session = requests.Session()
response = session.get(sd_url)
data = response.json()
# pprint.pprint(data)
entries = []
for entry in data: push(entries, entry)
with open(output_csv, 'w', newline='') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(entries)