- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在给定的SSIS脚本下方,您需要输入一个股票代码和日期范围,然后返回一个CSV格式的下载文件,该文件可用于提取价格历史记录,但它不起作用,我也不知道为什么。在下面的链接中可以找到有关此SSIS深思熟虑概念的完整信息。
SSIS / ETL Example – Yahoo Equity & Mutual Fund Price History
您可以从下面的链接下载示例SSIS包。
Sample package on SkyDrive
以下SSIS脚本任务没有错误,但不会下载文件:
我刚刚开始理解此代码,似乎此链接已细分为此处的组件,并且具有正确的值,它必须可以工作,但我不明白为什么它不检索文件。
ichart.finance.yahoo.com/table.csv?s={symbol}&a={startMM}&b={startDD}&c=
{startYYYY}&d={endMM}&e={endDD}&f={endYYYY}&g={res}&ignore=.csv
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Configuration;
using System.Collections.Generic;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Net;
using System.Collections.Specialized;
using System.Linq;
using Hash = System.Collections.Generic.Dictionary<string, string>;
namespace ST_361aad0e48354b30b8152952caab8b2b.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
#region VSTA generated code
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
static string dir;
static DateTime end;
const string CSV_FORMAT = "Id,Cusip,Date,Open,High,Low,Close,Volume,Adj Close";
public void Main()
{
// end date is today minus one day (end of day)
end = DateTime.Now;
// output directory stored in SSIS variable
// which can be set at runtime
dir = System.IO.Path.Combine(Dts.Variables["OutputCSV"].Value.ToString(), end.ToString("yyyyMMdd"));
if (!System.IO.Directory.Exists(dir))
System.IO.Directory.CreateDirectory(dir);
// connection string to our database
var connectionString = Dts.Variables["ConnectionString"].Value.ToString();
// the sql command to execute
var sql = Dts.Variables["PriceHistorySqlCommand"].Value.ToString();
var list = new List<Hash>();
using (var cnn = new SqlConnection(connectionString))
{
cnn.Open();
using (var cmd = new SqlCommand(sql, cnn))
{
cmd.CommandTimeout = 0;
var dr = cmd.ExecuteReader();
while (dr.Read())
{
// store result in temporary hash
var h = new Hash();
h["cusip"] = dr["cusip"].ToString();
h["symbol"] = dr["symbol"].ToString();
h["product_id"] = dr["product_id"].ToString();
h["last_price_dt_id"] = dr["last_price_dt_id"].ToString();
list.Add(h);
// process batches of 100 at a time
// (This requires System.Threading.dll (CTP of parallel extensions) to be installed in the GAC)
if (list.Count >= 100)
{
System.Threading.Tasks.Parallel.ForEach(list, item =>
{
var dt = item["last_price_dt_id"].TryGetDateFromDateDimensionId(end.AddYears(-100));
DownloadPriceHistory(item["product_id"], item["cusip"], item["symbol"], dt);
});
list.Clear();
}
}
}
}
// TODO: Add your code here
Dts.TaskResult = (int)ScriptResults.Success;
}
static void DownloadPriceHistory(string id, string cusip, string symbol, DateTime begin)
{
// get write path
var path = System.IO.Path.Combine(dir, cusip + ".csv");
var url = String.Format("http://ichart.finance.yahoo.com/table.csv?s={0}&d={1}&e={2}&f={3}&g=d&a={4}&b={5}&c={6}&ignore=.csv",
symbol.ToUpper(),
(end.Month - 1).ToString("00"), end.Day.ToString("00"), end.Year,
(begin.Month - 1).ToString("00"), begin.Day.ToString("00"), begin.Year);
string csv;
using (WebClient web = new WebClient())
{
try
{
var text = web.DownloadString(url);
var lines = text.Split('\n');
System.Text.StringBuilder sb = new System.Text.StringBuilder();
int i = 0;
foreach (var line in lines)
{
// skip first line its a header
if (i == 0)
sb.AppendLine(CSV_FORMAT);
// ensure line being added is not null
else if (false == String.IsNullOrEmpty(line) && false == String.IsNullOrEmpty(line.Trim()))
sb.AppendLine(id + "," + cusip + "," + line);
i++;
}
// add header and body
csv = sb.ToString();
}
catch (System.Net.WebException)
{
// 404 error
csv = CSV_FORMAT;
}
}
System.IO.File.WriteAllText(path, csv);
}
}
/// <summary>
/// Some simple extension methods.
/// </summary>
public static class ExtensionMethods
{
/// <summary>
/// Gets a datetime object from a dimension id string for example '20090130' would be translated to
/// a proper datetime of '01-30-2009 00:00:00'. If the string is empty than we default to the passed
/// in <paramref name="defaultIfNull"/>.
/// </summary>
/// <param name="str">The string</param>
/// <param name="defaultIfNull">The default null.</param>
/// <returns>Returns the datetime.</returns>
public static DateTime TryGetDateFromDateDimensionId(this string str, DateTime defaultIfNull)
{
if (String.IsNullOrEmpty(str)) return defaultIfNull;
return DateTime.Parse(str.Substring(4, 2) + "/" + str.Substring(6, 2) + "/" + str.Substring(0, 4));
}
}
}
最佳答案
使用SSIS从Yahoo Finance Chart网站导入报价历史价格:
还有一种使用SSIS将Yahoot Chart网站的股票代码价格历史记录导入数据库的方法。这是使用SSIS 2008 R2
和SQL Server 2008 R2
中的数据库编写的示例软件包
使用SO_14797886.dtsx
创建一个名为(例如Business Intelligence Development Studio (BIDS)
)的SSIS包,并创建一个连接到数据库的OLE DB
连接管理器/数据源。此示例使用数据源OLEDB_Sora.ds
连接到运行实例Sora
的本地计算机上的数据库KIWI\SQLSERVER2008R2
。 KIWI
是计算机名称,SQLSERVER2008R2
是实例名称。
在数据库中执行以下给定脚本以创建两个表。
表dbo.TickerSymbols
将保存有关股票代码列表以及您要导入价格文件的开始和结束日期的信息,以及导入的分辨率。分辨率可以包含d
或day
之类的值; w
表示weekly
; m
表示monthly
;和y
表示yearly
。
表dbo.TickerPriceHistory
将保存从Yahoo Finance Chart网站下载的交易品种的价格历史信息。
插入脚本已为股票代码AAPL
(Apple
)添加了四个记录; MSFT
(Microsoft
); GOOG
(Google
);和YHOO
(Yahoo
)。每个记录都设置有不同的日期范围和分辨率。
创建表并插入少量股票代号的脚本:
CREATE TABLE dbo.TickerSymbols
(
Id int IDENTITY(1,1) NOT NULL
, Symbol varchar(10) NOT NULL
, StartDate datetime NOT NULL
, EndDate datetime NOT NULL
, Resolution char(1) NOT NULL
, CONSTRAINT [PK_TickerSymbols] PRIMARY KEY CLUSTERED ([Id] ASC)
);
GO
CREATE TABLE dbo.TickerPriceHistory
(
Id int IDENTITY(1,1) NOT NULL
, Symbol varchar(10) NOT NULL
, PriceDate datetime NOT NULL
, PriceOpen numeric(18,2) NULL
, PriceHigh numeric(18,2) NULL
, PriceLow numeric(18,2) NULL
, PriceClose numeric(18,2) NULL
, Volume bigint NULL
, AdjustmentClose numeric(18,2) NULL
, CONSTRAINT [PK_TickerPriceHistory] PRIMARY KEY CLUSTERED ([Id] ASC)
);
GO
INSERT INTO dbo.TickerSymbols (Symbol, StartDate, EndDate, Resolution) VALUES
('AAPL', '2012-02-01', '2012-02-04', 'd')
, ('GOOG', '2013-01-01', '2013-01-31', 'w')
, ('MSFT', '2012-09-01', '2012-11-30', 'm')
, ('YHOO', '2012-01-01', '2012-12-31', 'y')
;
GO
EndDate
:软件包将使用数据类型为
DateTime
的此变量将在记录集列表中保留正在循环通过的符号的结束日期。
FileExtension
:数据类型为
String
的此变量将保存文件扩展名,以用于下载的文件。这是可选的。
FileName
:数据类型为
String
的此变量将保存给定符号的文件名。该名称是根据时间戳生成的,以避免覆盖以前下载的文件。单击变量,然后按F4查看属性。将属性
EvaluateAsExpression
更改为
True
。在“表达式”上单击“省略号”按钮以打开“表达式生成器”。将
Expression
设置为以下值。该表达式的计算结果类似于
MSFT_20130210_092519.csv
,其中MSFT是符号,其余信息是格式为
yyyMMdd_hhmmss
的包开始时间,而
.csv
是文件扩展名。
FilePath
:数据类型为
String
的此变量将保存给定符号的下载文件的完整路径。单击变量,然后按F4查看属性。将属性
EvaluateAsExpression
更改为
True
。在“表达式”上单击“省略号”按钮以打开“表达式生成器”。将
Expression
设置为值
@[User::RootFolder] + "\\" + @[User::FileName]
。我们将使用此快递
Resolution
:程序包将使用数据类型为
String
的此变量将要循环通过的符号的重解信息保留在记录集列表中。
RootFolder
:数据类型为
String
的此变量将保存文件应下载到的根文件夹。
SQL_GetSymbols
:数据类型为
String
的此变量将包含T-SQL查询,以从数据库中获取股票代码信息。将值设置为
SELECT Symbol, StartDate, EndDate, Resolution FROM dbo.TickerSymbols
StartDate
:程序包将使用数据类型为
DateTime
的此变量在记录集列表中保存循环通过的符号的开始日期。
Symbol
:包将使用数据类型为
String
的此变量来保存股票代码,因为它在记录集列表中的每个记录之间循环。
SymbolsList
:程序包将使用数据类型为
Object
的此变量来保存数据库中存储的股票代号的结果集。
URLYahooChart
:此数据类型为
String
的变量将使用占位符保存指向Yahoo Finance Chart网站的URL,以为查询字符串填写适当的值。将值设置为
http://ichart.finance.yahoo.com/table.csv?s={0}&a={1}&b={2}&c={3}&d={4}&e={5}&f={6}&g={7}&ignore=.csv
Flat File Connection...
General
页上,执行以下操作:
FILE_TickerPriceHistory
Read the ticker symbol price history.
http://ichart.finance.yahoo.com/table.csv?s=MSFT&a=9&b=1&c=2012&d=11&e=30&f=2012&g=m&ignore=.csv
下载了文件,并将其保存为名称
C:\Siva\StackOverflow\Files\14797886\Data\\MSFT_20130210_092519.csv
。
Delimited
。
{CR}{LF}
Column names in the first data row
框
Columns
页面上,确保将行定界符设置为
{LF}
,将列定界符设置为
Comma {,}
。单击高级页面。
Advanced
页上,将基于文件信息创建列。如下所示更改值,以使列名与数据库中的名称匹配。这样,列映射将更容易。除最后一列外的所有列都应将ColumnDelimiter设置为
Comma {,}
。 Lsst列应将ColumnDelimiter设置为
{LF}
。
Column Data type DataPrecision DataScale
------------------- ------------------------------------ ------------- ---------
PriceDate date [DT_DATE]
PriceOpen numeric [DT_NUMERIC] 18 2
PriceHigh numeric [DT_NUMERIC] 18 2
PriceLow numeric [DT_NUMERIC] 18 2
PriceClose numeric [DT_NUMERIC] 18 2
Volume eight-byte unsigned integer [DT_UI8]
AdjustmentClose numeric [DT_NUMERIC] 18 2
Execute SQL Task
拖放到“控制流”选项卡上,然后在“常规”选项卡上执行以下操作。
Get symbols from database
Fetch the list of symbols and its download settings from database.
Full result set
,因为查询将返回记录集。
OLE DB
OLEDB_Sora
Variable
User::SQL_GetSymbols
0
,以指示结果集的索引。从变量名中选择
User::SymbolsList
,将结果集存储到对象变量中。
Script Task
拖放到ForEach循环容器中。双击脚本任务以打开脚本任务编辑器。在“脚本任务”编辑器的“脚本”页面上,单击
ReadOnlyVariables
上的省略号按钮,然后选择下面列出的变量。我们需要在脚本任务代码中使用它们。
Edit Script...
按钮,然后键入以下代码。输入代码后,关闭脚本任务编辑器。
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Net;
namespace ST_5fa66fe26d20480e8e3258a8fbd16683.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
#region VSTA generated code
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
public void Main()
{
try
{
string symbol = Dts.Variables["User::Symbol"].Value.ToString();
DateTime startDate = Convert.ToDateTime(Dts.Variables["User::StartDate"].Value);
DateTime endDate = Convert.ToDateTime(Dts.Variables["User::EndDate"].Value);
string resolution = Dts.Variables["User::Resolution"].Value.ToString();
string urlYahooChart = Dts.Variables["User::URLYahooChart"].Value.ToString();
string rootFolder = Dts.Variables["User::RootFolder"].Value.ToString();;
string fileExtension = Dts.Variables["User::FileExtension"].Value.ToString();
string fileName = Dts.Variables["User::FileName"].Value.ToString();
string downloadPath = Dts.Variables["User::FilePath"].Value.ToString();
if (!System.IO.Directory.Exists(rootFolder))
System.IO.Directory.CreateDirectory(rootFolder);
urlYahooChart = string.Format(urlYahooChart
, symbol
, startDate.Month
, startDate.Day
, startDate.Year
, endDate.Month
, endDate.Day
, endDate.Year
, resolution);
bool refire = false;
Dts.Events.FireInformation(0, string.Format("Download URL of {0}", symbol), urlYahooChart, string.Empty, 0, ref refire);
WebClient webClient = new WebClient();
webClient.DownloadFile(urlYahooChart, downloadPath);
Dts.TaskResult = (int)ScriptResults.Success;
}
catch (Exception ex)
{
Dts.Events.FireError(0, "Download error", ex.ToString(), string.Empty, 0);
}
}
}
}
Data Flow Task
拖放到Foreach循环容器中。将绿色箭头从脚本任务连接到数据流任务。 “控制流”选项卡应如下图所示。
Derived Column Transformation
并使用表达式
Symbol
创建一个名为
(DT_STR,10,1252)@[User::Symbol]
的新列,以将符号添加到数据管道中。
FILE_TickerPriceHistory
,然后按
F4
查看属性。将属性
DelayValidation
更改为
True
。这将确保在运行时对文件存在进行验证。单击表达式上的省略号按钮,并将
ConnectionString
属性设置为值
@[User::FilePath]
。从网站下载每个文件时,这将更改文件路径。
F4
查看属性。将属性
DelayValidation
更改为
True
。这将确保在运行时对文件存在进行验证。
F4
查看属性。将属性
ValidateExternalMetadata
更改为
False
。这将确保在运行时对平面文件是否存在进行验证。
C:\Siva\StackOverflow\Files\14797886
,将保存下载文件的文件夹为空。该文件夹不必为空。这仅用于执行检查。
SELECT * FROM dbo.TickerSymbols;
SELECT * FROM dbo.TickerPriceHistory;
dbo.TickerSymbols
中列出的每个符号的文件
C:\Siva\StackOverflow\Files\14797886
。请注意,每个文件都是根据包中提供的表达式进行适当命名的。
dbo.TickerPriceHistory
表现在应具有从网站下载的价格文件中的数据。
SELECT * FROM dbo.TickerPriceHistory;
关于c# - 如何修复从Yahoo下载报价文件并插入数据库的脚本任务代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14797886/
当我尝试通过我的 .exe 文件从 url 下载 .pdf 文件时出现以下错误。 The server committed a protocol violation. Section=Response
我是一家非营利组织的 G Suite 管理员,刚刚发现数据导出功能,这似乎是个人帐户的外卖。 导出文件已准备好,现在可以从 Google Cloud Platform Storage 中的存储桶下载。
导航 引言 总体思路 七牛云相关的配置文件 获取七牛云上传token 相关类定义 核心代码实现 获取七牛云图片下载链接 公开空
这不是后端编程问题。我只能修改标记或脚本(或文档本身)。我在这里问的原因是因为我对适当术语的所有搜索都不可避免地导致有关编程此功能的问题和解决方案。我不是试图通过编程来强制它;我必须找出此 PDF 行
您好,我已在 Google AdSense 中注册,我想使用适用于 iOS 的 SDK,但目前我找不到 SDK 下载链接。 我的申请已获批准。 任何人都知道如何下载这个sdk。 我使用这个链接来描述如
我需要为当前在 SourceForge 上的 github 项目提供二进制文件和文档。在那里,我可以为我需要的下载提供一个目录结构,因为我必须为大约 10 个不同的操作系统提供几个版本。 github
我从 Canvas 下载绘图时遇到问题。这是我的代码: function downloadCanvas(link, canvasId, filename) { link.href =
ASP.NET 项目 我将使用 Azure 进行存储。问题(要求): 在我的项目中,我让注册用户下载文件。但我不希望用户将此下载链接分享给未注册的人(例如:我给注册用户的下载链接只能在他们的计算机上下
我编写了一个servlet,用于检查http header ,但我不知道为什么当页面加载时,它会自动开始下载。 /* * To change this template, choose To
我正在尝试将下载添加到我的网络浏览器,但遇到的问题是获取您尝试下载的文件的名称。这是我的下载代码: engine.locationProperty().addListener(new ChangeLi
我正在尝试下载网站的 html: String encoding = "UTF-8"; HttpContext localContext = new BasicHttpContext();
我制作了一个带有“开始下载”按钮的框架,用于从网站下载 JAR。 问题是每当我点击开始下载按钮时,整个框架就会卡住,直到下载完成,然后就正常了。 我该如何解决这个问题? 这是单击按钮时执行的代码 p
我得到这段代码来实现一些东西,它可以帮助我从给定的 URL 下载文件。 -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSes
我正在尝试创建一个 Controller 来使用流方法下载和上传文件,在我的例子中,所有文件都作为 Blob 保存在数据库中。我阅读了 Jboss Netty 的文档,但我认为这不是我的最佳解决方案。
下载并保存文件 let destination: DownloadRequest.DownloadFileDestination = { _, _ in // var fileURL = sel
使用 htaccess 我基本上试图禁止访问该页面,即 http://example.com , 但它仍然允许人们下载文件,如果他们有直接链接即 http://example.com/hi.zip .
我正在寻求将脚本与我的控制面板集成,并且由于我是新手脚本编写者而遇到问题。我想做的是用 1 个脚本下载一个文件并解压它。 示例: wget http://example.com/example.tar
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
这个问题在这里已经有了答案: Top techniques to avoid 'data scraping' from a website database (14 个答案) 关闭 5 年前。 我有
这个问题在这里已经有了答案: Reading and parsing email from Gmail using C#, C++ or Python (6 个答案) 关闭 7 年前。 我只是想,是
我是一名优秀的程序员,十分优秀!