1

您好,我想弄清楚如何使用 VBS 解析 RSS 提要并将内容显示到 cmd 中。我得到了一些我在网上找到的代码。这就是我到目前为止所得到的。

批处理文件:

:news
start scripts\xml\getxml.exe -N --directory-prefix=%temp% http://feeds.bbci.co.uk/news/rss.xml
:newscheck
if NOT EXIST %temp%\rss.xml (
ping 123.45.67.89 -n 1 -w 500 > nul.
goto newscheck
)
start scripts\news\parsebbcnews.vbs
ping 123.45.67.89 -n 1 -w 500 > nul.
:newsxmlparsecheck
if NOT EXIST %temp%\bbcnews.txt (
ping 123.45.67.89 -n 1 -w 500 > nul.
goto newsxmlparsecheck
)
set /p headline= <%temp%\bbcnews.txt
echo %headline%
%speech% "%headline%"
del %temp%\rss.xml
del %temp%\bbcnews.txt
goto start

然后这将启动 VBS:

    Dim xmlDoc, objNodeList, plot

Set wshShell = CreateObject( "WScript.Shell" )
tfolder =  wshShell.ExpandEnvironmentStrings("%TEMP%")
Set xmlDoc = CreateObject("Msxml2.DOMDocument")
xmlDoc.load(tfolder & "\rss.xml")
Set objNodeList = xmlDoc.getElementsByTagName("channel/item/description") 'Node to search for
Set objFSO = CreateObject("Scripting.FileSystemObject")

' Write all found results into forecast.txt
Const ForWriting = 2
Set objTextFile = objFSO.OpenTextFile _
    (tfolder & "\bbcnews.txt", ForWriting, True)
If objNodeList.length > 0 then
For each x in objNodeList
plot=x.Text
objTextFile.WriteLine(plot)
Next 'just remove this?
objTextFile.Close   
End If

'Extract todays data (first line) from 'forecast.txt' and write each data type to seperate line in today.txt
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile _
    (tfolder & "\bbcnews.txt", ForReading)
    strNextLine = objTextFile.Readline
    'currentsplit = Split(strNextLine , ", ")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile(tfolder & "\headline.txt", ForWriting, True)  
    objTextFile.WriteLine(strNextLine)

这从 bbc 获得 1 个新闻 rss 提要。我还希望显示多个提要。

我没有创建此代码,所以我不知道如何获取脚本和类似代码以从不同站点获取 rss。所以基本上我想知道如何使用 vb-script 执行此操作并将其显示在 cmd 中。

4

2 回答 2

2

如果您只对顶部标题感兴趣,则应使用“channel/item/title”而不是“channel/item/description”。对于许多提要,描述都使用 HTML 进行了丰富,因此打印第一行可能对您没有任何好处。

您可以将这两个脚本简化为以下内容:

Sub PrintTopHeadline(feed)
  Set req = CreateObject("MSXML2.XMLHTTP.3.0")
  req.Open "GET", feed, False
  req.Send

  Set xml = CreateObject("Msxml2.DOMDocument")
  xml.loadXml(req.responseText)
  WScript.StdOut.WriteLine xml.getElementsByTagName("channel/item/title")(0).Text
End Sub

PrintTopHeadline "http://feeds.bbci.co.uk/news/rss.xml"
PrintTopHeadline "http://news.google.com/news?ned=us&topic=h&output=rss"
...

但是,您必须使用 调用脚本cscript.exe才能打印命令行输出:

cscript //NoLogo feeds.vbs

编辑:为了显示来自提要的更多标题,您需要添加一个循环PrintTopHeadline(),如下所示:

For i = 0 To 4
  WScript.StdOut.WriteLine xml.getElementsByTagName("channel/item/title")(i).Text
Next

可以通过以下方式删除 HTML 标签:

descr = xml.getElementsByTagName("channel/item/description")(0).Text

Set re = New RegExp
re.Pattern = "\s*<.+?>\s*"
re.Global  = True

descr = Trim(re.Replace(descr, " "))

但是,您需要额外的代码来将HTML 实体转换回纯文本,例如:

descr = Replace(descr, "&quot;", """")
descr = Replace(descr, "&ntilde;", "ñ")
...
于 2012-10-14T13:55:15.530 回答
0

此页面包含一些可以帮助您的信息。篇幅比较大,这里就不重新发了。

具体来说,这是他们创建的 VBscript 类的链接。是使用该类的示例代码。

于 2012-10-14T04:32:07.440 回答