同步消息到腾讯微博
上次的说将消息同时发布到15个微博服务的时候,我连 dii 这类小众的都加了进来,却偏没有介绍腾讯微博的同步方法,倒不是不小心漏掉,而是要将消息同步到腾讯微博上去,确实不容易,没有公开 API,同时登陆过程也比一些网站要复杂得多,我虽然折腾了很久,但也并没有成功,后来搜索才发现,早有人做出了第三方的 API 来,不过大多只有通过 API 来查看消息的功能,没有讲到更新的方法。然而我想,既然能查看了,那么至少登陆问题是解决了的吧,这也能为我所用不是,这里介绍的方法基本上便是参照 Neeke 的文章 腾讯微博API ,即使后面的更新方法,也要感谢 Neeke 的指导-.-
如果你有时间,还是推荐先阅读一下 Neeke 的这篇文章(腾讯微博API ),然后我再转述一下向腾讯微博发送消息的过程吧。
要向发送消息,首先是需要登陆账户,腾讯微博的登陆过程很 DT,据 Neeke 的分析如下:首先带 QQ 号向 http://ptlogin2.qq.com/check?uin='+ user +'&appid=46000101 请求,返回一个验证码,浏览器输入地址就可看看效果,喏~

然后将将用户的qq密码经过 md5_3加密,加密后的结果后面再跟上返回的验证码,再使用 md5 加密一遍这个新的字符串,得到的加密结果则连同QQ号,验证码再发送到 http://ptlogin2.qq.com/login?u='+ user +'&p='+ password +'&verifycode='+ qq_verify +'&aid=46000101&u1=http%3A%2F%2Ft.qq.com&h=1&from_ui=1&fp=loginerroralert 完成认证,当然这这两个过程中必须要为同一个会话,否则验证码就对不上来了。接下来转向 http://t.qq.com 最终完成登陆。
知道了整个登陆过程,接下来发送消息该简单多了吧,我留言询问 Neeke,一天后得到了回复,提交 content 等几个参数给 http://t.qq.com/publish.php 即可。几次尝试,再修改,增加了一些参数后终于成功,手动地示例一遍吧

