Войдите на сайт, войдя в учетную запись Google с помощью Python

Я делаю веб-сайт, на котором отображаются графики количества людей, присутствующих в группах (с www.codecamy.com).

Чтобы достичь этого, я пришел с планом.

У меня будет сервер, который будет опрашивать страницу групп CodeCademy (http://www.codecademy.com/groups) каждые 30 секунд и получать необходимую информацию из этого HTML.

введите здесь описание изображения

Затем, когда клиент подключается к моему веб-сайту, сервер предоставит клиенту эту информацию, а затем клиент будет использовать либо http://www.chartjs.org/docs/ или http://www.jqplot.com/ для построения графика на основе этой информации.

введите здесь описание изображения

Однако есть большая проблема. Если вы щелкнули любую из ссылок CodeCademy, то поняли, что вам нужна учетная запись, чтобы увидеть веб-сайт. Это может быть учетная запись facebook, учетная запись google или учетная запись twitter.

введите здесь описание изображения

Итак, короткая история, если я хочу получить доступ к странице с информацией о группах, мне нужно иметь учетную запись бота для моего сервера, и мне нужно научить свой сервер входить в эту учетную запись.

Таким образом, я создал фиктивную учетную запись в gmail, называемую codecademybot, и я хочу, чтобы мой сервер использовал эту учетную запись для входа в codecademy, чтобы он мог видеть содержимое этой страницы.

Следуя руководству по быстрому запуску Python, которое связывает меня с Google+, теперь у меня также есть код для взаимодействия с этим.

Однако, несмотря на все это, я до сих пор не имею ни малейшего представления о том, как взаимодействовать с сайтом. У меня есть следующие вопросы:

  1. Как определить, вошел ли я в свою учетную запись Google?
  2. Как мне подключиться к этой учетной записи, чтобы затем получить доступ к странице?
  3. Есть ли специальная ссылка для входа на этот сайт?

Я совершенно потерян и буду признателен за любую возможную помощь.


person Flame_Phoenix    schedule 24.11.2013    source источник
comment
developers.google.com/api-client-library/python/guide/ aaa_oauth это может быть полезно   -  person Nikhil Rupanawar    schedule 24.11.2013
comment
Я был там, но я чувствую себя совершенно потерянным!!! Это куча информации, и все же ничто не помогает мне достичь моей цели :S   -  person Flame_Phoenix    schedule 24.11.2013
comment
stackoverflow.com/questions/10271110/ это может быть .. раздел ответов   -  person Nikhil Rupanawar    schedule 24.11.2013
comment
Я не использую Django, но я обязательно проверю эту информацию!   -  person Flame_Phoenix    schedule 24.11.2013
comment
Вопросы, касающиеся проблем с написанным вами кодом, должны описывать конкретную проблему — и включать допустимый код для ее воспроизведения — в самом вопросе.   -  person tereško    schedule 28.11.2013
comment
В том то и проблема, у меня нет кода!! Я понятия не имею, как начать!   -  person Flame_Phoenix    schedule 30.11.2013
comment
Это впечатляюще хорошо объясненный вопрос.   -  person trevorKirkby    schedule 03.12.2013


Ответы (1)


Не позволяйте всем примерам кода и инструкциям ввести вас в заблуждение. Они предназначены для более сложных случаев.

  • Это не авторизация oauth2, это аутентификация oauth2
  • Вы не клиент с clientID и секретом. Codecademy — это клиент с clientID и секретом. Ваша учетная запись codecademybot просто является пользователем.

Это означает, что вам нужно автоматизировать только то, что делают обычные пользователи при входе в codecademy. Воспроизведите это взаимодействие в браузере пару раз с прослушиванием инструмента разработчика (инструмент разработчика IE, FireBug и т. д.) и посмотрите на диалог HTTP-запросов.

Это то, чему вы хотите подражать.

Из того, что я вижу,

  • Диалог начинается с отправки запроса на http://codecademy.com/auth/google_oauth2.
  • Запрос перенаправляется на URL-адрес https в Google.
  • Если я ранее входил в систему в Google, пара файлов cookie будет отправлена, и я пройду аутентификацию. Запрос отправляется обратно в codecademy redirect_url по адресу http://www.codecademy.com/auth/google_oauth2/callback с кодом аутентификации oauth2 в качестве параметра.
  • Предположительно codecademy и google chat, на это уходит около трех секунд.
  • Они согласны с тем, что я — это я, и два файла cookie (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 codecademy, вы можете попробовать взять ее оттуда. Я не мог найти никакой документации, я придумываю это по ходу дела.

person flup    schedule 28.11.2013
comment
Да, я тоже знаю эту ссылку, я тоже ее нашел... но как мне эмулировать это поведение? - person Flame_Phoenix; 28.11.2013
comment
Я подслушал разговор и добавил свои мысли. Я вижу два интересных файла cookie, которые могут помочь. - person flup; 29.11.2013
comment
У меня серьезные проблемы с пониманием этого, поэтому я сейчас пробую другой подход: stackoverflow.com/questions/20270106/ И да, насколько я вижу, pycurl обрабатывает файлы cookie, но я все еще пытаюсь понять, как все работает: S - person Flame_Phoenix; 30.11.2013