2012-10-13 76 views
1

您好,我試圖弄清楚如何使用VBS解析RSS feed並將內容顯示到cmd中。我得到了一些我在網上找到的代碼。這是我到目前爲止。如何通過VBS Script獲取RSS feed並在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) 

這得到1個新聞RSS飼料從BBC。我還想要顯示多個Feed。

我沒有創建這個代碼,所以我不知道我怎麼能得到腳本和類似的代碼,以獲得來自不同網站的rss。所以基本上我想要知道如何用vb腳本來做到這一點,並在cmd中顯示它。

回答

2

如果您只對頂級標題感興趣,您應該使用「頻道/項目/標題」而不是「頻道/項目/描述」。對於很多Feed而言,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 

編輯:要顯示來自Feed的更多標題,您需要添加循環到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 entities轉換回爲純文本,如:

descr = Replace(descr, "&quot;", """") 
descr = Replace(descr, "&ntilde;", "ñ") 
... 
+0

你好,謝謝你的工作。它顯示來自RSS源的1條標題。但林想知道如何獲得多個飼料顯示?就像現在它只顯示每個Feed的1個標題。我需要添加什麼來顯示可以說每個rss提要的5個Feed標題?還有一種方法可以讓我的描述在沒有所有HTML代碼的情況下顯示出來嗎? :) – Nivi

+0

我原來的答案已經有2個飼料。有關更多標題和刪除HTML,請參閱更新。 –

+0

謝謝:),成功了! – Nivi

0

This page有一些信息可以幫助你。這是相當龐大的,所以我不會在這裏重新張貼。

具體爲this is a link它們創建的VBscript類。 This是使用該類的示例代碼。

+0

這看起來不錯,謝謝,我試着用這個rss提要http://www.rottentomatoes.com/syndication/rss/in_theaters.xml頁面上的演示,它顯示了我想要的所有東西。但即時通訊有點失去了我應該如何實現這個批處理文件,然後使用像我的示例代碼的命令,並獲得相同的結果打印出來在cmd窗口運行批處理文件和命令時。任何幫助表示讚賞 – Nivi

+0

傷心,鏈接不再工作。我想這就是爲什麼他們說要發佈完整答案並引用你的參考。 – Zunair

相關問題