\n
Code:
\nimport http.client\nimport json\nimport csv\nimport os\n\nconn = http.client.HTTPSConnection("api.betterimpact.com")\nconn1 = http.client.HTTPSConnection("api.betterimpact.com")\n\nif os.path.exists("CSVVolunteerOutput.csv"):\n os.remove("CSVVolunteerOutput.csv") \n\nheaders = {\n 'Authorization': 'Basic XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',\n 'Cookie': '; TrackingClientId=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'\n}\n\nconn.request("GET", "/v1/enterprise/users/?volunteer_status=accepted&include_custom_fields=false&include_qualifications=false&page_Size=250&include_verified_volunteers_background_check_results=false", headers=headers)\nres = conn.getresponse()\ndata = json.load(res)\n\nconn1.request("GET", "/v1/enterprise/users/?volunteer_status=accepted&include_custom_fields=false&include_qualifications=false&page_Size=250&include_verified_volunteers_background_check_results=false&page_number=0", headers = headers)\nres1 = conn1.getresponse()\ndata1 = json.load(res1)\n\nif data == None or data == "" or len(data) == 0:\n print("Check API Credentials..")\n exit()\n\n\nvolunteer_status = "Accepted"\npageNum = 0\n_page_count = data1['header']['page_count']\n\nwhile True:\n pageNum+=1\n with open('CSVVolunteerOutput.csv', 'a', newline='') as file:\n writer = csv.writer(file)\n\n writer.writerow(["SyncID", "FirstName", "LastName", "Jobtitle", "Division", "BusinessUnit", "RegionArea", "WorkLocation", "Department", "WorkEmailAddressPrimary",\n "PersonalEmailAddress", "PersonalMobilePhonePrimary", "WorkCountry"])\n\n for user in data['users']:\n _id = user['user_id']\n _firstName = user['first_name']\n _surName = user['last_name']\n _emailAddress = user['email_address']\n _emailAddressSec = user['secondary_email_address']\n _cellPhone = user['cell_phone']\n _country = user['country']\n for details in user['memberships']:\n _orgName = details['organization_name']\n _volunteerStatus = details['volunteer_status']\n if volunteer_status == _volunteerStatus:\n writer.writerow([_id, _firstName, _surName, "Volunteer", "", "", "", _orgName, "", _emailAddress,\n _emailAddressSec, _cellPhone, _country])\n\n if pageNum > int(_page_count):\n break\n else:\n conn.request("GET", "/v1/enterprise/users/?volunteer_status=accepted&include_custom_fields=false&include_qualifications=false&page_Size=250&include_verified_volunteers_background_check_results=false&page_number="+str(pageNum), headers=headers)\n res = conn.getresponse()\n data = json.load(res) \n\nprint("CSV file created successfully")\n\n
\nAPI Documentation is here: https://www.betterimpact.com/volunteer-impact-help/it-api/
\nThanks.
\n","author":{"@type":"Person","name":"Karu3103"},"upvoteCount":1,"answerCount":1,"acceptedAnswer":null}}Reputation: 81
I'm trying to run a Python code where I'm calling an API to extract the data and upload to a CSV file. The CSV file is extracting fine, but throws an error. Can someone please let me know what I might be dong wrong here?
Error Message:
Code:
import http.client
import json
import csv
import os
conn = http.client.HTTPSConnection("api.betterimpact.com")
conn1 = http.client.HTTPSConnection("api.betterimpact.com")
if os.path.exists("CSVVolunteerOutput.csv"):
os.remove("CSVVolunteerOutput.csv")
headers = {
'Authorization': 'Basic XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
'Cookie': '; TrackingClientId=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
}
conn.request("GET", "/v1/enterprise/users/?volunteer_status=accepted&include_custom_fields=false&include_qualifications=false&page_Size=250&include_verified_volunteers_background_check_results=false", headers=headers)
res = conn.getresponse()
data = json.load(res)
conn1.request("GET", "/v1/enterprise/users/?volunteer_status=accepted&include_custom_fields=false&include_qualifications=false&page_Size=250&include_verified_volunteers_background_check_results=false&page_number=0", headers = headers)
res1 = conn1.getresponse()
data1 = json.load(res1)
if data == None or data == "" or len(data) == 0:
print("Check API Credentials..")
exit()
volunteer_status = "Accepted"
pageNum = 0
_page_count = data1['header']['page_count']
while True:
pageNum+=1
with open('CSVVolunteerOutput.csv', 'a', newline='') as file:
writer = csv.writer(file)
writer.writerow(["SyncID", "FirstName", "LastName", "Jobtitle", "Division", "BusinessUnit", "RegionArea", "WorkLocation", "Department", "WorkEmailAddressPrimary",
"PersonalEmailAddress", "PersonalMobilePhonePrimary", "WorkCountry"])
for user in data['users']:
_id = user['user_id']
_firstName = user['first_name']
_surName = user['last_name']
_emailAddress = user['email_address']
_emailAddressSec = user['secondary_email_address']
_cellPhone = user['cell_phone']
_country = user['country']
for details in user['memberships']:
_orgName = details['organization_name']
_volunteerStatus = details['volunteer_status']
if volunteer_status == _volunteerStatus:
writer.writerow([_id, _firstName, _surName, "Volunteer", "", "", "", _orgName, "", _emailAddress,
_emailAddressSec, _cellPhone, _country])
if pageNum > int(_page_count):
break
else:
conn.request("GET", "/v1/enterprise/users/?volunteer_status=accepted&include_custom_fields=false&include_qualifications=false&page_Size=250&include_verified_volunteers_background_check_results=false&page_number="+str(pageNum), headers=headers)
res = conn.getresponse()
data = json.load(res)
print("CSV file created successfully")
API Documentation is here: https://www.betterimpact.com/volunteer-impact-help/it-api/
Thanks.
Upvotes: 1
Views: 775
Reputation: 143056
I can't run code so I'm guessing.
You have data = ...
in two places:
while
-loopwhile
-looplike this
# --- first `data` ---
conn.request(...)
res = conn.getresponse()
data = json.load(res)
# ... code ...
while True:
# ... code ...
for user in data['users']:
# ... code ...
if pageNum > int(_page_count):
break
else:
# --- second `data` ---
conn.request(...)
res = conn.getresponse()
data = json.load(res)
It seems you checked users
in data
only after first data = ...
but you didn't check it for second data = ...
but it can gives you data
without users
.
You could check both in one place
if "users" in data:
for user in data['users']:
# ... code ...
By the way: if you want to append to file in loop then better append headers before loop. I current version you add headers before every row with data. OR you could append all data to list and after loop write all at once
Upvotes: 1