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/description」ではなく「channel/item/title」を使用する必要があります。多くのフィードでは、説明が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 に答える