一些简单的论坛往来

      No Comments on 一些简单的论坛往来

被吞了233,直接开主题贴再发一遍。。。
这是一个有关于BiliLoca以及一些在Linux实现Bilibili本地化的讨论帖(真爱电脑,远离Adobe Flash) @AncientLysine
也希望其他吧友能够给出一些意见,谢谢
(首先感动。。。这年头给Linux编方便程序的人不多了。。。好评!!!谢大神)
在您给出的GitHub里,愣是没找到编译方法。。。难道是我太弱。。。求如何编译,Linux x64 Ubuntu/Fedora/Mint/Porteus/...,难道不是用make?没看见makefile啊。。。求指点
还有我一看scr目录瞬间觉得这个程序好复杂。。。个人觉得是不是不用这么复杂。。。至少在Linux下可以用更简单的方法。。。(以下纯属个人意见):
-------------------------------------
首先解析可以用Flvcd解析,然后之间处理Flvcd解析完成的HTML的代码找里面的视屏地址
然后下载可以用Axel进行,一个命令多线下载,我一般用 -n5 5线程
至于弹幕下载可以用 “http://blog.sina.com.cn/s/blog_58c506600100utap.html” 给出的方法,随便试了一下貌似可行,wget就行了,这个不用多线下
然后播放可以用MPlayer进行,自带Ass等弹幕(明明是字幕)功能
(这里就有问题了,貌似MPlayer不支持XML弹幕,求大神能不能直接告诉我怎么转成Ass之类的方法,在源码里翻了半天各种看不懂...,谢谢!)
(B站没了弹幕真是一点也不欢乐,求转换方法。。。这样就能在我下方的Bash Script里加弹幕功能了)
-------------------------------------
于是乎我有一个自己变得Bash Script专门来集成这中间所有的过程(除了没有弹幕)
#!/bin/bash
case $1 in d)m="echo mplayer -fs";shift;;p)mplayer -fs `ls`;exit;;a)m="$2";shift 2;;*)m="mplayer -fs";;esac;n=0;for t in $@; do if [ ${#t} -gt 6 ];then C=1;N=${t:6:4};t=${t:0:6};while [ $N -gt $C ];do d+='http://www.flvcd.com/parse.php?format=&kw=http%3A%2F%2Fwww.bilibili.tv%2Fvideo%2Fav'$t'%2Findex_'$C'.html&sbt=%BF%AA%CA%BCGO%21 ';let C+=1;done;else d+='http://www.flvcd.com/parse.php?format=&kw=http%3A%2F%2Fwww.bilibili.tv%2Fvideo%2Fav'$t'%2F ';fi;done;for t in $d;do wget $t -OB&>/dev/null;N=`sed -n '/br>/,/br>/p' B|tr '"' '\n'|grep p:|grep -v '>'|sed '$d'`;for C in $N;do axel -n8 -o$n $C&>/dev/null&if [ $n = 0 ];then p=$!;fi;let n+=1;done;done;(while [ $n != 0 ];do n=`ps|grep axel|wc -l`;echo -en "\033[s\033[1;78f$n\033[u";done)&N=0;while [ $n -gt $N ];do m+=" $N";let N+=1;done;wait $p;$m
-------------------------------------
有点乱,好吧我整理一下
#!/bin/bash
case $1 in #处理不同的模式
d) #Download模式,只下载不播放,最后会输出用于播放的命令
m="echo mplayer -fs";
shift;;
p) #Play模式,用于播放“Download”下载的视频,不过最好还是直接用Download给出的命令
mplayer -fs `ls`;
exit;;
a) #ABC模式,自己来写播放命令,例如写 "mplayer" 会不全屏的播放(默认全屏),“mplayer -fs”和没写模式没区别
m="$2";
shift 2;;
*) #没认出来什么模式,视为没写模式
m="mplayer -fs";;
esac; #到此模式部分处理完成
n=0; #初始化计数器
for t in $@; #对所有Argument(av号+(p数+1))进行For循环, 得到所有下载地址
do if [ ${#t} -gt 6 ]; #如果是正常小于6位AV号那就不处理,否则的话就是写了(分P数+1)在后面(比如说总共2P就写3在后面如1234563)
then C=1;
N=${t:6:4};
t=${t:0:6};
while [ $N -gt $C ]; # 对每一个Part进行For循环
do d+='http://www.flvcd.com/parse.php?format=&kw=http%3A%2F%2Fwww.bilibili.tv%2Fvideo%2Fav'$t'%2Findex_'$C'.html&sbt=%BF%AA%CA%BCGO%21 ';
let C+=1;
done; #每一个Part的For循环完了
else d+='http://www.flvcd.com/parse.php?format=&kw=http%3A%2F%2Fwww.bilibili.tv%2Fvideo%2Fav'$t'%2F ';
fi;
done; #得到了所有的Part的地址
for t in $d; #开始解析所有视频
do wget $t -OB&>/dev/null;N=`sed -n '/br>/,/br>/p' B|tr '"' '\n'|grep p:|grep -v '>'|sed '$d'`; ##用FLVCD解析
for C in $N; #下载解析到的每一个Part的所有自动分P(6分钟)
do axel -n8 -o$n $C&>/dev/null& # 用 "&" 结尾来多线下载所有的P
if [ $n = 0 ];then p=$!;fi;let n+=1; #记录下第1个视频的第1个Part的第1个自动分P的下载进程的id
done;
done; #到这儿为止所有的P都开始下载了
(while [ $n != 0 ];do n=`ps|grep axel|wc -l`;echo -en "\033[s\033[1;78f$n\033[u";done)& #一个小插件在终端的右上角显示还有几个P没下完,0或什么都没有就是都下完了,这是你可以关无线网开关了
N=0;while [ $n -gt $N ];do m+=" $N";let N+=1;done;wait $p;$m #等第1个视频的第1个Part的第1个自动分P下完开始播放
-------------------------------------
顺便贴上使用方法: (这个script叫“B”,大写) B (d/p/a) (cmd@a) [avNum+(PCount+1)]
d: 在Download模式下只下载不播放,最后会给出播放整个视屏的命令
p: 在Play模式下只播放不下载,适用于当你错失D模式给出的命令时,这是你不用输入任何av号了,直接“B p”
a: 在ABC模式下可以自定义播放命令,例如输入"B a mplayer XXXXXX"可以用非全屏的方式关看,跟高级的功能请RTFSC(Read The F**king Source Code)
【avNum+(PCount+1)】:例如“av917506”有总共3个P,你想看所有的三个P,只需使用 “B 9175064” (7位数字,最后一个数字是3+1的意思)
-------------------------------------
至于播放时的快捷键,具体请“man mplayer”或“mplayer --help”。以下列举几个简单的快捷键
“ ”(空格),播放暂停
”(回车)”,放下一Part
“Esc,q”,退出播放
“9,0”,(左右小括号的位置),音量
”【,】“ (左右中括号),播放速度(可以三倍速播放哟...)
"o” (opq的o),开关屏显
“左右箭头”,快进快退
”f”,退出全屏
“。。。”(忘记了,键盘左上角部分):视频缩放
-------------------------------------
至于UI,我觉得Linux用户不至于水到没有UI就用不了,Linux用户也不需要特别的UI,就让它用命令行的方式会方便很多
至于弹幕屏蔽,我们可以使用正!则!表!达!式!(优越中。。。),这个在命令行下也是很容易直接实现的,只需要额外一个Filter就行了
至于发弹幕。。。这个,比较复杂,我们只考虑简单的问题。。。
这样写的话Dependency也少了很多,像我那种Live OS的Porteus,超迷你Linux的Puppy甚至没有X server的Linux(纯粹一黑屏命令行Linux)都可以正常使用(当前这个Linux版本我没有lib×××用不了)
(神马你不知道MPlayer可以通过直接渲染到/dev/fb0的fbdev来在没有X server的情况下照常运行?明明是一个命令行黑屏,可突然开始看B站了!)
(配合W3M,Lynx这些终网页端浏览器这个甚至可以做到没有X server上B站,看B站!《== 胡说!终端根本不能显示中文! 《== 不要在意那些细节。。。)
-------------------------------------
大神觉得这个怎么样,我是觉得挺省资源的,现在就差利用好MPlayer的字幕功能了,求XML to Ass方法!谢谢!
也希望其他吧友能给出回复!
-----------
 
同病相怜 把我的办法扔过来参考:
(以下全都是开源软件。。。)
http://www.cnbeining.com/?p=330
自卖自夸。
Biligrab(呃,我这人不大会起名。。。),弹幕和视频都能下载,自动合并,封装成MP4。(为啥要MP4?因为我还有个别的东西。。。)
流程简单,参考了ACDown、Bilibili助手等的代码:
尝试API获取cid和视频名称、分P名称等信息(如失败,抓网页找cid,再没有我也没辙了,aid猜cid这办法太神棍了)-API抓下载地址(如失败,抓flvcd找下载地址,再没有我也没辙了,因为不知道vid,所以不能用A站的科技)-写个list,aria2c 16线程下载-写个文件,ffmpeg concate,封装MP4,收工。
然后就是两个咱封装的播放项目:
https://github.com/superwbd/Mukioplayer-Py-Mac
(Flash实现,明白了吧)
https://github.com/superwbd/ABPlayerHTML5-Py--nix
(HTML5实现,跑起来不错,但是不能跑的时候还是需要Mukioplayer接手)
readme写的明白,不多说了。等研究明白了再看看能不能实现AcPlay,因为复杂程度增加很多。。
XML2ASS?
两个实现:
https://danmu2ass.codeplex.com/
.NET的
https://github.com/muzuiget/niconvert
Python的
具体不了解了,因为没有这个需求。。。
嘛还需要啥呢?
需要更多的开发者吧。。。这圈子真够小的。。。
 
--------

好的我们折腾了半天成功的把一个高级的XML文件打成了最低级的SRT格式,哈哈哈哈哈哈。。。现在终于能看弹幕啦!
附上Bash Script:
chromium-browser http://comment.bilibili.tv/`wget http://www.bilibili.tv/video/av$1 -O-|gzip -cd|tr , '\n'|tr '&' '\n'|grep cid|sed 's:[^0-9]::g'`.xml&mousepad S&n=0;for t in `wget 'http://www.flvcd.com/parse.php?format=&kw=http%3A%2F%2Fwww.bilibili.tv%2Fvideo%2Fav'$1%2F -O-|sed -n '/br>/,/br>/p'|tr '"' '\n'|grep p:|grep -v '>'|sed '$d'`;do axel -n5 -o$n $t&let n+=1;done;sed 's:<d p="' S|sort -n>s;T=(`sed 's:\([0-9]*\).*:\1:' s`);C=(`tr '<' '\n'<s|tr '>' '\n'|grep -P '[\x80-\xFF]'`);x=-1;c=0;b=0;t=0;l=`mplayer -novideo -ao null -frames 0 -identify 0|grep ttimestamp:|sed s:[^0-9]::g`;for((i=0;i<${#T[@]};i++));do let n=${T[$i]}-$b;if [ $n -gt $l ];then let b+=$l;let t+=1;c=0;x=-1;n=0;l=`mplayer -novideo -ao null -frames 0 -identify $t|grep ttimestamp:|sed s:[^0-9]::g`;fi;if [ $n -gt $x ];then echo>>$t.srt;x=$n;echo $c>>$t.srt;let ta=$x/3600;let tb=$x%3600/60;let tc=$x%60;echo -n "$ta:$tb:$tc,000-->">>$t.srt;let tc+=2;echo $ta:$tb:$tc,000>>$t.srt;let c+=1;fi;echo ${C[$i]}>>$t.srt;done;mplayer -subcp utf-8 -font 'WenQuanYi Micro Hei' -subfont-text-scale 2 `ls|sort -n`;
神马?太乱了?好吧,我就来解释一遍(再过2小时就是起床时间了,,,)
chromium-browser http://comment.bilibili.tv/`wget http://www.bilibili.tv/video/av$1 -O-|gzip -cd|tr , '\n'|tr '&' '\n'|grep cid|sed 's:[^0-9]::g'`.xml&
mousepad S&
n=0
for t in `wget 'http://www.flvcd.com/parse.php?format=&kw=http%3A%2F%2Fwww.bilibili.tv%2Fvideo%2Fav'$1%2F -O-|sed -n '/br>/,/br>/p'|tr '"' '\n'|grep p:|grep -v '>'|sed '$d'`;do axel -n5 -o$n $t&let n+=1;done;
sed 's:<d p="' S|sort -n>s;
T=(`sed 's:\([0-9]*\).*:\1:' s`);
C=(`tr '<' '\n'<s|tr '>' '\n'|grep -P '[\x80-\xFF]'`);
x=-1;
c=0;
b=0;
t=0;
l=`mplayer -novideo -ao null -frames 0 -identify 0|grep ttimestamp:|sed s:[^0-9]::g`;
for((i=0;i<${#T[@]};i++));do let n=${T[$i]}-$b;if [ $n -gt $l ];then let b+=$l;let t+=1;c=0;x=-1;n=0;l=`mplayer -novideo -ao null -frames 0 -identify $t|grep ttimestamp:|sed s:[^0-9]::g`;fi;if [ $n -gt $x ];then echo>>$t.srt;x=$n;echo $c>>$t.srt;let ta=$x/3600;let tb=$x%3600/60;let tc=$x%60;echo -n "$ta:$tb:$tc,000-->">>$t.srt;let tc+=2;echo $ta:$tb:$tc,000>>$t.srt;let c+=1;fi;echo ${C[$i]}>>$t.srt;done;
mplayer -subcp utf-8 -font 'WenQuanYi Micro Hei' -subfont-text-scale 2 `ls|sort -n`;
(我会告诉我懒得解释了吗?)
那么就这样了。。。算了还是说一下那坨最长的吧,我主要做的就是在提取XML文件中的时间和弹幕内容后(其余数据忽略),跟据分P长度来吧完整的弹幕文件分配补偿给每个分P,把所有集中在一秒内的弹幕和并在一起(不同行)写到字幕文件里去。每个弹幕出现至少1秒至多2秒
发现弹幕不正常?好的恭喜你你必须修改那个 'WenQuanYi Micro Hei' 成你电脑了有的”中文“字体。。。
最后的”2“是字体大小,大约是整数吧。。。

 
 
@ZisIsNotZis
容我挨个具体说明一下。
----------------
1。这个是我目前面临的问题,为什么我用wget下载下来的XML文件都是乱码。。。(地址绝对没错),而用Chromium输入那个地址就能得到文字内容呢。。。我也没看见您用特别的方式处理XML文件,这让我很费解。。。
gzip压缩惹的祸。一开始我也没想到这点,然后也是乱码。
看第77行:
os.system('curl -o "'+filename+'.xml" --compressed http://comment.bilibili.tv/'+cid+'.xml')
--compressed:解开gzip压缩。之前想手工转换,后来发现还不如这么傻瓜化解决呢。
---------------
2。 第二个问题还是关于XML的。。。(问题这么多)我貌似没看见有对XML文件的特殊处理,那个文件是不是到输出“xml should be ready”那边的时候就已经处理完了?那那个弹幕是怎么播放的呢?播放器直接支持?还是什么其他的
是又不是。。。看你如何定义“处理”了。实际上,对原始文件数据,我唯一的处理是gzip解压,之后不做其他处理。弹幕播放用我上面提到的软件(我自己封装的那2个)。直接支持,因为这些就是专门的弹幕播放器。
---------------
3。 因为不知道ffmepg是干嘛的,我最后一部分基本上没看懂。。。这个文件到底是被播放了呢,还是被下载了呢?那些弹幕有没有被播放呢,还是说就是下载了,还是内嵌进去了(这个狠)?
129行:
os.system('ffmpeg -f concat -i ff.txt -c copy "'+filename+'".mp4')
请看一下ffmpeg文档关于Concat的用法。Concat是直接连接文件,不重新转码。(恩,我一直准备把ffmpeg的文档整个翻译了,但是自己做起来太累,只能一点点弄。。。https://github.com/superwbd/ffmpeg-all-translate 如果谁有兴趣,随时fork跑然后发pull request啊。)
Biligrab只起到下载作用。播放是播放软件做的,虽然我在写Biligrab的时候考虑到为后面的播放打基础。
--------------
顺便吐槽几句。。。吐槽1:目前我那个程序的下载弹幕部分因为问题1的问题的解决方法是:让Chrome打开那个XML页面,打开一个Mousepad/Leafpad之类的,然后让用户复制黏贴进去。。。
无论是curl,还是wget,都有解压的选项。只不过考虑到有些机器可能没有wget(OSX你懂的。。。这毕竟不是真linux),所以变成了curl。
-------------
吐槽2:关于您上面说的“hope it never happens”,我觉得直接用FLVCD就行了呀,既然有这么方便的工具,为什么还要自己想办法解析呢。。。又要随着时间更新,又要处理其他网站播放器的问题什么的我个人是觉得太麻烦了啦,毕竟Unix的系统的相当大一个奥义就是“一环套一环”啊(FIFO,PIPE,虚拟文件系统,接口,stdin/out神马的)。总之就是我觉得要尽量发挥FLVCD存在的价值,,,
Biligrab 0.1的时候,我直接用了FLVCD,根本不去考虑API。因为这个API怎么调用我死活看不懂。。。
之所以只作为备选:
1)这个是专门解析BIlibili的,所以我首选使用API,还可以起到一部分黑科技的效果。(详情见Bilibili助手的代码)
2)API给出的地址是随地理位置不同、网络环境不同而不同的。Bilibili有自己的CDN服务器,位置我已经找到2处了,在中国大陆。sina使用的CDN是蓝汛的,全球布站,但是不一定全球都缓存。因为咱人在加拿大,如果用FLVCD解析,由于FLVCD本身在大陆,基本解析的结果都是B站自己的CDN,速度会受到一定影响。如果是API,对于海外,就会给出sina的CDN,对速度帮助很大。(其实是因为去年光缆漏光导致我刚写好这东西就跑不起来了。。。于是只能又写一个)
3)速度快啊。API的返回肯定字数少啊。
FLVCD?如果有API,我还是会尽可能使用API的解析。因为我的速度考虑是海外的。。。
-------------
吐槽3:我总觉得这个程序的速度不给力,不够强劲。。。为什么呢,首先虽然弹幕下载部分和视频下载部分并不冲突,不需要有先后顺序之分,可以并行,然后每一个视屏的分P之间也不一定需要有严格的顺序。我的想法就是一起下,下的快,校园网带宽无限。。。有的时候我所有下载任务线程数能超过500个(每个6分钟8线程)
我首先说一点,咱不知道国内的校园网具体是什么样的,所有了解都是查资料得到的。。。
之所以不这么用,有几点考虑,我复现了,不知你是不是也遇到过:
1)我这里的校园网每天限制下行流量8G上行1G,如果连接数太多,恐怕会招致网管喝茶。。。虽然我平时做事情会挂上SSH,但是还是不想麻烦。
2)aria2c的下载是如此,容我再研究一下。
3)(重点)在特别极端情况下,我发现,蓝汛的CDN有时cache有问题,造成下载文件不完整。由于怀疑是反攻击策略,为了规避,暂时先这么用。
----------
最后是其实第一个视屏下完后就可以开始放了,其他的部分可以在放第一P的时候下完
由于我使用专门的弹幕播放器,这个是没法实现的。。。
--------
用下载而不是Stream的好处就是绝对不会有卡顿和6分钟诅咒之类的东西,进度条顺畅,想怎么跳OP怎么跳OP。不过带来的就是一丁点的准备时间。所有还是摇尽快开始播放。。。
嘛。。。因为我网速没什么压力,所以等几分钟也没什么障碍。。。
--------
我看着这个源码觉得Python编程好简单(但代码好长。。。)(大一,正好学Python),不过出于我有强迫症,我一般只会用2种语言:最直接,最方便,最短的Bash,和最快的C++。。。
同大一,只科班学过简单Python,所以就用它了。。。Bash还没学。。。
-------
算了再吐槽一句吧,”封装“这个词对我太深奥了。。。怎么世界上各种大触,太可怕,太可怕。无关的吐槽另一句:革命尚未成功,同志任需努力啊!我们总有一天会打败Windows的!(然后就是Linux和Mac互掐了?)
这是视频处理部分了,因为咱兼职压制君,所以这个也在研究。。。如果不准备做,这个坑不跳也罢。。。
Windows。。。无他,乱七八糟的事情太多,懒得弄了。
-------
我成功加入弹幕功能了!见此贴10楼。
可喜可贺~建议用ASS,但是这个咱就没有专门研究过了。。。因为不用。。。

