Last active
March 1, 2016 21:07
-
-
Save rclayton-the-terrible/a2514f9d1dca856b1acd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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