此处只是记录一下,想要实现用python脚本,去修改网易163博客中的帖子的全过程。
1. 之前是已经通过python脚本,通过cookiejar自动管理cookie,而实现了登陆163博客,然后可以查看到所有的帖子,包括“私人日志”,“博友可见”等类型的帖子。
此前,已经实现了用python登陆百度并修改百度的帖子。
此处想要去实现修改163博客中的帖子。
但是经过一番抓取整个修改帖子的过程中发现,浏览器中首次修改帖子,是需要输入验证码的。
在点击发布的时候,会访问这个地址:
http://api.blog.163.com/cap/captcha.jpgx?parentId=172799491&r=463398
然后返回一个验证码的图片:
然后输入对应的验证,vdsv,之后,对应提交的post data中,就包含有对应的参数:
&valcodeKey=vdsv了。
修改帖子成功后,返回的代码应该是这样的:
{r:1,id:’1067120792′,sfx:’blog/static/17279949120120102415384/’} |
对于修改帖子的前后过程,现在是已经分析清楚了,但却发现,想要用python模拟实现的话,貌似很难。
因为网上找了一番,貌似用python对验证码解码以获得对应的验证码的字母数字的话,很难实现。即使实现了,多数也都是针对简单的那种验证码才可以的,复杂一点的,像网易博客这样的,字符数字类型的验证码,带颜色的,而且是七扭八歪的,甚至有时候人自己都看不太清楚的,是很难通过python解码出来的。
因此,得出结论,暂时放弃通过python去修改网易的帖子了。
除非以后有空,并且能找到有效的python的库,可以方便地解码163的发布帖子时候的验证码,才可以继续折腾用python修改帖子。
2. 不过,此处还是心存一丝侥幸心理。
心想,万一用python脚本修改帖子的时候,因为可以不用去访问captcha的地址,不需要获得验证码的图片,因此,是不是也可以不需要提交对应的验证码呢,如果是的话,那么岂不是也可以不用提交验证码,就可以直接更新博客帖子了?
所以,就又花时间,去写python代码,试试是否可行。
在一切都准备好后,即
python中设置好了:
(1)所要提交的url:http://api.blog.163.com/againinput4/editBlogNew.do?p=1&n=0
(2)对应的post data的结构是:
postDict = { "tag" : "", #should find original blog tags, "cls" : classId, # 新的分类 的 id, fks_084066086082085064082082085095085081083068093095082074085 "allowview" : "-100", "refurl" : "", "abstract" : "", "bid" : bid, #fks_081075087094087074084084086095085081083068093095082074085 "origClassId" : classId, # 原先的分类的id "origPublishState": "1", "oldtitle" : titleGb18030, #test%E6%9B%B4%E6%96%B0%E5%B8%96%E5%AD%90%E6%B5%8B%E8%AF%952 "todayPublishedCount": "0", "NETEASE_BLOG_TOKEN_EDITBLOG" : editBlogToken, #e6a5766d73b0daf359a37e9361e11e46 "title" : titleGb18030, "HEContent" : newPostContentGb18030, "copyPhotos" : "", "suggestedSortedIds": "", "suggestedRecomCnt": "", "suggestedStyle": "0", "isSuggestedEachOther": "0", "photoBookImgUrl": "", "miniBlogCard" : "0", "p" : "1", };
提交的encode之后的post data是:
miniBlogCard=0&photoBookImgUrl=&allowview=-100&isSuggestedEachOther=0&todayPublishedCount=0&NETEASE_BLOG_TOKEN_EDITBLOG=18a51c507a2407ca8a6ee920c8f46d26&title=intro&abstract=&origPublishState=1&suggestedRecomCnt=&p=1©Photos=&tag=&refurl=&HEContent=省略此处超长的内容&origClassId=fks_084066086082085064082082085095085081083068093095082074085&suggestedStyle=0&oldtitle=intro&bid=fks_081075087094087074084084086095085081083068093095082074085&suggestedSortedIds=&cls=fks_084066086082085064082082085095085081083068093095082074085 |
但是最后返回的是错误的代码:
{r:-3,id:”,sfx:’/’} |
上述返回的错误的代码的含义,其实都猜出来了,估计就是验证码的事情。
然后去网上找了一堆关于上述错误的帖子,也都说到了,是网易发布博客帖子,需要验证码,如果没有验证码,则会出现上面的-3的错误。
更加精准的验证自己的猜测,是后来找到了对应的代码,是:
http://b1.bst.126.net/newpage/r/j/m/m-2/em.js?v=8853408733
中的:
if(!aw || aw.r != 1) { aw = aw || O; if(aw.r == -3) { E.bN('验证码错误!', true, false, 'fail'); p.KY.ay(); } else if(aw.r == -2) { E.bN('TOKEN错误!', true, false, 'fail'); } else if(aw.r == -1) { E.bN('REFERER错误!', true, false, 'fail'); } else { E.bN('暂时无法保存日志,请稍后再试!', true, false, 'fail'); }
3.记得在哪里听到有人说过,好像是如果当然发布多个帖子,就会有对应的验证码出现的。发布很少的帖子,就不会有验证码出现。
对此,此刻测试出来的结果是,同一个帖子,如果一段时间内,连续发布个2,3次,除了第一次,之后每次更新帖子,都不会出现验证码的。
所以,即修改同一帖子,第二次往后,就不需要输入验证码了。
对应的,感觉很像提交的post data中:
"todayPublishedCount": "0",
是不是,如果把此变量改为大于0的某个数,是不是就可以避免使用验证码了?
然后去尝试,把todayPublishedCount改为1,
的结果,还是同样的r=-3的错误。
并且,专门去尝试了,修改某个帖子,第一次修改,是需要验证码的,修改后,第二次修改,就不需要验证码了,然后抓取了第二次修改,不需要验证码时候,对应的post data,发现除了没有valcodeKey之外,对应的todayPublishedCount的值,也还是0.
刚刚才注意到,估计todayPublishedCount所表示的含义是,今天所发布的帖子的个数,而和当前这个帖子所被修改的次数,是没关系的。看来还是得想其他办法,绕过这个验证码的事情。
4。比较了,第一次修改带验证码的cookies,和第二次修改不带验证码的cookies,结果没啥区别。
看来,真的是暂时只能放弃通过python脚本来修改更新网易的帖子了。
转载请注明:在路上 » 【记录】用python脚本修改网易163的帖子