也写分析:为什么新浪视频会被Chrome误报,附解决办法

这事越来越不消停了。
简单说怎么解决:
设置——高级设置(最下面)——启用针对网上诱骗和恶意软件的防护功能 关闭。
 
然后是分析。。。
 
这个是sina躺枪吧。。。
之前为了抓B站视频写下载器简单看了一下这个CDN边缘是怎么来回跳的。
sina应该(99.99%)用了网宿(ChinaNet)的CDN。他们的CDN节点遍布全球,相当适合sina视频这种网站,而且技术积累也相当不错。
举一个实例:
无论是谁(A/B/sina自己)解析视频真实地址(vid->URL)。得到了这个地址,估计是网宿CDN的边缘地址:
http://edge.v.iask.com/123557717.hlv?KID=sina,viask&Expires=1389283200&ssig=uoYS0MDSlU
然后发送GET,收到一个302,转到:
http://edge.v.iask.com.lxdns.com/123557717.hlv?KID=sina,viask&Expires=1389283200&ssig=uoYS0MDSlU&corp=2
(lxdns.com ,名字用了龙讯,其实就是网宿旗下的。进入系统,等待分配最优主机)
继续GET,又是一个302:
http://120.39.183.37/edge.v.iask.com/123557717.hlv?KID=sina,viask&Expires=1389283200&ssig=uoYS0MDSlU&corp=2&wshc_tag=0&wsiphost=ipdbm
(这是最后的地址了,东西就在这台服务器上。)
估计是,由于获取内容并不通过域名检验来源,而且为了省钱,网宿并没有使用大量IP地址,不会像Cloudflare或Google一口气就包整个C段啥的。
但是,由于CDN并不关心传输了是什么东西(业务上会分,服务器有优化,但是并不关心具体内容),这个IP在复用的时候,被某钓鱼网站摊上了。这个钓鱼网站不是别人,是一个所谓的“宝软网”。查看DNS记录后,估计是个人都会觉得,这是Sina的小号吧。而且这个IP也为新浪爱问服务,于是,里面的恶意软件让这个IP中招了。
在举报后,Google直接将所有到这个IP的连接都扔进了黑名单。但是CDN在分配节点的时候不知道,于是所有在上面来回跳转后遇到黑名单IP的人都躺枪了。。。
解决办法:
1)网宿预先审查将分发的内容,将钓鱼站清理出去,同时找Google说明情况。肯定治本。
但是我不喜欢审查。。。作为基础服务提供商,我认为其审查网络内容是很不明智的,同时也是对互联网信息自由流动的侵犯。
或者
2)网宿向Google报上自己所有的IP段,要求白名单处理。听起来很奇怪,但是既然Cloudflare没听说过这种现象,那么肯定是有过什么协商。Cloudflare上面的钓鱼站更多,但是没听说他们的IP被黑名单。
也能一劳永逸,毕竟作为中国最大的CDN,网宿是可以与国际顶级CDN,例如Akamai,Amazon Cloudfront等齐名的大公司。
至于普通用户:
顺手点一下“举报误判”,人多了,Google自然会发现不对劲的。
无辜躺枪的A/B站:
A站。。。不评论
B站。。。不是有自己的CDN么?用自己的CDN顶上吧。

