Cześć, potrzebuję pomocy. Muszę podpiąć się pod zewnętrzne APi NBP gdzie znajdują się kursy walut i chciałbym to zrobić paczką SSIS. Czy ktoś z z Was to robił? Próbowałem z Web service task, ale nie wychodzi mi.
Proszę o pomoc.
- Rejestracja:ponad 7 lat
- Ostatnio:ponad 3 lata
- Postów:33
- Rejestracja:ponad 22 lata
- Ostatnio:39 minut
- Postów:3866
1
O nawet nie wiedziałem, że działają w oparciu o API, ale tu raczej nie opierał się o Web Services
tylko pobierał tabele kursów za pomocą zewnętrznych xml-i (https://www.mssqltips.com/sqlservertip/3141/importing-xml-documents-using-sql-server-integration-services/)
Lub uzył CLR do pbrania danych i procedurą ładował kursy https://github.com/Microsoft/sql-server-samples/tree/master/samples/features/sql-clr/Curl

- Rejestracja:około 20 lat
- Ostatnio:około rok
- Lokalizacja:London
1
Nudzi mi sie dzisiaj w pracy. Pobieram 28 dni wstecz, bo dla jednego dnia jest to wrecz banalne ;)
1. Opcja - XML Source
w XML location mozna podac zdalny url.Trzeba tylko wygenerowac lokalny Xsd.
Xml powinien zostac odczytany.
Merge Join + Sort zeby posklejac to do kupy.
**2. Opcja ** - Script Component
Dodaj output columns
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
using System.Xml;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
DataTable exchangerates = new DataTable();
public override void PreExecute()
{
base.PreExecute();
try
{
exchangerates.Columns.Add("effectivedate", typeof(string));
exchangerates.Columns.Add("tradingdate", typeof(string));
exchangerates.Columns.Add("table", typeof(string));
exchangerates.Columns.Add("no", typeof(string));
exchangerates.Columns.Add("code", typeof(string));
exchangerates.Columns.Add("currency", typeof(string));
exchangerates.Columns.Add("ask", typeof(string));
exchangerates.Columns.Add("bid", typeof(string));
XmlDocument nbp_c_rates_xml = new XmlDocument();
nbp_c_rates_xml.Load("http://api.nbp.pl/api/exchangerates/tables/c/last/28?format=xml");
XmlElement root = nbp_c_rates_xml.DocumentElement;
XmlNodeList nodes = root.SelectNodes("/ArrayOfExchangeRatesTable/ExchangeRatesTable");
foreach (XmlNode node in nodes)
{
XmlNodeList innernodes = node.SelectNodes("./Rates/Rate");
foreach (XmlNode innernode in innernodes)
{
DataRow newrow = exchangerates.NewRow();
newrow["effectivedate"] = node["EffectiveDate"].InnerText;
newrow["tradingdate"] = node["TradingDate"].InnerText;
newrow["table"] = node["Table"].InnerText;
newrow["no"] = node["No"].InnerText;
newrow["code"] = innernode["Code"].InnerText;
newrow["currency"] = innernode["Currency"].InnerText;
newrow["ask"] = innernode["Ask"].InnerText;
newrow["bid"] = innernode["Bid"].InnerText;
exchangerates.Rows.Add(newrow);
}
}
}
catch
{
//handle errors
}
}
public override void PostExecute()
{
base.PostExecute();
}
public override void CreateNewOutputRows()
{
try
{
if (exchangerates.Rows.Count > 0)
{
DataRow[] dr;
dr = exchangerates.Select();
if (dr.Length != 0)
{
foreach (DataRow row in dr)
{
exchangeratesoutputBuffer.AddRow();
exchangeratesoutputBuffer.effectivedate = row["effectivedate"].ToString();
exchangeratesoutputBuffer.tradingdate = row["tradingdate"].ToString();
exchangeratesoutputBuffer.table = row["table"].ToString();
exchangeratesoutputBuffer.no = row["no"].ToString();
exchangeratesoutputBuffer.code = row["code"].ToString();
exchangeratesoutputBuffer.currency = row["currency"].ToString();
exchangeratesoutputBuffer.ask = row["ask"].ToString();
exchangeratesoutputBuffer.bid = row["bid"].ToString();
}
}
}
}
catch
{
//handle errors
}
}
}
- screenshot-20190218141759.png (20 KB) - ściągnięć: 78
- screenshot-20190218142139.png (90 KB) - ściągnięć: 80
- screenshot-20190218154210.png (196 KB) - ściągnięć: 80
- screenshot-20190218141845.png (56 KB) - ściągnięć: 85
- screenshot-20190219180901.png (35 KB) - ściągnięć: 87
- screenshot-20190219181434.png (210 KB) - ściągnięć: 93
- screenshot-20190219181145.png (35 KB) - ściągnięć: 76
edytowany 4x, ostatnio: ipsd