不包括单个用户的维基百科站点摘要提要
Site summary feed of Wikipedia excluding a single user
维基百科主页上有一个“最近更改”提要。
同样可以作为 ATOM 提要使用。也可以通过转到 user_account 并选择提要来观看单个用户。
但是除了一个(或两个)用户之外,有什么方法可以访问提要吗?
更新:使用 xmllint 我可以提取作者姓名。
wget https://hunspell.s3.amazonaws.com/temp/out.txt
xmllint --xpath "//*[name() = 'feed']/*[name() = 'entry']/*[name() = 'author']/*[name() = 'name']" out.txt
但我想从该 Feed 中排除一两个作者。例如,Clarityfiend 和 Shortride。
更新:
当我尝试 xpath 命令时,它在一个参数(英文)下运行良好。但它因 Unicode 参数而失败:
wget https://hunspell.s3.amazonaws.com/todel/out.txt
工作:
xpath -e "/feed/entry[author/name!='Aditya tamhankar' and author/name!='Sushant Madhale']" out.txt > a.txt
无效:
xpath -e "/feed/entry[author/name!='Aditya tamhankar' and author/name!='संतोष गोरे']" out.txt > filtered.txt
第二作者的条目仍然存在于过滤后的输出中。
grep 'संतोष गोरे' filtered.txt
第二个命令可以使用 Unicode,但它没有正确显示一条记录...
# (t1='Aditya tamhankar' ; t2='संतोष गोरे'; echo 'setns x=http://www.w3.org/2005/Atom'; echo "cat /x:feed/x:entry[not(x:author/x:name[.='$t1'] | x:author/x:name[.='$t2'])]/descendant::*[self::x:updated or self::x:title or descendant-or-self::x:name]/text()") | xmllint --shell out.txt | tail -n +4 | gawk '{ if(NR % 6 == 0){ print [=15=] "¬"} else { print [=15=] }}' |gawk 'BEGIN{FS="\n -------\n" ; RS="\n -------¬\n"; OFS="||"} { print ,, }END{ print FNR}'
除了这条以外的所有记录都是正确的:
152.238.27.63
/ >
||2021-07-15T20:14:03Z||
19
您可以安装 AbuseFilter and define a rule that will tag 所有人所做的编辑,但一两个用户除外(在过滤器中使用变量 user_name
。
然后您可以使用该标签过滤最近的更改。 Atom 提要的 URL 最近更改标记,例如“Android app edit”,将如下所示:https://en.wikipedia.org/w/api.php?tagfilter=android+app+edit&urlversion=1&action=feedrecentchanges&feedformat=atom.
当然,如果您的意思不是 Wikipedia 而是您控制的 wiki,这当然成立。
或
您可以提供所有最近的更改(例如 https://en.wikipedia.org/w/api.php?urlversion=1&action=feedrecentchanges&feedformat=atom) and filter them with an XPath like /feed/entry[author/name[text()!='Linason Blessing']]
to exclude changes by Linason Blessing. See the saved XPath。
我建议您从终端使用 xpath
工具(Ubuntu 软件包 libxml-xpath-perl
)。它支持 XPath 2:
wget -O - https://hunspell.s3.amazonaws.com/temp/out.txt | xpath -e "/feed/entry[author/name!='Clarityfiend' and author/name!='Shortride']" > filtered.txt
UPD:如果输入缓冲区出现内存不足错误,请将提要下载到文件而不是标准输出中:
wget https://hunspell.s3.amazonaws.com/temp/out.txt
xpath -e "/feed/entry[author/name!='Clarityfiend' and author/name!='Shortride']" out.txt > filtered.txt
XPath 查询将列出作者姓名不等于 Clarityfiend 或 Shortride 的所有条目。条目将保存在 filtered.txt
.
中
这个使用 xmllint
的 Bash 单行代码将按 author/name
过滤,其中包含 t1
和 t2
变量中定义的 2 个字符串,并输出 update||title||author
值
(t1='संतोष गोरे' ; t2='ñandú'; echo 'setns x=http://www.w3.org/2005/Atom'; echo "cat /x:feed/x:entry[not(x:author/x:name[contains(text(),'$t1')] | x:author/x:name[contains(text(),'$t2')])]/descendant::*[self::x:updated or self::x:title or descendant-or-self::x:name]/text()") | xmllint --shell wiki.xml | tail -n +3 | gawk '!/ -------/ { if(NR % 3 == 0){ [=10=]=[=10=] "\n"}else{[=10=]=[=10=]} { print }}' | gawk 'BEGIN{FS="\n";RS="\n\n"; OFS="||"} { print ,, }END{ print FNR}'
过滤表达式类型:x:author/x:name[not(contains(text(),'$t1'))]
结果:
2021-07-15T22:34:54Z||Fabiano Leismann||Simione001
2021-07-15T22:34:53Z||Arnold Henry Mason||4meter4
2021-07-15T22:34:53Z||User talk:MrOllie||152.168.57.106
...
...
这将执行相同的操作,但在 author
上进行完全匹配
(t1='संतोष गोरे' ; t2='ñandú'; echo 'setns x=http://www.w3.org/2005/Atom'; echo "cat /x:feed/x:entry[not(x:author/x:name[.='$t1'] | x:author/x:name[.='$t2'])]/descendant::*[self::x:updated or self::x:title or descendant-or-self::x:name]/text()") | xmllint --shell wiki.xml | tail -n +3 | gawk '!/ -------/ { if(NR % 3 == 0){ [=12=]=[=12=] "\n"}else{[=12=]=[=12=]} { print }}' | gawk 'BEGIN{FS="\n"; RS="\n\n"; OFS="||"} { print ,, }END{ print FNR}'
过滤表达式类型:x:author/x:name[not(.='$t1')]
仅过滤一位作者:
(t1='संतोष गोरे'; echo 'setns x=http://www.w3.org/2005/Atom'; echo "cat /x:feed/x:entry[not(x:author/x:name[.='$t1'])]/descendant::*[self::x:updated or self::x:title or descendant-or-self::x:name]/text()") | xmllint --shell wiki.xml | tail -n +3 | gawk '!/ -------/ { if(NR % 3 == 0){ [=13=]=[=13=] "\n"}else{[=13=]=[=13=]} { print }}' | gawk 'BEGIN{FS="\n"; RS="\n\n"; OFS="||"} { print ,, }END{ print FNR}'
或者生成一个UUID并分配给t2
;-)
维基百科主页上有一个“最近更改”提要。
同样可以作为 ATOM 提要使用。也可以通过转到 user_account 并选择提要来观看单个用户。 但是除了一个(或两个)用户之外,有什么方法可以访问提要吗?
更新:使用 xmllint 我可以提取作者姓名。
wget https://hunspell.s3.amazonaws.com/temp/out.txt
xmllint --xpath "//*[name() = 'feed']/*[name() = 'entry']/*[name() = 'author']/*[name() = 'name']" out.txt
但我想从该 Feed 中排除一两个作者。例如,Clarityfiend 和 Shortride。
更新:
当我尝试 xpath 命令时,它在一个参数(英文)下运行良好。但它因 Unicode 参数而失败:
wget https://hunspell.s3.amazonaws.com/todel/out.txt
工作:
xpath -e "/feed/entry[author/name!='Aditya tamhankar' and author/name!='Sushant Madhale']" out.txt > a.txt
无效:
xpath -e "/feed/entry[author/name!='Aditya tamhankar' and author/name!='संतोष गोरे']" out.txt > filtered.txt
第二作者的条目仍然存在于过滤后的输出中。
grep 'संतोष गोरे' filtered.txt
第二个命令可以使用 Unicode,但它没有正确显示一条记录...
# (t1='Aditya tamhankar' ; t2='संतोष गोरे'; echo 'setns x=http://www.w3.org/2005/Atom'; echo "cat /x:feed/x:entry[not(x:author/x:name[.='$t1'] | x:author/x:name[.='$t2'])]/descendant::*[self::x:updated or self::x:title or descendant-or-self::x:name]/text()") | xmllint --shell out.txt | tail -n +4 | gawk '{ if(NR % 6 == 0){ print [=15=] "¬"} else { print [=15=] }}' |gawk 'BEGIN{FS="\n -------\n" ; RS="\n -------¬\n"; OFS="||"} { print ,, }END{ print FNR}'
除了这条以外的所有记录都是正确的:
152.238.27.63
/ >
||2021-07-15T20:14:03Z||
19
您可以安装 AbuseFilter and define a rule that will tag 所有人所做的编辑,但一两个用户除外(在过滤器中使用变量 user_name
。
然后您可以使用该标签过滤最近的更改。 Atom 提要的 URL 最近更改标记,例如“Android app edit”,将如下所示:https://en.wikipedia.org/w/api.php?tagfilter=android+app+edit&urlversion=1&action=feedrecentchanges&feedformat=atom.
当然,如果您的意思不是 Wikipedia 而是您控制的 wiki,这当然成立。
或
您可以提供所有最近的更改(例如 https://en.wikipedia.org/w/api.php?urlversion=1&action=feedrecentchanges&feedformat=atom) and filter them with an XPath like /feed/entry[author/name[text()!='Linason Blessing']]
to exclude changes by Linason Blessing. See the saved XPath。
我建议您从终端使用 xpath
工具(Ubuntu 软件包 libxml-xpath-perl
)。它支持 XPath 2:
wget -O - https://hunspell.s3.amazonaws.com/temp/out.txt | xpath -e "/feed/entry[author/name!='Clarityfiend' and author/name!='Shortride']" > filtered.txt
UPD:如果输入缓冲区出现内存不足错误,请将提要下载到文件而不是标准输出中:
wget https://hunspell.s3.amazonaws.com/temp/out.txt
xpath -e "/feed/entry[author/name!='Clarityfiend' and author/name!='Shortride']" out.txt > filtered.txt
XPath 查询将列出作者姓名不等于 Clarityfiend 或 Shortride 的所有条目。条目将保存在 filtered.txt
.
这个使用 xmllint
的 Bash 单行代码将按 author/name
过滤,其中包含 t1
和 t2
变量中定义的 2 个字符串,并输出 update||title||author
值
(t1='संतोष गोरे' ; t2='ñandú'; echo 'setns x=http://www.w3.org/2005/Atom'; echo "cat /x:feed/x:entry[not(x:author/x:name[contains(text(),'$t1')] | x:author/x:name[contains(text(),'$t2')])]/descendant::*[self::x:updated or self::x:title or descendant-or-self::x:name]/text()") | xmllint --shell wiki.xml | tail -n +3 | gawk '!/ -------/ { if(NR % 3 == 0){ [=10=]=[=10=] "\n"}else{[=10=]=[=10=]} { print }}' | gawk 'BEGIN{FS="\n";RS="\n\n"; OFS="||"} { print ,, }END{ print FNR}'
过滤表达式类型:x:author/x:name[not(contains(text(),'$t1'))]
结果:
2021-07-15T22:34:54Z||Fabiano Leismann||Simione001
2021-07-15T22:34:53Z||Arnold Henry Mason||4meter4
2021-07-15T22:34:53Z||User talk:MrOllie||152.168.57.106
...
...
这将执行相同的操作,但在 author
(t1='संतोष गोरे' ; t2='ñandú'; echo 'setns x=http://www.w3.org/2005/Atom'; echo "cat /x:feed/x:entry[not(x:author/x:name[.='$t1'] | x:author/x:name[.='$t2'])]/descendant::*[self::x:updated or self::x:title or descendant-or-self::x:name]/text()") | xmllint --shell wiki.xml | tail -n +3 | gawk '!/ -------/ { if(NR % 3 == 0){ [=12=]=[=12=] "\n"}else{[=12=]=[=12=]} { print }}' | gawk 'BEGIN{FS="\n"; RS="\n\n"; OFS="||"} { print ,, }END{ print FNR}'
过滤表达式类型:x:author/x:name[not(.='$t1')]
仅过滤一位作者:
(t1='संतोष गोरे'; echo 'setns x=http://www.w3.org/2005/Atom'; echo "cat /x:feed/x:entry[not(x:author/x:name[.='$t1'])]/descendant::*[self::x:updated or self::x:title or descendant-or-self::x:name]/text()") | xmllint --shell wiki.xml | tail -n +3 | gawk '!/ -------/ { if(NR % 3 == 0){ [=13=]=[=13=] "\n"}else{[=13=]=[=13=]} { print }}' | gawk 'BEGIN{FS="\n"; RS="\n\n"; OFS="||"} { print ,, }END{ print FNR}'
或者生成一个UUID并分配给t2
;-)