member c.GetStringAsync(url) = async { let completeEvent = c.DownloadStringCompleted do c.DownloadStringAsync(new Uri(url)) let! args = Async.AwaitEvent(completeEvent) return args.Result }
let downloadPostIdsAsync (beginMonth : DateTime) (endMonth : DateTime) =
let downloadPostIdsAsync" (m : DateTime) = async { let webClient = new WebClient() let url = sprintf "http://www.cnblogs.com/JeffreyZhao/archive/%i/%i.html" m.Year m.Month
let! html = webClient.GetStringAsync(url)
let regex = @"EditPosts.aspx?postid=(d+)" return [ for m in Regex.Matches(html, regex) -> m.Groups.Item(1).Value |> Int32.Parse ] }
async { let! lists = Seq.initInfinite (fun i -> beginMonth.AddMonths(i)) |> Seq.takeWhile (fun m -> m <= endMonth) |> Seq.map downloadPostIdsAsync" |> Async.Parallel