实现思路

上次发过的,通过分享链接来生成短链接,后来微博又下线了这个功能,微博还有好多地方都可以生成,发微博、评论、发私信等等都可以,网上也有通过发微博来实现的,这里我用的是发私信(因为私信接口返回的是json数据,可以偷懒,而且速度也要快一点)

项目地址

https://github.com/ufec/short...
使用方法更新说明里面已经写好了,就不再赘述。可以使用PHP-MongoDB来构建对应索引数据库,这样简单清晰的结构建议用MongoDB,MySQL的话在这样的场景性能可能不如MongoDB(个人见解)

模拟登陆

这里只讲一下思路,PHP来实现密码加密我也还没弄出来,我用的是的nodejs做服务端来加密,php直接获取即可,无需跳转。Python的确很好实现,三行代码就搞定了加密过程,看个人选择吧,我是觉得就这一个需求,实在用不着安装Python和那几个包,

首先预登陆

主要接口为:

https://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&rsakt=mod&client=ssologin.js(v1.4.19)&su=base64后的账号&_=13位时间戳

从这里我们可以获取公钥、服务器时间、nonce、rsakv这些必要参数,前三个与密码明文作为rsa加密参数,结果作为登陆的sp参数的值,POST参数:

$postData = [
            "entry"         => "weibo",
            "gateway"    =>    "1",
            "from"         => "",
            "savestate"  => "7",
            "qrcode_flag"=>    "false",
            "useticket"     => "1",
            "vsnf"         => "1",
            "su"         => base64_encode(用户名),
            "service"     => "miniblog",
            "servertime" => '这里填入servertime',
            "nonce"         => '这里填入nonce',
            "pwencode"     => "rsa2",
            "rsakv"         => '这里填rsakv',
            "sp"         => '加密后的密码',
            "sr"         => "1536*864",
            "encoding"   => "UTF-8",
            "prelt"         => "560",
            "url"         => "https://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack",
            "returntype" => "TEXT",
];

接口地址:

https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.19)

这里指出一点,returntype值填TEXT会更好,返回json数据,默认的是html,要正则取ticket,
登录成功后,需要取出ticket,来做下一步获取通行证的POST参数:

$lastData = [
            "ticket"       => "上个过程获取的ticket",
            "ssosavestate" => time(),
            "callback"     => "sinaSSOController.doCrossDomainCallBack",
            "scriptId"     => "ssoscript0",
            "client"       => "ssologin.js(v1.4.19)",
            "_"            => (time() * 1000)
];

接口地址:

https://passport.weibo.com/wbsso/login

即可获取登陆cookie,虽然我还没写出php的加密过程,但我相信肯定能用PHP来写,毕竟服务端用的PHP解密
login.png
同样老问题,在服务器上模拟登陆,会遇到验证码,Python可以直接保存二维码等待用户输入,但在服务器上这样不现实,可以直接调用图片识别接口来操作即可。
作者博客:CodeLife


Ufec
1 声望0 粉丝