完整地发布消息便就这么几个步骤了,简要说明一下,第一句获取验证码,保存 cookie ,第二句,使用处理过的密码等提交,得到登陆成功的返回消息,第三句,访问一下 http://t.qq.com ,最后是提交消息,记得用 -e 参数,其他的 countType 和 pic 留空,viewModel=0。
改为 Python 函数吧,包括自行处理 md5 加密部分的,如下
- import os,re,urllib,hashlib
- def UpdateQQ( user , password , message ,p_add):
- print u'更新腾讯微博...'
- os.system(curl +' -c qq.txt \"http://ptlogin2.qq.com/check?uin='+ user +'&appid=46000101\" > qq_verify.txt 2>nul')
- qq_verify=file('qq_verify.txt').read()[18:22]
- md5=hashlib.md5()
- md5.update(password + qq_verify)
- password=md5.hexdigest()
- os.system(curl +' -c qq.txt -b qq.txt \"http://ptlogin2.qq.com/login?u='+ user +'&p='+ password +'&verifycode='+ qq_verify +'&aid=46000101&u1=http%3A%2F%2Ft.qq.com&h=1&from_ui=1&fp=loginerroralert\" >nul')
- os.system(curl +' -c qq.txt -b qq.txt \"http://t.qq.com\" >nul')
- os.system(curl +' -c qq.txt -b qq.txt \"http://t.qq.com/'+ p_add +'\" >nul')
- os.system(curl +' -e \"http://t.qq.com/oooooooooooooooooooooooo\" -b qq.txt -d \"content='+ message +'&countType=&pic=&viewModel=0\" \"http://t.qq.com/publish.php\" >nul')
- os.system('del /q qq.txt')
- os.system('del /q qq_verify.txt')
- UpdateQQ('qq number','md5_3 password',message,'nickname')
对于传入的 md5_3 加密qq密码后的结果,可以保存此 html 文件,将代码最后一行改为自己的 qq 密码,用浏览器打开一下就看到了。
本文链接: http://isouth.org/archives/279.html , 转载请注明出处,此外还可以订阅我。
相关日志 Relate Posts
“同步消息到腾讯微博”40条留言
Pingbacks/Trackbacks
-
[...] This post was mentioned on Twitter by 起衣, 起衣. 起衣 said: 同步消息到腾讯微博 http://isouth.org/archives/279.html [...]
-
[...] 本文主要参考了三篇文章:腾讯微博API,同步消息到腾讯微博,发布一个Follow5的API PHP类 。因此如果你对本文有任何不理解的地方,可以详细阅读以上文章。 [...]
-
[...] 本文主要参考了三篇文章:腾讯微博API,同步消息到腾讯微博,发布一个Follow5的API PHP类 。因此如果你对本文有任何不理解的地方,可以详细阅读以上文章。 [...]
-
[...] 本文主要参考了三篇文章:腾讯微博API,同步消息到腾讯微博,发布一个Follow5的API PHP类 。因此如果你对本文有任何不理解的地方,可以详细阅读以上文章。 [...]
-
[...] 那篇 同步消息到腾讯微博 ,这里只是将其结构做了一下改进,另外保存了 cookies,也将 MD5_3 [...]
-
[...] 那篇 同步消息到腾讯微博 ,这里只是将其结构做了一下改进,另外保存了 cookies,也将 MD5_3 [...]
-
[...] 那篇 同步消息到腾讯微博 ,这里只是将其结构做了一下改进,另外保存了 cookies,也将 MD5_3 [...]
-
[...] 本文主要参考了三篇文章:腾讯微博API,同步消息到腾讯微博,发布一个Follow5的API PHP类 。因此如果你对本文有任何不理解的地方,可以详细阅读以上文章。 [...]
每一次碰到腾讯总是要绕不少圈子- -真麻烦……
@littlewater 是的,腾讯很麻烦..
@起衣
但是不太懂的人们都用腾讯,离开不了……
起衣童鞋对PYTHON相当熟悉啊,这个强大。顺便把NEEKE童鞋的博客收藏了。
@荒野无灯 我是初学者呢…你看很多功能就直接调用外部命令叻…不过关键也是curl太强大了-.-
@荒野无灯
收藏吧,但是别用这么邪恶的表情。
果然很专业~~!
@Neeke 这样win下用curl也就方便了-.-
我根據那個API做了騰訊微博同步twitter的工具http://jodis.me/51/q2t.html
大侠,你这段代码我用python 2.5.4怎么运行出错,说是 “curl”这个东西没有定义。
@江湖小子 额,这里调用了系统中安装的 curl 工具额
@起衣 不会啦
很强的代码,果然行得通。顺便跟Neeke的php代码对比了一下,发现最后发表的那一段如何改成php的代码啊?因为不同点就在这个地方吧?上面调用mine页面也不太一样。因为我网站只支持php语言,所以想看看最后发表微博的那一段怎么转成PHP语句。
@转烛 刚折腾了一下,暂时可以用PHP语句了。
@转烛
搞定了就好!
@转烛 不错,不知转烛最近在使用的时候有没有遇到验证码获取错误的问题?
@Neeke Neeke来啦~,最近验证码老是请求错误,有什么解决方案不?
没有遇到。难道就是Neeke文章评论里有个人说的sid的使用有限制?当然我只是猜测。。我这边暂时还没遇到你说的这个问题,一直试用是正确的。
@转烛 估计是同一客户端在一段时间内的登录次数限制,唉,试试将cookie保留下来-.-
good !
有办法用这种方式同步到腾讯微薄图片吗?
@@kelven 图片没研究过额。。
@Ansonyi 是很邪恶
发现从11月5日起,QQ加强了登录安全验证。现在貌似缺省都必须是验证码了!不知道大家有否遇到?
@ahu 估计以后要手动输验证码叻。。。
@ahu 今天再看的时候,腾讯已经恢复了,不会一直需要输入验证码叻。
@起衣 哈哈,太好了
@ahu
最后那个html文件找不到了 何解?
def Md5_3(password):
m1 = hashlib.md5()
m1.update(password)
m2 = hashlib.md5()
m2.update(m1.digest())
m3 = hashlib.md5()
m3.update(m2.digest())
return m3.hexdigest()
我这样MD5_3不对么?
那个搞定了 还有就是中文咋解决呢?