申请StartSSL的证书,在Nginx上启用,以及Firefox问题处理

StartSSL的免费证书乃神器。签一下,立即正规多了。虽然一些小地方不支持,但是也无伤大雅。
 
教程很多很多,简单说:
 
1.注册(别以为不真实的信息能混过去,没人会拿证书开玩笑的),安装浏览器的证书。这个要备份好,因为不可能恢复。
 
创建个私钥。
 
2.创建请求。
 
OpenSSL必须要有,如果你用LNMP,这个是已经有的。
 

openssl req -new -newkey rsa:2048 -nodes -out ssl.csr -keyout ssl.key

 
 
创建请求。信息要和注册时一样。
 

cat ssl.csr

 
 
这个就是请求了。
 
3.绑定域名。
 
有人说需要取消一下Whois保护,其实应该不用。大部分的保护都会转发你的邮件(例如Namecheap的WhoisGuard),这个只需要接一个验证码而已。
 
4.取证书。Copy出来。
 
5.准备证书。
 
这里有个重要提示,如果不这么做,Firefox会报错,很多需要curl的软件不能用。
 
网上教的办法对,但是有点毛病。
 
这么做:
 

openssl rsa -in ssl.key -out ssl2.key

 
 
这步解密Key,免得来回输密码。
 
避免偷窥:
 

