Итак, ранее я сделал flask приложение для онлайн-эксперимента. Я развернул его в Heroku, чтобы сделать это онлайн. Я надеялся, что смогу провести существующий опрос по квалификациям под общей учетной записью, встроить этот опрос в html веб-приложения и каким-то образом легко извлечь ответ из чьего-либо заполненного опроса, а затем сохранить его в моем приложении flask. Мне было немного сложнее, как человеку, который не очень интенсивно работал с rest apis (хотя у меня достаточно опыта работы с webdev). Несмотря на это, я чувствую, что это действительно важно, чтобы попытаться упростить, особенно для психологов и людей, занимающихся социальными и поведенческими науками, которые могут не иметь большого опыта работы с webdev и хотят провести простой онлайн-эксперимент, связанный с опросом по квалификациям.
В последние несколько дней я спускался по кроличьей норе, просматривая документы по квалификациям, просто пытаясь понять, что можно сделать. Этот пример в их документации получения ответов в реальном времени был у меня на уме: https://api.qualtrics.com/docs/listen-to-and-retrieve-responses-in-real-time
В этом руководстве обсуждается следующее:
Здесь мы показываем как создать прослушиватель событий в Qualtrics, который будет запускать обратный вызов webhook при получении ответа на опрос. Таким образом, пользователь может сразу же отправить эти ответы в любую систему, которую он sh подключит, как только они будут введены в Qualtrics.
У них есть большие фрагменты кода для создания небольшого python приложения. что может сделать это слушая. Они не имеют ничего адаптированного к Flask или heroku, хотя этот код создает свой собственный экземпляр сервера и использует предварительно настроенный URL-адрес publi c для приложения. Я хочу выяснить, как я должен адаптировать это к Flask и Heroku.
Вот вопросы, которые возникли.
- Q: Хотя веб-зацепкам обычно нужно Ваше приложение должно быть доступно по общедоступной ссылке. Сначала я хочу внедрить эту функцию локально и протестировать ее локально, а затем развернуть ее на heroku. Как я могу это сделать?
- A: Я нашел этот вопрос и заставил приложение работать публично на моем IPv4-адресе, но примите во внимание предостережения безопасности. Настройка Flask dev-сервера, чтобы он был виден в сети
- Q: Как мне создать подписку на событие qualtrics? В учебнике по квалитрике это делается с помощью вызова curl. Это не похоже на github api, где, например, я могу ввести URL полезной нагрузки для подписки на событие в GUI.
- A: Я нашел эту статью https://blog.heroku.com/the_new_heroku_1_process_model_procfile. Это говорит о том, что
heroku run curl
из каталога, содержащего мое приложение heroku, должно работать. Так что я сделаю это, как только буду готов развернуть эти изменения на героку. Но сейчас, использование вызова curl
в моей оболочке на моей локальной машине должно работать, и я надеюсь, что передача моего ipv4
url в качестве publication_url
даст мне то, что мне нужно. - Q: Хорошо. Так какой код мне нужен сейчас в моем файле
app.py
? Как мне подключить это к конечной точке моего flask приложения и получить идентификатор ответа? Как мне адаптировать код из учебника по квалификациям?
Последний вопрос - единственное, в чем я не уверен, я действительно надеюсь, что все получится. Я следовал этому руководству по использованию flask и github api / создание github webhook - https://www.youtube.com/watch?v=YMBzb_RBDAA. Я попытался создать URL-адрес конечной точки /api/linkqualtrics
@app.route('/api/linkqualtrics', methods=['POST'])
def get_qualtrics_responseid():
if request.headers['Content-Type'] == 'application/json':
my_info = json.dumps(request.json)
print(my_info)
return my_info
Так что я собираюсь проверить это локально ... Но если это не сработает, я действительно не буду знать, как отлаживать или как действовать, и я чувствую, что это должно быть осуществимо. Тем не менее, я создал этот вопрос и включил каждый шаг, который я собираюсь предпринять, чтобы реализовать этот webhook, просто чтобы я не просто опубликовал это с полностью нулевым кодом. Если какой-либо из этих шагов окажется неудачным, мне нужно указать лучшее направление для возможного обходного пути.