使用Python登录Google帐户进入网站

7
我正在制作一个网站,用于制作人群数量的图表(来自www.codecamy.com)。
为了实现这个目标,我想出了一个计划。
我将拥有一个服务器,每30秒轮询CodeCademy团体页面(http://www.codecademy.com/groups),并从HTML中获取所需信息。

enter image description here

当客户端连接到我的网站时,服务器将向客户端提供该信息,然后客户端将使用http://www.chartjs.org/docs/http://www.jqplot.com/根据该信息绘制图表。

enter image description here

然而,存在一个大问题。如果您点击了CodeCademy中的任何链接,则会意识到您需要拥有一个账户才能真正查看该网站。这可以是Facebook账户、Google账户或Twitter账户。

enter image description here

所以,简单来说,如果我想访问关于群组信息的页面,我需要为我的服务器创建一个机器人账户,并教会我的服务器登录到该帐户。
因此,我在gmail上创建了一个名为codecademybot的虚拟账户,希望我的服务器使用这个账户登录到codecademy,以便它可以查看该页面的内容。
通过遵循连接到google+的快速入门Python教程,我现在也有了与之交互的代码。
然而,尽管如此,我仍然不知道如何与网站进行交互。我有以下问题:
  1. 如何检测我是否已经登录到谷歌账户?
  2. 如何连接到该账户,以便我可以访问该页面?
  3. 是否有特殊的链接可用于登录到该网站?
我非常迷茫,希望能得到任何可能的帮助。

1
这个链接可能会有帮助:https://developers.google.com/api-client-library/python/guide/aaa_oauth - Nikhil Rupanawar
我去过那里,但是我感到完全迷失了!!! 这是一堆信息,但什么也没有帮助我实现我的目标:S - Flame_Phoenix
1
这是一个关于使用Python OAuth2登录Google的问题,可以在回答部分找到解决方案。 - Nikhil Rupanawar
我不使用Django,但我一定会查看那些信息! - Flame_Phoenix
4
提问涉及您编写的代码问题,必须在问题描述中明确指出特定问题,并包含有效的代码以便重现该问题。 - tereško
显示剩余2条评论
1个回答

6
不要被所有的代码示例和操作指南所迷惑,它们是针对更复杂的情况而设计的。
  • 这不是oauth2授权,而是oauth2认证。
  • 你不是拥有clientID和secret的客户端,Codecademy才是拥有clientID和secret的客户端。你的codecademybot账户只是用户。

这意味着你只需要自动化普通用户登录到codecademy时所做的操作。在浏览器中用开发工具(IE开发工具、FireBug等)监听一下这个交互,然后查看HTTP请求的对话。

这就是你希望模拟的过程。

据我所见,

  • 会话从向http://codecademy.com/auth/google_oauth2发送请求开始。
  • 请求被转发到Google的https网址
  • 如果我之前已经在Google登录过,一些cookie将被发送,并且我将得到认证。该请求带着oauth2身份验证代码作为参数被发送回http://www.codecademy.com/auth/google_oauth2/callback的codecademy redirect_url。
  • 据说Codecademy和Google聊天,这需要大约三秒钟。
  • 他们达成一致,确认我是我,并在我被转发到http://www.codecademy.com/之前在我的浏览器中设置了两个cookie(remember_user_token_session_id)。

我认为最后一部分很有趣。你可以使用浏览器手动登录,倾听对话并将这两个cookie复制到自动化代码中。看看它们是否足以作为身份验证令牌并允许您从网站获取数据。

如果不行的话,我强烈推荐@CrisBee21的答案。希望pyCurl能够很好地模拟浏览器,为您完成对话。
还有一件事,当我浏览网站时,我看到一个REST API请求,即http://www.codecademy.com/api/v1/notifications/userid/unread_count?authentication_token=some token 浏览http://www.codecademy.com/api/v1/users/userid/?authentication_token=the token会给我更多关于自己的信息。 http://www.codecademy.com/api/v1/users/userid/groups?authentication_token=the token会给我我的组。
如果您有关于Codecademy REST API的更多文档,您可以尝试从那里开始。我找不到任何文档,所以我是边走边想的。

是的,我也知道那个链接,我也找到了它...但是我该如何模拟这种行为呢? - Flame_Phoenix
我听取了对话并加入了我的想法。我看到两个有用的cookies可能会解决问题。 - flup
我真的很难理解这个,所以我现在正在尝试另一种方法:http://stackoverflow.com/questions/20270106/how-to-login-to-codecademy-using-pycurl。是的,从我所看到的来看,pycurl处理cookies,但我仍在努力弄清楚一切是如何工作的:S。 - Flame_Phoenix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接