Skip to content

Instantly share code, notes, and snippets.

@rclayton-the-terrible
Last active March 1, 2016 21:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rclayton-the-terrible/a2514f9d1dca856b1acd to your computer and use it in GitHub Desktop.
Save rclayton-the-terrible/a2514f9d1dca856b1acd to your computer and use it in GitHub Desktop.
SURVEY_ID = "12345678"
HOST = "https://api.surveymonkey.net"
LAST_DATE_CHECKED = "2013-01-01 00:00:00"
# set up the two endpoint urls
respondent_uri = "%s/v2/surveys/get_respondent_list" % HOST
response_uri = "%s/v2/surveys/get_responses" % HOST
# set up the initial post data for respondent and responses
# endpoints
respondent_post_data = {}
respondent_post_data["survey_id"] = SURVEY_ID
respondent_post_data["fields"] = ["date_modified","status"]
respondent_post_data["start_modified_date"] = LAST_DATE_CHECKED
response_post_data = {}
response_post_data["survey_id"] = SURVEY_ID
# max modified date encountered
max_modified_respondent_date = LAST_DATE_CHECKED
# final responses output
output_response_list = []
respondents_cur_page = 1
while True:
respondent_post_data["page"] = respondents_cur_page
respondent_data = client.post(
respondent_uri,
data=json.dumps(respondent_post_data))
respondent_json = respondent_data.json()
if len(respondent_json["data"]["respondents"]) == 0:
break
respondent_ids = []
for respondent in respondent_json["data"]["respondents"]:
# keep track of the max modified date
if respondent["date_modified"] > max_modified_respondent_date:
max_modified_respondent_date = respondent["date_modified"]
# only want finished responses
if respondent["status"] == "completed":
respondent_ids.append(respondent["respondent_id"])
# get_responses can only take in 100 respondent_ids, we need to
# batch these requests in chunks of 100
start_pos = 0
respondent_count = len(respondent_ids)
while start_pos < respondent_count:
response_post_data["respondent_ids"] = respondent_ids[start_pos:start_pos + 100]
response_data = client.post(response_uri,
data=json.dumps(response_post_data))
response_json = response_data.json()
for response in response_json["data"]:
output_response_list.append(response)
start_pos += 100
respondents_cur_page += 1
# update LAST_DATE_CHECKED
LAST_DATE_CHECKED = max_modified_respondent_date
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment