<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Annotations>
<Annotation>
File: RSS.Feed.Reader.biml
Demo on reading a twitter feed
Enviroment:
DB: MS-SQL2012
BIML: 1.6 VS2010 BIDS Helper
(c) John Minkjan biml101.blogspot.com
</Annotation>
<Annotation>
RSSFeedReader Table Create script:
CREATE TABLE [dbo].[RSSFeedReader](
[ChannelTitle] [nvarchar](255) NULL,
[ChannelDescription] [nvarchar](2048) NULL,
[ChannelLink] [nvarchar](255) NULL,
[ChannelLanguage] [nvarchar](255) NULL,
[ItemDescription] [nvarchar](2048) NULL,
[ItemGuid] [nvarchar](128) NOT NULL,
[ItemTitle] [nvarchar](255) NOT NULL,
[ItemPubDate] [nvarchar](50) NOT NULL,
[ItemLink] [nvarchar](255) NULL,
[RSSURI] [nvarchar](255) NULL,
CONSTRAINT [PK_RSSFeedReader] PRIMARY KEY CLUSTERED
(
[ItemGuid] ASC,
[ItemTitle] ASC,
[ItemPubDate] ASC
)
)
</Annotation>
</Annotations>
<Connections>
<OleDbConnection
Name="CnOleDBAdventureWorks2012"
ConnectionString="Data Source=.\MSSQL2012;Initial Catalog=AdventureWorks2012;Provider=SQLNCLI10.1;Integrated Security=SSPI;Connect Timeout=30;"
RetainSameConnection="true">
</OleDbConnection>
</Connections>
<ScriptProjects>
<ScriptComponentProject Name="SC_RSS_READER">
<AssemblyReferences>
<AssemblyReference AssemblyPath="Microsoft.SqlServer.DTSPipelineWrap" />
<AssemblyReference AssemblyPath="Microsoft.SqlServer.DTSRuntimeWrap" />
<AssemblyReference AssemblyPath="Microsoft.SqlServer.PipelineHost" />
<AssemblyReference AssemblyPath="Microsoft.SqlServer.TxScript" />
<AssemblyReference AssemblyPath="System.dll" />
<AssemblyReference AssemblyPath="System.AddIn.dll" />
<AssemblyReference AssemblyPath="System.Data.dll" />
<AssemblyReference AssemblyPath="System.Xml.dll" />
</AssemblyReferences>
<OutputBuffers>
<OutputBuffer Name="Output0" IsSynchronous ="false">
<Annotations>
<Annotation>
IsSynchronous="false" ==>
When there are no non-synchronus buffers,
the compiler does not emit the CreateNewOutputRows
virtual base method (to match the BIDS/SSDT behavior)
</Annotation>
</Annotations>
<Columns>
<Column Name="ChannelTitle" DataType="String" Length="255"></Column>
<Column Name="ChannelDescription" DataType="String" Length="2048"></Column>
<Column Name="ChannelLink" DataType="String" Length="255"></Column>
<Column Name="ChannelLanguage" DataType="String" Length="255"></Column>
<Column Name="ItemDescription" DataType="String" Length="2048"></Column>
<Column Name="ItemGuid" DataType="String" Length="128"></Column>
<Column Name="ItemTitle" DataType="String" Length="255"></Column>
<Column Name="ItemPubDate" DataType="String" Length="50"></Column>
<Column Name="ItemLink" DataType="String" Length="255"></Column>
<Column Name="RSSURI" DataType="String" Length="255"></Column>
</Columns>
</OutputBuffer>
</OutputBuffers>
<ReadOnlyVariables>
<Variable Namespace="User" VariableName="RSSURI" DataType="String"></Variable>
</ReadOnlyVariables>
<Files>
<File Path="AssemblyInfo.cs">
using System.Reflection;
using System.Runtime.CompilerServices;
[assembly: AssemblyTitle("SC_RSS_READER")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SC_RSS_READER")]
[assembly: AssemblyCopyright("Copyright @ 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("1.0.*")]
</File>
<File Path="main.cs">
<![CDATA[
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
{
public override void CreateNewOutputRows()
{
XmlTextReader rssReader;
XmlDocument rssDoc;
XmlNode nodeRss;
XmlNode nodeChannel;
XmlNode nodeItem;
string RSSURI = this.Variables.RSSURI.ToString();
rssReader = new XmlTextReader(RSSURI);
rssDoc = new XmlDocument();
rssDoc.Load(rssReader);
for (int i = 0; i < rssDoc.ChildNodes.Count; i++)
{
if (rssDoc.ChildNodes[i].Name == "rss")
{
nodeRss = rssDoc.ChildNodes[i];
for (int j = 0; j < nodeRss.ChildNodes.Count; j++)
{
if (nodeRss.ChildNodes[j].Name == "channel")
{
nodeChannel = nodeRss.ChildNodes[j];
for (int k = 0; k < nodeChannel.ChildNodes.Count; k++)
{
if (nodeChannel.ChildNodes[k].Name == "item")
{
nodeItem = nodeChannel.ChildNodes[k];
Output0Buffer.AddRow();
Output0Buffer.ChannelTitle = nodeChannel["title"].InnerText;
Output0Buffer.ChannelDescription = nodeChannel["description"].InnerText;
Output0Buffer.ChannelLink = nodeChannel["link"].InnerText;
Output0Buffer.ChannelLanguage = nodeChannel["language"].InnerText;
Output0Buffer.ItemDescription = nodeItem["description"].InnerText;
Output0Buffer.ItemGuid = nodeItem["guid"].InnerText;
Output0Buffer.ItemTitle = nodeItem["title"].InnerText;
Output0Buffer.ItemPubDate = nodeItem["pubDate"].InnerText;
Output0Buffer.ItemLink = nodeItem["link"].InnerText;
Output0Buffer.RSSURI = RSSURI;
}
}
}
}
}
}
}
}
]]>
</File>
</Files>
</ScriptComponentProject>
</ScriptProjects>
<Packages>
<Package Name ="RSS.Feed.Reader" ConstraintMode="Linear">
<Variables>
<Variable Name="RSSURI" DataType="String">http://rss.cnn.com/rss/edition.rss</Variable>
</Variables>
<Tasks>
<Dataflow Name ="DFT Read RSS Feed" >
<Transformations>
<ScriptComponentSource Name="SC RSS Feed Reader">
<ScriptComponentProjectReference ScriptComponentProjectName="SC_RSS_READER"></ScriptComponentProjectReference>
</ScriptComponentSource>
<Lookup Name="LKP Existing ItemGuids"
NoMatchBehavior="RedirectRowsToNoMatchOutput"
OleDbConnectionName="CnOleDBAdventureWorks2012"
CacheMode="Partial">
<ExternalTableInput Table="[dbo].[RSSFeedReader]"></ExternalTableInput>
<Inputs>
<Column SourceColumn="ItemGuid" TargetColumn="ItemGuid"></Column>
<Column SourceColumn="ItemPubDate" TargetColumn="ItemPubDate"></Column>
<Column SourceColumn="ItemTitle" TargetColumn="ItemTitle"></Column>
</Inputs>
</Lookup>
<OleDbDestination Name="ODD dbo RSSFeedReader" ConnectionName="CnOleDBAdventureWorks2012">
<InputPath OutputPathName="LKP Existing ItemGuids.NoMatch"></InputPath>
<ExternalTableOutput Table="[dbo].[RSSFeedReader]"></ExternalTableOutput>
</OleDbDestination>
</Transformations>
</Dataflow>
</Tasks>
</Package>
</Packages>
</Biml>
File: RSS.Feed.Reader.biml; Demo on reading a twitter feed; Enviroment: DB: MS-SQL2012 BIML: 1.6 VS2010 BIDS Helper; (c) John Minkjan biml101.blogspot.com; Also Published here:http://biml101.blogspot.com/2012/10/biml-bigdata-reading-rss-feed.html

Comments
There are no comments yet.