分页: 3 / 3

Re: 关注shell区最新回复/主题·脚本练习

发表于 : 2011-08-29 23:01
fnan
这样就如果出现在置顶位置就干掉,下面就放过。

Re: 关注shell区最新回复/主题·脚本练习

发表于 : 2011-08-29 23:22
fnan
我的版本写好了,要看的时候就说一声。

Re: 关注shell区最新回复/主题·脚本练习

发表于 : 2011-08-29 23:25
我就是我2
fnan 写了:我的版本写好了,要看的时候就说一声。
:em06 当然要看, zenity 很少接触.
我想添加显示回复数. :em06
sed -nr 's/^.*row1.*"topicdetails">(.*)<\/p>.*$/re:\1/p' forum.dat | sed -n "$begin,$end"p >re.dat
paste -d "" title.dat re.dat name.dat last

Re: 关注shell区最新回复/主题·脚本练习

发表于 : 2011-08-29 23:40
fnan
#!/bin/bash

old=''
while :;do
fw=$(curl -s "viewforum.php?f=21" 2>/dev/null)
line=$(sed -rn '/topictitle/H;${g;s/(.*<b>置顶.<).*/\1/p}' <<<"$fw" |wc -l)
echo "line=$line"
a=$(sed -nr 's/.*"topictitle">(.{1,20}).*<\/a>.*/\1.../p' <<<"$fw" |sed -n "$line,+6p")
b=$(sed -nr 's/.*"topicdetails"><.*>(.*)<\/a>$/\1/p' <<<"$fw" | sed -n "$line,+6p")
c=$(sed -nr 's/.*"topicdetails" style.* (.*)<\/p>/\1/p' <<<"$fw"|sed -n 'n;p'|sed -n "$line,+6p")
unset fw
new=$(paste <(echo "$a") <(echo "$b") <(echo "$c"))
[[ "$new" == "$old" ]] || zenity --info --title="shell区最新回复七条" --text="$new"
old="$new"
sleep 600
done
#我没有用文件,全是变量。用位置算法可以一次处理一大块。
我想添加显示回复数.
#这么多信息。

Re: 关注shell区最新回复/主题·脚本练习

发表于 : 2011-08-29 23:50
我就是我2
使用变量比我的好很多,不用写硬盘.我想不起来使用 <<< here
使用zenity要点确定. 我使用kde4 通知区域在下方.我还是用notify-send得了.

Re: 关注shell区最新回复/主题·脚本练习

发表于 : 2011-08-31 20:12
fnan
使用zenity要点确定. 我使用kde4 通知区域在下方.我还是用notify-send得了.
#算法之外,什么都无所谓。

Re: 关注shell区最新回复/主题·脚本练习

发表于 : 2011-09-06 13:08
我就是我2
代码改进
最多只显示5条回复,也就是说回复数<=5.
经查,notify-send兼容html语法,所以以红色显示回复。

代码: 全选

...
	out=$(diff <(echo "$new") <(echo "$old") | grep '^<' | sed 's/^</<br\/><font color=red>/g;s/$/<\/font>/g')
	[ "$new" = "$old" ] || notify-send "$out"
	old="$new"
	sleep 480
done

Re: 关注shell区最新回复/主题·脚本练习

发表于 : 2011-09-14 22:56
我就是我2
新问题及解法:有时会因网络问题而抓取不全网页,这在浏览器上也出现过,若浏览器则刷新一次或者多次,所以希望能够通过抓取多次来减少错误。
我用了论坛的cdn加速程序。

代码: 全选

data0=$(curl x 127.0.0.1:8080 -A "Mozilla/6.0" -s "http://forum.ubuntu.org.cn/viewforum.php?f=21" 2>/dev/null)
data1=$(sleep 5s;curl x 127.0.0.1:8080 -A "Mozilla/6.0" -s "http://forum.ubuntu.org.cn/viewforum.php?f=21" 2>/dev/null)
if [ ${#data0} -gt ${#data1} ];then 
    data="$data0"
else
    data="$data1"
fi