1

我需要将我的 Spotfire 数据表作为 csv 发送到 Web 服务,然后用服务响应替换数据表。我假设这可以通过 IronPython 在按钮后面完成。有什么想法吗?

4

2 回答 2

1

我已经解决了类似的问题,但我使用的方法与按钮后面建议的 IronPython 脚本不同。

在我的例子中,我创建了一个独立的 C#/ASP.NET Web 应用程序,并将 Spotfire Web Player 嵌入到该应用程序中。

我使用 Spotfire JavaScript API 在 Spotfire Web 嵌入部分中获取用户标记的数据,然后通过 JavaScript 调用将其发送到应用程序上的 web 服务。Web 服务进行了一些处理并将数据发送到其他目的地。

所以我的情况有点不同,但对于您的情况,您还可以考虑使用将 Spotfire Web 嵌入到您可以完全控制的某个应用程序中的方法,而不是使用 IronPython 脚本。

于 2015-03-06T13:54:11.487 回答
1

此代码回答了您要求的第二部分,但我认为它也可以作为第一部分的良好起点。

从 Web 服务添加 JSON 或 XML 数据

XML 示例

import clr
clr.AddReference('System.Data')
import System
from System import DateTime
from System.Data import DataSet, DataTable, XmlReadMode
from System.IO import StringReader, StreamReader, StreamWriter, MemoryStream, SeekOrigin
from System.Net import HttpWebRequest
from Spotfire.Dxp.Data import DataType, DataTableSaveSettings
from Spotfire.Dxp.Data.Import import TextFileDataSource, TextDataReaderSettings

# get stock quotes data in XML format from Yahoo Finance API
tickerSymbol = Document.Properties["TickerSymbol"]
startDate = DateTime.Today.AddMonths(-3).ToString("yyyy-MM-dd")
endDate = DateTime.Today.ToString("yyyy-MM-dd")
uri = "http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.historicaldata where symbol = %22" + tickerSymbol + "%22 and startDate = %22" + startDate + "%22 and endDate = %22" + endDate + "%22&format=xml&diagnostics=true&env=store://datatables.org/alltableswithkeys"
webRequest = HttpWebRequest.Create(uri)
response = webRequest.GetResponse()
streamReader = StreamReader(response.GetResponseStream())
xmlData = streamReader.ReadToEnd()
stringReader = StringReader(xmlData)

# read desired data fields from XML into a DataSet
dataSet = DataSet()
dataTable = DataTable("quote")
dataTable.Columns.Add("Date", System.String)
dataTable.Columns.Add("Close", System.String)
dataSet.Tables.Add(dataTable)
dataSet.ReadXml(stringReader, XmlReadMode.IgnoreSchema)

# build a string representing the data in tab-delimited text format
textData = "Symbol\tDate\tClose\r\n"
for row in dataTable.Rows:
 textData += tickerSymbol + "\t" + "\t".join(row.ItemArray) + "\r\n"

# make a stream from the string
stream = MemoryStream()
writer = StreamWriter(stream)
writer.Write(textData)
writer.Flush()
stream.Seek(0, SeekOrigin.Begin)

# set up the text data reader
readerSettings = TextDataReaderSettings()
readerSettings.Separator = "\t"
readerSettings.AddColumnNameRow(0)
readerSettings.SetDataType(0, DataType.String)
readerSettings.SetDataType(1, DataType.Date)
readerSettings.SetDataType(2, DataType.Currency)

# create a data source to read in the stream
textDataSource = TextFileDataSource(stream, readerSettings)

# add the data into a Data Table in Spotfire
if Document.Data.Tables.Contains("Stock Data"):
 Document.Data.Tables["Stock Data"].ReplaceData(textDataSource)
else:
 newTable = Document.Data.Tables.Add("Stock Data", textDataSource)
 tableSettings = DataTableSaveSettings (newTable, False, False)
 Document.Data.SaveSettings.DataTableSettings.Add(tableSettings)

JSON 示例

import clr
clr.AddReference('System.Data')
clr.AddReference('System.Web.Extensions')
import System
from System import DateTime
from System.Data import DataSet, DataTable
from System.IO import StreamReader, StreamWriter, MemoryStream, SeekOrigin
from System.Net import HttpWebRequest
from System.Web.Script.Serialization import JavaScriptSerializer
from Spotfire.Dxp.Data import DataType, DataTableSaveSettings
from Spotfire.Dxp.Data.Import import TextFileDataSource, TextDataReaderSettings

# get stock quotes data in JSON format from Yahoo Finance API
tickerSymbol = Document.Properties["TickerSymbol"]
startDate = DateTime.Today.AddMonths(-3).ToString("yyyy-MM-dd")
endDate = DateTime.Today.ToString("yyyy-MM-dd")
uri = "http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.historicaldata where symbol = %22" + tickerSymbol + "%22 and startDate = %22" + startDate + "%22 and endDate = %22" + endDate + "%22&format=json&diagnostics=true&env=store://datatables.org/alltableswithkeys"
webRequest = HttpWebRequest.Create(uri)
response = webRequest.GetResponse()
streamReader = StreamReader(response.GetResponseStream())
jsonData = streamReader.ReadToEnd()
js = JavaScriptSerializer()
dataDict = js.Deserialize(jsonData,object)

# build a string representing the data in tab-delimited text format
textData = "Symbol\tDate\tClose\r\n" 
for quote in dataDict["query"]["results"]["quote"]:
     textData += tickerSymbol + "\t" + quote["Date"] + "\t" + quote["Close"] + "\r\n"

# make a stream from the string
stream = MemoryStream()
writer = StreamWriter(stream)
writer.Write(textData)
writer.Flush()
stream.Seek(0, SeekOrigin.Begin)

# set up the text data reader
readerSettings = TextDataReaderSettings()
readerSettings.Separator = "\t"
readerSettings.AddColumnNameRow(0)
readerSettings.SetDataType(0, DataType.String)
readerSettings.SetDataType(1, DataType.Date)
readerSettings.SetDataType(2, DataType.Currency)

# create a data source to read in the stream
textDataSource = TextFileDataSource(stream, readerSettings)

# add the data into a Data Table in Spotfire
if Document.Data.Tables.Contains("Stock Data"):
     Document.Data.Tables["Stock Data"].ReplaceData(textDataSource)
else:
     newTable = Document.Data.Tables.Add("Stock Data", textDataSource)
     tableSettings = DataTableSaveSettings (newTable, False, False)
     Document.Data.SaveSettings.DataTableSettings.Add(tableSettings)

来源: http://spotfired.blogspot.com/search? q= web+ service http://spotfire.tibco.com/tips/2014/03/03/streaming-xml-and-json-data-from-the -web-direct-into-spotfire-clients-using-script-controls/

于 2015-11-06T11:32:48.380 回答