分页: 2 / 3

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

发表于 : 2011-08-29 9:25
fnan
我就是我2 写了::em06 接受批评. 当时确实没有想到这个问题.页面分析真是失败.哎

代码: 全选

sed -rn '/>公告<\/b>/,/>主题<\/b>/d;/<b>置顶.<\/b>/d;/<b>投票.<\/b>/d;s/.*"topictitle">(.{1,10}).*<\/a>.*/\1\.../p' forum.dat | head -5 >title.dat
#然后作者名字匹配又如何?

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

发表于 : 2011-08-29 14:14
我就是我2
fnan 写了:
我就是我2 写了::em06 接受批评. 当时确实没有想到这个问题.页面分析真是失败.哎

代码: 全选

sed -rn '/>公告<\/b>/,/>主题<\/b>/d;/<b>置顶.<\/b>/d;/<b>投票.<\/b>/d;s/.*"topictitle">(.{1,10}).*<\/a>.*/\1\.../p' forum.dat | head -5 >title.dat
#然后作者名字匹配又如何?
得重新设计算法.

以前没注意到"置顶"和"公告"的小图标
:em20 :em20 :em20
不用理会投票什么的. 只有两种特殊主题 announce 和 sticky
只需要统计两种小图标一共出现的次数就行了. 当然要减2 ,因为最下面的是示例 "置顶"和"公告" 各有一
# 不登陆,抓到的页面,主题的小图标都是 灰色 即"已读"
[bash]
#!/bin/bash
[ -f ~/.forumstatus.dat ] || touch ~/.forumstatus.dat
old=`cat ~/.forumstatus.dat`
[ -d /tmp/forumshell ] || mkdir /tmp/forumshell
cd /tmp/forumshell
while : ; do
curl -s "viewforum.php?f=21" 2>/dev/null >forum.dat
delnum=$(expr $(grep -c announce_read.gif forum.dat ) + $(grep -c sticky_read.gif forum.dat ) - 2)
shownum=5
begin=`expr $delnum + 1`
end=`expr $delnum + $shownum`
sed -rn 's/.*"topictitle">(.{1,10}).*<\/a>.*/\1\.../p' forum.dat | sed -n "$begin,$end"p > title.dat
sed -nr 's/.*class="topicdetails"><.*>(.*)<\/a>$/\1/p' forum.dat | sed -n "$begin,$end"p >name.dat
sed -nr 's/.*"topicdetails" style.* (.*)<\/p>/@\1/p' forum.dat | sed '1~2d' | sed -n "$begin,$end"p >last.dat
new=`awk '{printf $0 ;getline <"name.dat";print}' title.dat | awk '{printf $0 ;getline <"last.dat";print}'`
[ "$new" = "$old" ] || notify-send "$new"
old="$new"
echo "$old" >~/.forumstatus.dat
sleep 300
done
[/bash]
可能还是失败... :em06

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

发表于 : 2011-08-29 19:57
fnan
不是找到公告贴在>公告<\/b>/,/>主题<\/b>之间吗,算出公告置顶贴总数,作为参数传给sed选行,比图标可靠。

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

发表于 : 2011-08-29 21:05
我就是我2
fnan 写了:不是找到公告贴在>公告<\/b>/,/>主题<\/b>之间吗,算出公告置顶贴总数,作为参数传给sed选行,比图标可靠。
那个相当复杂.我考虑过的.
不打印的主题除了公告和置顶, 还有置顶的投票. 在不考虑投票的情况下是可以的.

公告主题数量是可以通过 >公告<\/b>/,/>主题<\/b> 计算出来的. 置顶主题也只需要统计 >置顶.<\/b> 即可.

投票主题没有特殊之处, 可能作为置顶主题(没有置顶二字),也可能是普通主题, 单纯的从标题入手,无法对两者进行区分 这个问题在老旧版本一区能够得到体现
使用图标能够进行这种区分

关于图标是否可靠.
在目前phpbb的默认论坛css style下, 它属于topic的组成部分. 在不取消以图标表示 read/unread之前是它有效的,可靠的.
topic由以下元素组成:
topic类型及状态(以图标表示 read/unread 以及它是announce 还是sticky 或者是普通主题 ) 标题 作者 发表时间 回复总数 阅读次数 最新回复 最新回复时间
要不要减去2, 要看具体的css style.
参考了同样是使用phpbb的论坛

http://www.phpbbchina.com/forum/viewforum.php?f=1
http://www.phpbb.com/community/viewforu ... c74d0b6ef4
http://www.mysnooker.cn/bbs/forum76.htm ... ff9f3070af
http://www.archlinuxcn.org/viewforum.php?f=43

不过简单使用gif显得有点武断.
styles\/.*\/imageset\/announce_.*
styles\/.*\/imageset\/sticky_.*

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

发表于 : 2011-08-29 21:50
sunfish
用命令可以实现的,
join 命令可以将两个文件有相同资料的行拼接在一起
paste命令直接按行拼接文件

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

发表于 : 2011-08-29 21:52
我就是我2
sunfish 写了:用命令可以实现的,
join 命令可以将两个文件有相同资料的行拼接在一起
paste命令直接按行拼接文件
谢谢. :em06

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

发表于 : 2011-08-29 22:19
fnan
投票主题没有特殊之处, 可能作为置顶主题(没有置顶二字),也可能是普通主题, 单纯的从标题入手,无法对两者进行区分
#如此就不重要了,难得一见的出现又何妨,多设两个显示主题就是,可大为简化算法。
paste 把行分得太远了,不介意的很能简化代码。

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

发表于 : 2011-08-29 22:26
我就是我2
难得一见的出现又何妨
:em01
paste是用tabs来分的. 所以还是要tr一下.

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

发表于 : 2011-08-29 22:30
fnan
zenity里显示不错,paste很好。
zenity里显示不错,paste很好。

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

发表于 : 2011-08-29 22:31
sunfish
可以改分割符的,看man吧很短

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

发表于 : 2011-08-29 22:37
我就是我2
sunfish 写了:可以改分割符的,看man吧很短
:em20 我man过它.不过只看了介绍...
paste -d "" name.dat last.dat
第1000贴了 :em20

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

发表于 : 2011-08-29 22:40
fnan
现在论坛里有没有投票贴,看一下。

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

发表于 : 2011-08-29 22:47
我就是我2
fnan 写了:现在论坛里有没有投票贴,看一下。
你是说抓取最新投票主题?
以图标来区分是能够抓得到非sticky的投票的.恕我多言

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

发表于 : 2011-08-29 22:56
fnan
已经可以用了,等投票贴出现再看看效果(什么时候?)

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

发表于 : 2011-08-29 22:58
fnan
我就是我2 写了:
fnan 写了:现在论坛里有没有投票贴,看一下。
你是说抓取最新投票主题?
以图标来区分是能够抓得到非sticky的投票的.恕我多言
#如果不出现在置顶位置是没有意义的。