48 lines
1.1 KiB
Text
48 lines
1.1 KiB
Text
/* Web_scraping.wren */
|
|
|
|
import "./pattern" for Pattern
|
|
|
|
var CURLOPT_URL = 10002
|
|
var CURLOPT_FOLLOWLOCATION = 52
|
|
var CURLOPT_WRITEFUNCTION = 20011
|
|
var CURLOPT_WRITEDATA = 10001
|
|
|
|
var BUFSIZE = 16384 * 4
|
|
|
|
foreign class Buffer {
|
|
construct new(size) {}
|
|
|
|
// returns buffer contents as a string
|
|
foreign value
|
|
}
|
|
|
|
foreign class Curl {
|
|
construct easyInit() {}
|
|
|
|
foreign easySetOpt(opt, param)
|
|
|
|
foreign easyPerform()
|
|
|
|
foreign easyCleanup()
|
|
}
|
|
|
|
var buffer = Buffer.new(BUFSIZE)
|
|
var curl = Curl.easyInit()
|
|
curl.easySetOpt(CURLOPT_URL, "https://rosettacode.org/wiki/Talk:Web_scraping")
|
|
curl.easySetOpt(CURLOPT_FOLLOWLOCATION, 1)
|
|
curl.easySetOpt(CURLOPT_WRITEFUNCTION, 0) // write function to be supplied by C
|
|
curl.easySetOpt(CURLOPT_WRITEDATA, buffer)
|
|
|
|
curl.easyPerform()
|
|
curl.easyCleanup()
|
|
|
|
var html = buffer.value
|
|
var ix = html.indexOf("(UTC)")
|
|
ix = html.indexOf("(UTC)", ix + 1) // skip the site notice
|
|
if (ix == -1) {
|
|
System.print("UTC time not found.")
|
|
return
|
|
}
|
|
var p = Pattern.new("/d/d:/d/d, #12/d +1/a =4/d")
|
|
var m = p.find(html[(ix - 30).max(0)...ix])
|
|
System.print(m.text)
|