isp2csv.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import csv
  2. import json
  3. import requests
  4. # CSV output
  5. csv_output = csv.writer(open("isp.csv", "wb+"))
  6. csv_output.writerow([
  7. "Name",
  8. "Short name",
  9. "Website",
  10. "email",
  11. "Creation date",
  12. "Covered areas",
  13. "Members count",
  14. "Subscribers count",
  15. "FFDN member since",
  16. "Logo url"
  17. ])
  18. # API endpoint
  19. url = 'https://db.ffdn.org/api/v1/isp/'
  20. params = dict(
  21. per_page=100
  22. )
  23. # Call API
  24. resp = requests.get(url=url, params=params)
  25. data = json.loads(resp.text)
  26. # Loop through ISPs
  27. for isp in data["isps"]:
  28. if isp["is_ffdn_member"]:
  29. # Mix coveredAreas as a string
  30. coveredAreas = []
  31. for area in isp["ispformat"]["coveredAreas"]:
  32. coveredAreas.append('{areas} ({tech})'.format(
  33. areas=area["name"].encode('UTF-8','ignore'),
  34. tech=", ".join(area["technologies"]).encode('UTF-8','ignore')
  35. ))
  36. # ISP row
  37. csv_output.writerow([
  38. isp["ispformat"]["name"].encode('UTF-8','ignore'),
  39. isp["ispformat"]["shortname"].encode('UTF-8','ignore') if 'shortname' in isp["ispformat"] else "",
  40. isp["ispformat"]["email"].encode('UTF-8','ignore') if 'email' in isp["ispformat"] else "",
  41. isp["ispformat"]["creationDate"].encode('UTF-8','ignore') if 'creationDate' in isp["ispformat"] else "",
  42. isp["ispformat"]["website"].encode('UTF-8','ignore') if 'website' in isp["ispformat"] else "",
  43. " ".join(coveredAreas),
  44. isp["ispformat"]["memberCount"] if 'memberCount' in isp["ispformat"] else "",
  45. isp["ispformat"]["subscriberCount"] if 'subscriberCount' in isp["ispformat"] else "",
  46. isp["ispformat"]["ffdnMemberSince"].encode('UTF-8','ignore') if 'ffdnMemberSince' in isp["ispformat"] else "",
  47. isp["ispformat"]["logoURL"].encode('UTF-8','ignore') if 'logoURL' in isp["ispformat"] else "",
  48. ])