«

»

7月 27

Biligrab 0.72:Hotfix API服务器P=1报错

B站的API各种逗比。我很悲伤。

最近弹幕服务器做了变化,但是暂时不想更新。

先修正一下API服务器对于P=1时报错的问题。虽然好像不影响下载。因为我考虑了大量的exceptions。

其实是hotfix,但是我也找不到其他好的解决办法。

老地方,https://gist.github.com/cnbeining/9605757

代码藏起来以免影响加载。

 

 

 

8 comments

Skip to comment form

  1. StarBrilliant

    我好像看到你多处忘记转义了……

    1. Beining

      就一个curl那里应该弄一下。但是不碍事。。。其他地方执行命令应该不涉及变动。

      1. StarBrilliant

        当然不是那里。
        是109行:
        request = urllib2.Request(‘http://www.flvcd.com/parse.php?kw=’+videourl, headers=…)
        改成
        request = urllib2.Request(‘http://www.flvcd.com/parse.php?+urllib.urlencode([(‘kw’, videourl)]), headers=…)
        或者(如果参数个数不太多)
        request = urllib2.Request(‘http://www.flvcd.com/parse.php?kw=’+urllib.quote_plus(videourl), headers=…)

        想想看,如果有人把你的代码用在生产环境上就是天大的漏洞啊。可以用未转义的 & 逃脱参数检查,或者构造 CRLF 攻击等。
        试想自己发布的每一段开源代码都有可能被用在别的项目中。比如我的 bilidan 中已经内嵌 biligrab 引擎了。都要对用户负责不是嘛?

        po主距离把程序写得Pythonic这个目标还有点远呐 ╮( ̄_ ̄”)╭

        1. Beining

          嘛 因为不考虑出本地,而且videourl这个是写死的,就没上心。

          如果需要,前面也需要对av,p进行检查,看看能不能直接转成int,不能代表有鬼。

          下个版本修下。。。还有很多要学的东西。。。。

          1. StarBrilliant

            参数读取是非常建议用 argparse 模块的。
            手工询问参数不容易批处理啊。
            如果不知道怎么用,可以看看我修改的 bilidan 最后一小段。

            实际上 P1~9 这种批量下载的功能不需要费太多工夫支持。
            因为用户可以在bash里这样:
            for i in seq 1 9
            do
            ./biligrab.py xxxxxx/index_$i.html
            done
            或者这样,如果是zsh的话,
            ./biligrab.py xxxxxx/index_[1-9].html

            1. Beining

              你看我的其他一些脚本就在命令行里面收参数。

              这个脚本的要求是,用户的界面不是zsh,也不可能为一个简单操作专门写一个bash:因为我下载单个视频,一个视频的多个P,多个视频的单个P都很多。(bash:我特么要吐。。。

              还有个小问题:使用时,我不想每次重新敲’./******.py’ ,而是直接按上箭头用历史。要是在命令行里面收参数,需要把之前的东西先删了,然后敲新的。多麻烦。。。在程序里面取就不会出这个坑问题。

              当然当然当然当然,要是拎出来,整个main()函数是可以自己跑的。可以单独拎出这个函数,然后用argv,这个不难,但是我觉得做起来不是极其有意义,而且我把flvcd模块单独抽出来又做了个脚本专门批量下其他网站,就是为了批处理,那时就和你想的一样了。

              具体原因。。。这个得看这个脚本的演化历史了。。。。。怎么从一个下弹幕的小东西变成一个啥都有的脚本。。。

          2. StarBrilliant

            明白了。我错认为用户都愿意打三行字来启动 biligrab。毕竟 bash 的 for 语句至少要按三个回车……

            另外我想知道 flvcd 有什么黑科技能解析出 biligrab 自己不能解析的结果呢?好神奇。不知道 Beining 大大有没有研究过。

            来点轻松的:

            「具体原因。。。这个得看这个脚本的演化历史了。。。。。怎么从一个下弹幕的小东西变成一个啥都有的脚本。。。」这句话让我想到了典型的 software bloating,根据 Jamie Zawinski 的理论,几年后 biligrab 应该可以收邮件了,等几年看看是不是真的吧,反正 Firefox、Emacs、Blender、SAO Utils 之类的都印证了。(笑)

            1. Beining

              其实现在也是3个回车,但是敲的内容少得多啊。。。
              为啥有个Flvcd呢。。。因为一开始(你找找0.2,0.3左右的版本),我没有用API。
              也就是,完全用flvcd。所以就留下了这个东西。
              Flvcd现在的存在有几个用途:1)万一API真抽风了,Flvcd可以挡一下,不至于整个程序立马趴窝 2)我加了个强制解析原始源,这个用了flvcd,例如,强制用sina而不是letv的备份。
              我去问,flvcd不告诉我,说这个是技术机密。
              我认为,flvcd其实用的就是CDN的API。因为IP问题,我们不能指望结果完全一样。但是和我们设置source=1,用他们的IP效果应该一样。

              我一开始是想把AcDown做一个OSX下的版本,因为我实在不想用wine。ACPlay我用两个弹幕播放器解决了,下载部分基本上就是这个+you-get了。
              当然接下来扒了所有的黑科技,最后到给AcDown提交bug。。。。。。这真的很神奇啊(笑
              说不定下个版本我就加上出现bug给我发邮件提交错误记录的功能呢。。。。。。。。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">