F# 如何使用.NETCore从RSS源获取项目?
如何使用.NETCore从RSS源获取项目 以下代码似乎不起作用:F# 如何使用.NETCore从RSS源获取项目?,f#,.net-core,F#,.net Core,如何使用.NETCore从RSS源获取项目 以下代码似乎不起作用: open Microsoft.SyndicationFeed open Microsoft.SyndicationFeed.Rss [<Test>] let ``Get links from iTunes RSS Feed`` () = let url = "http://www.pwop.com/feed.aspx?show=dotnetrocks&filetype=master&tag
open Microsoft.SyndicationFeed
open Microsoft.SyndicationFeed.Rss
[<Test>]
let ``Get links from iTunes RSS Feed`` () =
let url = "http://www.pwop.com/feed.aspx?show=dotnetrocks&filetype=master&tags=F%23"
use reader = XmlReader.Create(url)
let feedReader = RssFeedReader(reader)
let mutable linkTemplate = {
Title= ""
Url= ""
}
let links =
async {
let links = Collections.Generic.List<Link>()
while feedReader.Read() |> Async.AwaitTask |> Async.RunSynchronously do
match feedReader.ElementType with
| SyndicationElementType.Link ->
let item = feedReader.ReadLink() |> Async.AwaitTask |> Async.RunSynchronously
let link = { linkTemplate with Title= item.Title; Url= item.Uri.AbsolutePath }
links.Add(link)
| _ -> ()
return links
} |> Async.RunSynchronously
reader.Close()
System.Diagnostics.Debug.WriteLine(links.[0].Title)
links.[0].Title |> should not' (equal "")
打开Microsoft.SyndicationFeed
打开Microsoft.SyndicationFeed.Rss
[]
让“从iTunes RSS源获取链接”()=
让url=”http://www.pwop.com/feed.aspx?show=dotnetrocks&filetype=master&tags=F%23"
使用reader=XmlReader.Create(url)
让feedReader=RssFeedReader(读卡器)
让可变链接模板={
Title=“”
Url=“”
}
让链接=
异步的{
让links=Collections.Generic.List()
而feedReader.Read()|>Async.AwaitTask |>Async.RunSynchronously do
将feedReader.ElementType与匹配
|SyndicationElementType.Link->
让item=feedReader.ReadLink()|>Async.AwaitTask |>Async.RunSynchronously
让link={linkTemplate with Title=item.Title;Url=item.Uri.AbsolutePath}
links.Add(link)
| _ -> ()
返回链接
}|>Async.RunSynchronously
reader.Close()
System.Diagnostics.Debug.WriteLine(链接[0]。标题)
链接。[0]。标题|>不应“(等于”)
具体地说,项目被读取,但读取后没有实际数据。我按照建议使用了XElement类:
[<Test>]
let ``Get links from iTunes RSS Feed`` () =
let toLink (item:XElement) = {
Id = -1
ProfileId = "to be derived..."
Title= item.Element(XName.Get("title")) |> string
Url= item.Element(XName.Get("link")) |> string
Description = item.Element(XName.Get("description")) |> string
ContentType= Podcast |> contentTypeToString
Topics = []
IsFeatured= false
}
let baseAddress = "http://www.pwop.com/"
let url = "feed.aspx?show=dotnetrocks&filetype=master&tags=F%23"
use client = httpClient baseAddress
let response = client.GetAsync(url) |> Async.AwaitTask
|> Async.RunSynchronously
let links =
if response.IsSuccessStatusCode
then let text = response.Content.ReadAsStringAsync() |> Async.AwaitTask |> Async.RunSynchronously
XElement.Parse(text).Descendants(XName.Get("item")) |> Seq.toList |> List.map toLink
else []
links |> List.isEmpty |> should equal false
[]
让“从iTunes RSS源获取链接”()=
让toLink(项:XElement)={
Id=-1
ProfileId=“待派生…”
Title=item.Element(XName.Get(“Title”))|>string
Url=item.Element(XName.Get(“link”))|>string
Description=item.Element(XName.Get(“Description”))|>string
ContentType=Podcast |>contentTypeToString
主题=[]
IsFeatured=false
}
让baseAddress=”http://www.pwop.com/"
让url=“feed.aspx?show=dotnetrocks&filetype=master&tags=F%23”
使用client=httpClient基地址
让response=client.GetAsync(url)|>Async.task
|>异步运行
让链接=
if response.issucessStatusCode
然后让text=response.Content.ReadAsStringAsync()|>Async.AwaitTask |>Async.RunSynchronously
XElement.Parse(text).substands(XName.Get(“item”))|>Seq.toList |>List.map toLink
其他[]
links |>List.isEmpty |>应等于false
我发现仅仅使用HttpClient和XDocument就更容易了