REBOL [ Title: "Wikipedia Library" Date: 2-Jan-2003/19:53:46+1:00 Version: 1.0.0 File: %wikilib.r Author: "Athymik" Purpose: "Provide tools in Rebol to interact with Wikipedia" Email: athymik@ifrance.com Category: [4 web util text tcp net lib] ] WikiLib: make object! [ wublck: ["http://" ".wikipedia.org/w/wiki.phtml?title=" "&action=submit"] url: func ["Create the url" wiki titre] [return to-url rejoin [wublck/1 wiki wublck/2 (url-encode titre) wublck/3]] time: func ["Get the time in Wiki format" /local now_year now_month now_day ntsp wt] [ now_year: to-string now/year now_month: to-string now/month now_day: to-string now/day if (length? now_month) = 1 [now_month: rejoin ["0" now_month]] if (length? now_day) = 1 [now_day: rejoin ["0" now_day]] ntsp: parse (to-string now/time) ":" ntsp/1: to-string ((to-integer ntsp/1) - time-lag) wt: rejoin [now_year now_month now_day rejoin ntsp] return wt ] get-ts: func ["Get the timestamp of an article" wiki article /local raw_txt sraw_txt ts] [ raw_txt: read to-url rejoin ["http://" wiki ".wikipedia.org/w/wiki.phtml?title=" (url-encode article) "&action=edit"] set [sraw_txt ts] "" parse/all raw_txt [ thru "" copy sraw_txt to "" ] parse/all sraw_txt [ thru {" replace/all texte """ {"} replace/all texte "&" {&} return texte ] url-encode: func [ {URL-encode a string} data "String to encode" /local new-data ][ new-data: make string! "" normal-char: charset [ #"A" - #"Z" #"a" - #"z" #"@" #"." #"*" #"-" #"_" #"0" - #"9" ] if not string? data [return new-data] forall data [ append new-data either find normal-char first data [ first data ][rejoin ["%" to-string skip tail (to-hex to-integer first data) -2]] ] return new-data ] get: func ["Get an article from wikipedia" wiki titre /local pagedef] [ pagedef: copy "" page: read url wiki (url-encode titre) parse page [thru ""] pagedef: parse-html-entities pagedef return reduce [pagedef (get-ts wiki titre)] ] append: func ["Append text to an article" wiki titre texte sommaire modif_mineure /local z] [ z: wikilib/get wiki titre append z texte wikilib/post wiki titre z sommaire modif_mineure (get-ts wiki titre) ] ]