SSIS ściąganie danych z API lub Web service

0

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.

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

0

Ok chciałem to zrobić XML taskiem, ale chcę wpinać się SSISem bezpośrednio i stamtąd codziennie zasysać pliki, a widzę, że XML task pozwala jedynie na pobieranie lokalnie z kompa.

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.

screenshot-20190219180901.png

Xml powinien zostac odczytany.

screenshot-20190219181145.png

Merge Join + Sort zeby posklejac to do kupy.

screenshot-20190219181434.png

**2. Opcja ** - Script Component
screenshot-20190218141759.png

Dodaj output columns
screenshot-20190218141845.png


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-20190218154210.png

1 użytkowników online, w tym zalogowanych: 0, gości: 1