wangsisi 发表于 2011-11-23 16:52:14

mediawiki脚本自动发内容实现

相信很多公司都是在使用mediawiki做内部team的知识管理,同时也有一些边边角角的脚本去做诸如上线、报警一类的工作。经常会有这样的需求:在上线的时候自动更新wiki的一页内容。

实现起来很简单,只需要一个curl即可,mediawiki提供了http restful的接口,在api.php上,可以做很多事情,下面是实际使用的举例。

目标:上线脚本最后执行一下记录,更新wiki里的一页做为上线记录,Online logging包换的元素有:日期,项目,版本号,机器。

环境:安装了 curl的机器

实现细节(wiki.sh):

#! /bin/sh
OPS_APP=$1
shift
OPS_REV=$1
shift
OPS_SERVER=$1
OPS_TIME=`date`
echo "\nwrite to wiki"

TOKEN=`curl -s -d 'action=login&lgname=你的用户名&lgpassword=你的密码&format=json' http://你的wiki域名/wiki/api.php -D cookies.txt -b cookies.txt | sed -e 's/.*token":"//' -e 's/".*//'`

curl -s -d "action=login&lgname=你的用户名&lgpassword=你的密码&lgtoken=${TOKEN}&format=json" http://你的wiki域名/wiki/api.php -b cookies.txt -D cookies.txt > result

RET=`curl -s 'http://你的wiki域名/wiki/api.php?action=query&prop=info&intoken=edit&titles=Online_logging&indexpageids=&format=json' -b cookies.txt -D cookies.txt `

ETOKEN=`echo ${RET}|sed -e 's/.*token":"//' -e 's/".*//' -e 's/+/%2B/g'`
ETOKEN=`echo ${ETOKEN}|sed -e 's/\\\\/%5C/g'`
TIME=`echo ${RET}|sed -e 's/.*starttimestamp":"//' -e 's/".*//'`
URL="action=edit&title=Online_logging&section=0&appendtext=%0A|${OPS_TIME}||${OPS_APP}||${OPS_REV}||${OPS_SERVER} %0A |-&summary=robot change&starttimestamp=${TIME}&token=${ETOKEN}&format=json"

curl -s -d "${URL}" http://你的wiki域名/wiki/api.php -b cookies.txt -D cookies.txt > result
echo "\n**write successful**\n"

具体使用:
首先新建一个名字为Online_logging的页面,内容如下:

{|border="1" cellspacing="0"
|-
! 日期 || 项目 || 版本号 || 机器
|-

sh wiki.sh 项目 版本号 服务器ip
页: [1]
查看完整版本: mediawiki脚本自动发内容实现

美国主机评测网站