Войдите на сайт, войдя в аккаунт Google используя Python
Я делаю веб-сайт, который составляет графики количества людей, присутствующих в группах (с www.codecamy.com).
Для достижения этого я пришел с планом.
У меня будет сервер, который будет каждые 30 секунд опрашивать страницу групп CodeCademy ( http://www.codecademy.com/groups) и извлекать необходимую информацию из этого HTML-кода.
Затем, когда клиент подключается к моему веб-сайту, сервер сообщит ему эту информацию, а затем клиент будет использовать http://www.chartjs.org/docs/ или http://www.jqplot.com/ для рисования. график, основанный на этой информации.
Тем не менее, есть большая проблема. Если вы нажали на любую из ссылок с CodeCademy, то поняли, что вам нужна учетная запись, чтобы действительно увидеть веб-сайт. Это может быть учетная запись Facebook, учетная запись Google или Twitter.
Итак, короткая история, если я хочу получить доступ к странице с информацией о группах, мне нужно иметь учетную запись Bot для моего сервера, и я должен научить свой сервер входить в эту учетную запись.
Таким образом, я создал фиктивную учетную запись в gmail, которая называется codecademybot, и я хочу, чтобы мой сервер использовал эту учетную запись для входа в codecademy, чтобы он мог видеть содержимое этой страницы.
Следуя краткому руководству по Python, которое связывает меня с Google +, теперь у меня также есть код для взаимодействия с ним.
Однако, несмотря на все это, я до сих пор не имею ни малейшего представления о том, как взаимодействовать с сайтом. У меня есть следующие вопросы:
- Как я могу определить, вошел ли я в свою учетную запись Google?
- Как мне подключиться к этой учетной записи, чтобы я мог получить доступ к странице?
- Есть ли специальная ссылка для входа на этот сайт?
Я совершенно заблудился и был бы признателен за любую возможную помощь.
1 ответ
Не позволяйте всем образцам кода и инструкциям вводить вас в заблуждение. Они предназначены для более сложных случаев.
- Это не авторизация oauth2, это аутентификация oauth2
- Вы не клиент с clientID и секретом. Codecademy - это клиент с clientID и секретом. Ваша учетная запись codecademybot просто является пользователем.
Это означает, что вам нужно только автоматизировать то, что обычные пользователи делают при входе в codecademy. Воспроизведите то взаимодействие, которое в браузере пару раз прослушивает инструмент разработки (инструмент разработки IE, FireBug и т. Д.), И посмотрите на разговор HTTP-запросов.
Это то, что вы хотите подражать.
Из того, что я вижу,
- Разговор начинается с отправки запроса на http://codecademy.com/auth/google_oauth2.
- Запрос перенаправляется на URL-адрес https в Google.
- Если я ранее вошел в Google, пара куки отправляется вместе, и я проходил проверку подлинности. Запрос отправляется обратно в codecademy redirect_url по адресу http://www.codecademy.com/auth/google_oauth2/callback с кодом аутентификации oauth2 в качестве параметра.
- Предположительно, Codecademy и Google Chat, для этого требуется около трех секунд.
- Они согласны, что я и два печенья (
remember_user_token
а также_session_id
) установить в моем браузере, прежде чем я буду перенаправлен на http://www.codecademy.com/
Этот последний бит, я думаю, интересен. Как насчет того, чтобы вручную войти в систему с помощью браузера, прослушать разговор и скопировать эти два файла cookie в свой автоматический код. Посмотрите, достаточно ли они в качестве маркеров аутентификации и позволяют ли вы получать данные с веб-сайта.
Если нет, то я настоятельно рекомендую ответ @CrisBee21. Будем надеяться, что pyCurl сможет эмулировать браузер достаточно хорошо, чтобы сделать разговор за вас.
Еще одна вещь, когда я просматриваю сайт, я вижу один запрос API REST, а именно: http://www.codecademy.com/api/v1/notifications/userid/ unread_count? Authentication_token=некоторый токен
Переход на http://www.codecademy.com/api/v1/users/userid/? Authentication_token=токен дает мне больше информации о себе
http://www.codecademy.com/api/v1/users/userid/ groups? authentication_token=токен дает мне группы, в которых я нахожусь.
Если у вас есть больше документации по API REST кодекамы, вы можете попробовать и взять ее оттуда. Я не смог найти никакой документации, я делаю это по ходу дела.