chmod 600 ssl2.key

 
 
拽StartSSL的根证书和Class1证书:
 

wget http://www.startssl.com/certs/ca.pem
wget http://www.startssl.com/certs/sub.class1.server.ca.pem

 
 
合并:

cat ssl2.crt sub.class1.server.ca.pem ca.pem > ssl3.crt

 
 
无论你用什么软件,打开看一眼。今天在这个地方浪费了几个小时。
 
这个文件的格式必须是:
-----BEGIN CERTIFICATE-----
***
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
***
-----END CERTIFICATE——
-----BEGIN CERTIFICATE-----
***
-----END CERTIFICATE——
 
[warning]-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----中间必须空行!否则会直接报错![/warning]
 
6.去Nginx的conf修改。
 
估计大家都是LNMP,改域名的就行。
 
加上:

		listen 443;
		ssl on;
		ssl_certificate /***.crt;
		ssl_certificate_key /***.key;
		include wordpress.conf;
		location ~ .*\.(php|php5)?$
			{
				try_files $uri =404;
				fastcgi_pass  unix:/tmp/php-cgi.sock;
				fastcgi_index index.php;
				include fcgi.conf;
				fastcgi_param  HTTPS on;
			}

 
 
位置可以随便,放在web目录外吧。这样不被getshell就基本不怕。
 
你的东西现在应该畅通无阻了。

修理不听话的Yunio,外加评论插件

      No Comments on 修理不听话的Yunio,外加评论插件

老机器,还是熟悉的系统,还是熟悉的速度。
准备入手个KVM看看,LET询价中。。。
 
Yunio在Centos下各种不听话。思考再三,重装一下。
 
遇到个奇葩事情:
 
Yunio CentOS 32x 3.0.7 无法启动。
 
先说安装:需要个库 libnautilus-extension.so.1   。
 
安装:yum install nautilus-open-terminal
 
解决。
 
Yunio不听话的办法:
 
敲一句  export LC_ALL=“en_US.UTF-8"  然后命令行敲yunio。
 
最近评论启用了新插件,希望能挡住一些垃圾评论。被误杀的请邮件吧。。。

黑科技:直接挪用B站弹幕池+吐槽

      No Comments on 黑科技:直接挪用B站弹幕池+吐槽

简单的弹幕播放器,不再受制于人。
同B站共享弹幕,还可以发送。怎一个爽字了得。
需要有直链,这样最好。会难得倒你吗?
装个swf插件。
[kml_flashembed publishmethod="static" fversion="8.0.0" movie="http://网站/wp-content/MukioPlayerPlus.swf?file=这里是文件直链,如果里面有符号,弄个短网址就成&cid=视频反查cid的办法之前N篇blog都有了,自己看去&type=video&sort=new&state=normal&autostart=false" width="600" height="600" targetclass="flashmovie" quality="high" scale="noscale" allowfullscreen="true"]
Get Adobe Flash player
[/kml_flashembed]
舒服了吧。
最近在高速迭代。
https://github.com/superwbd/Mukioplayer-Py-Mac
https://github.com/superwbd/ABPlayerHTML5-Py--nix
基本要的都实现了。还有什么需要的呢?GUI?

Biligrab 0.2: OSX与Linux下自动抓B站视频和弹幕的东西

新版:http://www.cnbeining.com/?p=410  增加了海外源功能。
 
差不多是最终版了。
自己抓,自己建立文件夹,自己改名,自己下载,自己合并,自己清理,自己弄弹幕。
国内外都友好。(联通你个缺大德的东西,没有你我根本不用写这么多,尼玛死。。。)
API化,不怕封锁。
源地址获取双保险,cid获取双保险。再不行的话,我也没辙了。
需要aria2c,ffmpeg。
我在OSX上写的,并测试成功。Linux也能用。Windows嘛,请用AcDown,然后自己合并合并。
 
已知问题:
极其极端情况下,下载失败。我也不知道为什么了。。。应该是sina的CDN问题吧。

'''
Biligrab 0.2
Beining@ACICFG
cnbeining[at]gmail.com
MIT licence
'''
import sys
import os
from StringIO import StringIO
import gzip
import urllib2
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
def main(vid, p):
    cid = 0
    title = ''
    partname = ''
    biliurl = 'http://api.bilibili.tv/view?type=xml&appkey=876fe0ebd0e67a0f&id=' + str(vid) + '&page=' + str(p)
    videourl = 'http://www.bilibili.tv/video/av'+vid+'/index_'+p+'.html'
    print('Fetching webpage...')
    request = urllib2.Request(biliurl)
    response = urllib2.urlopen(request)
    data = response.read()
    data_list = data.split('\n')
    for lines in data_list:
        if 'cid' in lines:
            cid = lines[7:-6]
            print('cid is ' + str(cid))
        if 'partname' in lines:
            partname = lines[12:-11]
            print('partname is ' + str(partname))
        if 'title' in lines:
            title = lines[9:-8]
            print('title is ' + str(title))
    if cid is 0:
        print('Cannot find cid, trying to do it brutely...')
        print('Fetching webpage...')
        request = urllib2.Request(videourl)
        request.add_header('Accept-encoding', 'gzip')
        response = urllib2.urlopen(request)
        if response.info().get('Content-Encoding') == 'gzip':
            buf = StringIO( response.read())
            f = gzip.GzipFile(fileobj=buf)
            data = f.read()
        data_list = data.split('\n')
        #Todo: read title
        for lines in data_list:
            if 'cid=' in lines:
                cid = lines.split('&')
                cid = cid[0].split('=')
                cid = cid[-1]
                print('cid is ' + str(cid))
                break
    if cid is 0:
        print('Cannot get cid anyway, you fix it, I am off to get some coffee...')
        exit()
    #start to make folders...
    if title is not '':
        folder = title
    else:
        folder = cid
    if partname is not '':
        filename = partname
    elif title is not '':
        filename = title
    else:
        filename = cid
    folder_to_make = os.getcwd() + '/' + folder
    if not os.path.exists(folder_to_make):
        os.makedirs(folder_to_make)
    os.chdir(folder_to_make)
    print('Fetching XML...')
    os.system('curl -o "'+filename+'.xml" --compressed  http://comment.bilibili.tv/'+cid+'.xml')
    #os.system('gzip -d '+cid+'.xml.gz')
    print('The XML file, ' + filename + '.xml should be ready...enjoy!')
    print('Finding video location...')
    #try api
    request = urllib2.Request('http://interface.bilibili.tv/playurl?cid='+cid, headers={ 'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache' })
    response = urllib2.urlopen(request)
    data = response.read()
    data_list = data.split('\r')
    #print(data_list)
    rawurl = []
    vid_num = 0
    for lines in data_list:
        lines = str(lines)
        if '<url>' in lines:
            if 'youku' in lines:
                url = lines[17:-9]
            elif 'sina' in lines:
                url = lines[16:-9]
            rawurl.append(url)
        if 'backup_url' in lines:
            break
    if rawurl is []:  #hope this never happen
        request = urllib2.Request('http://www.flvcd.com/parse.php?kw='+videourl)
        request.add_header('Accept-encoding', 'gzip')
        response = urllib2.urlopen(request)
        data = response.read()
        data_list = data.split('\n')
        for items in data_list:
            if 'name' in items and 'inf' in items and 'input' in items:
                c = items
                rawurl = c[39:-5]
                rawurl = rawurl.split('|')
                break
    #print(rawurl)
    vid_num = len(rawurl)
    #print(rawurl)
    print(str(vid_num) + ' videos to download, fetch yourself a cup of coffee...')
    for i in range(vid_num):
        print('Downloading ' + str(i+1) + ' of ' + str(vid_num) + ' videos...')
        #print('aria2c -llog.txt -c -s16 -x16 -k1M --out '+str(i)+'.flv "'+rawurl[i]+'"')
        os.system('aria2c -larialog.txt -c -s16 -x16 -k1M --out '+str(i)+'.flv "'+rawurl[i]+'"')
    f = open('ff.txt', 'w')
    ff = ''
    os.getcwd()
    for i in range(vid_num):
        ff = ff + 'file \'' + str(os.getcwd()) + '/'+ str(i) + '.flv\'\n'
    ff = ff.encode("utf8")
    f.write(ff)
    f.close()
    print('Concating videos...')
    os.system('ffmpeg -f concat -i ff.txt -c copy "'+filename+'".mp4')
    os.system('rm -r ff.txt')
    for i in range(vid_num):
        os.system('rm -r '+str(i)+'.flv')
    print('Done, enjoy yourself!')
    exit()
vid = str(input('av'))
p = str(input('P'))
main(vid, p)

 

如何使用PGP加密邮件等信息

      No Comments on 如何使用PGP加密邮件等信息

http://www.gnupg.org/
 
邮件服务端,建议ThunderBird。
 
理论上,一切的往来都应该加密。
 
Gmail,建议使用开发版的webpg。https://github.com/kylehuff/webpg-chrome/wiki#install-development-build
它可以直接调用本地的加密,速度快,而且安全。
如果对加密要求更高,请停用自动保存草稿。
 
国内邮箱,Mailvelope可以在网页内加密,唯一的遗憾是不能签名。