All about Macrotube

Post Reply
jachin99

Posts: 1132
Joined: Wed Feb 24, 2016 3:36 pm
Location:

HTPC Specs: Show details

All about Macrotube

#1

Post by jachin99 » Tue Jul 10, 2018 2:20 am

I'm starting a thread about Macrotube because I was able to dig up a large collection of providers from the web archive. Macrotube can get a little complicated because different sites may require various codecs or bits of software in order to play videos correctly. QuickTime, and Adobe shockwave are a few examples of these complications. In spite of this, I will be posting the xml files to various providers as I get time to do so. If someone needs help adding these providers then please speak up, and I will offer whatever help I can. Until then, there is link to the old TGB forums about microtube: https://web.archive.org/web/20100501074 ... geIndex=12
Here is my first provider.xm file. I haven't been able to give these a proper test yet so please be aware of that.

Code: Select all

<?xml version="1.0" encoding="utf-8" ?>
<VideoService
	DefaultCategoryTransform="Feed"
	DefaultCategoryUrl="http://www.escapistmagazine.com/rss/videos/list/1.xml"
    Description="Zero Punctuation is The Escapist's groundbreaking video review series starring Ben 'Yahtzee' Croshaw. Every Wednesday Zero Punctuation picks apart the games so you don't have to."
	Enabled="false"
    Image="http://services.jasmio.com/macrotube/providers/ZeroPunctuation.png"
	Name="Zero Punctuation"
	IsMultipage="False"
	Type="XSLT"
	UpdateUrl="http://services.jasmio.com/macrotube/providers/ZeroPunctuation.xml"
	Version="1.0"
	>
	<Categories>
		<Category ID="all" Name="All" />
	</Categories>
	<SortOrders>
		<SortOrder ID="date" Name="date" />
	</SortOrders>
	<Transforms>
		<Transform Name="Feed">
			<xsl:stylesheet
				version="1.0"
				xmlns:dc="http://purl.org/dc/elements/1.1/"
				xmlns:content="http://purl.org/rss/1.0/modules/content/"
				
				xmlns:atom="http://www.w3.org/2005/Atom"
				xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
				xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
				xmlns:gml="http://www.opengis.net/gml"
				xmlns:georss="http://www.georss.org/georss"
				xmlns:media="http://search.yahoo.com/mrss/"
				xmlns:yt="http://gdata.youtube.com/schemas/2007"
				xmlns:gd="http://schemas.google.com/g/2005"
				xmlns:msxsl="urn:schemas-microsoft-com:xslt"
				xmlns:func="urn:local-functions"
				>
				<msxsl:script language="C#" implements-prefix="func">
				<![CDATA[
				
				static Regex descMatch = new Regex(@"^.*<p>(.+?)</p>.*", RegexOptions.Compiled);
				
				public string escapeuridata(string unescaped)
				{
					return Uri.EscapeDataString(unescaped);
				}
				public string fixdesc(string source)
				{
				  return string.Format("{0}", descMatch.Replace(source, @"$1"));
				}
				public string fixdate(string source)
				{
				  return Regex.Replace(source, ".{3}$", "+0000");
				}
				]]>
				</msxsl:script>

				<xsl:output indent="yes" method="xml" />
			   <xsl:template match="item">
				<xsl:element name="item">
				  <xsl:attribute name="date">
				    <xsl:value-of select="func:fixdate(pubDate)" />
				  </xsl:attribute>
				  <xsl:attribute name="duration">
				    500
				  </xsl:attribute>
				  <xsl:attribute name="title">
				    <xsl:value-of select="title" />
				  </xsl:attribute>
				  <xsl:attribute name="rating">
				    0
				  </xsl:attribute>
				  <xsl:element name="description">
				    <xsl:value-of select="func:fixdesc(description)" />
				  </xsl:element>
				  <xsl:element name="thumbnails">
				    <xsl:element name="thumbnail">
					 <xsl:attribute name="width">150</xsl:attribute>
					 <xsl:attribute name="height">128</xsl:attribute>
					 <xsl:attribute name="url">http://img1.imageshack.us/thumbnail.png</xsl:attribute>
					</xsl:element>
				  </xsl:element>
				  <xsl:element name="videos">
				    <xsl:element name="video">
					 <xsl:attribute name="type">video/mpeg</xsl:attribute>
					 <xsl:attribute name="url">
					   <xsl:value-of select="link" />
					 </xsl:attribute>
				    </xsl:element>
				  </xsl:element>
				</xsl:element>
			   </xsl:template>
			   <xsl:template match="/">
				<xsl:element name="items">
				  <xsl:apply-templates select="//item" />
				</xsl:element>
			   </xsl:template>
			</xsl:stylesheet>
		</Transform>
	</Transforms>
	<VideoProviders>
		<VideoProvider class="MacroTube.Model.ZeroPunctuationProvider">
					<![CDATA[

using System;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;

namespace MacroTube.Model
{
	public class ZeroPunctuationProvider : VideoProvider
	{
		private static readonly Regex _watchMatch = new Regex(@"^http://www.escapistmagazine.com/.*", RegexOptions.Compiled);
		
		private static readonly Regex _jsMatch = new Regex(@"^.*flashvars=""config=(.+?)"".*", RegexOptions.Compiled | RegexOptions.Singleline);
		
		private static readonly Regex _urlMatch = new Regex(@"^.*url':'(http://video2.+?)'.*", RegexOptions.Compiled | RegexOptions.Singleline);

		public YouTubeVideoProvider()
			: base()
		{
		}

		public override string GetDownloadUrl(string sourceURL)
		{
			if (!IsProvider(sourceURL)) return null;

			string newsourceURL = null;
			string resolvedURL = null;

			Debug.WriteLine(string.Format("Source URL: {0}", sourceURL));

			try
			{
				WebClient client = new WebClient();

				string html = client.DownloadString(sourceURL);

				newsourceURL = string.Format("{0}", _jsMatch.Replace(html, "$1"));

				Debug.WriteLine(string.Format("New Source URL: {0}", newsourceURL));
				
				client.Headers.Clear();
				client.Headers.Add("Referer", sourceURL);
				
				string newhtml = client.DownloadString(newsourceURL);
				
				Debug.WriteLine("NEW HTML: " + newhtml);

				resolvedURL = string.Format("{0}", _urlMatch.Replace(newhtml, "$1"));

				Debug.WriteLine(string.Format("Resolved URL: {0}", resolvedURL));
			}
			catch (Exception ex)
			{
                Debug.WriteLine(string.Format("Error getting download URL: {0}\r\n{1}\r\n{2}", sourceURL, ex));
			}

			return Uri.IsWellFormedUriString(resolvedURL, UriKind.Absolute) ? resolvedURL : null;
		}

		public override bool IsProvider(string url)
		{
			return _watchMatch.IsMatch(url);
		}
	}
}

		]]></VideoProvider>
	</VideoProviders>
</VideoService>

jachin99

Posts: 1132
Joined: Wed Feb 24, 2016 3:36 pm
Location:

HTPC Specs: Show details

#2

Post by jachin99 » Sat Jul 14, 2018 7:07 pm

This adds MSDN Channel 9, and still works however most of the content is old. I peeked at the MSDN page, and there are 119 pages of various shows. The All sort will show current content but for anything specific, you will have to add the name of the show.

Code: Select all

<VideoService
	Name="MSDN Channel 9"
	Description="Channel 9 keeps you up to date with the latest news and behind the scenes info from Microsoft that developers love to keep up with."
	Image="file://c:\programdata\jasmio\macrotube\providers\channel9.png"
	DefaultCategoryUrl="http://channel9.msdn.com/shows/{Category.ID}/RSS/"
	DefaultCategoryTransform="Feed"
	SearchUrl="http://channel9.msdn.com/tags/{SearchTerm}/RSS/"
	SearchTransform="Feed"
	IsMultipage="False"
	Type="XSLT"
	>
	<Categories>
		<Category ID="Featured" Name="Featured" Url="http://channel9.msdn.com/Feeds/RSS/" />
		<Category ID="Videos" Name="Videos" Url="http://channel9.msdn.com/Media/Videos/RSS/" />
		<Category ID="Screencasts" Name="Screencasts" Url="http://channel9.msdn.com/Media/Screencasts/RSS/" />
		<Category ID="Podcasts" Name="Podcasts" Url="http://channel9.msdn.com/Media/Podcasts/RSS/" />
		<Category ID="10-4" Name="10-4" />
		<Category ID="Access" Name="Access Show" />
		<Category ID="ARCast.tv" Name="ARCast.tv" />
		<Category ID="Behind+The+Code" Name="Behind The Code" />
		<Category ID="ButWhy" Name="But Why" />
		<Category ID="Cloud+Cover" Name="Cloud Cover" />
		<Category ID="Communicating" Name="Communicating" />
		<Category ID="Endpoint" Name="endpoint.tv" />
		<Category ID="geekSpeak" Name="geekSpeak" />
		<Category ID="Going+Deep" Name="Going Deep" />
		<Category ID="History" Name="History of MS" />
		<Category ID="The+HPC+Show" Name="HPC Show" />
		<Category ID="Identity" Name="Id Element" />
		<Category ID="InsideXbox" Name="Inside Xbox" />
		<Category ID="The+Knowledge+Chamber" Name="Knowledge Chamber" />
		<Category ID="TheOfficeBlog" Name="Office Blog" />
		<Category ID="PingShow" Name="Ping!" />
		<Category ID="SilverlightTV" Name="Silverlight TV" />
		<Category ID="VisualStudioDocumentary" Name="VS Documentary" />
		<Category ID="This+Week+On+Channel+9" Name="This Week" />
		<Category ID="WM_IN" Name="WM_IN" />
	</Categories>
	<SortOrders>
		<SortOrder ID="date" Name="Date" />
	</SortOrders>
	<Transforms>
		<Transform Name="Feed">
			<xsl:stylesheet version="1.0"
				xmlns:media="http://search.yahoo.com/mrss/"
				xmlns:evnet="http://www.mscommunities.com/rssmodule/"
				xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
				xmlns:msxsl="urn:schemas-microsoft-com:xslt"
				xmlns:func="urn:local-functions">
				<msxsl:script language="C#" implements-prefix="func">
					<![CDATA[
    
					public bool HasVideo(string Enclosure)
					{
					  return Enclosure.Length != 0;
					}
		            
					public string ResolveDescription(string Description)
					{
					   return Description.Replace("<br />","").Replace("<p>","").Replace("</p>","").Trim();
					}
		    
					]]>
				</msxsl:script>
				<xsl:output indent="yes" method="xml" />
				<xsl:template match="item">
					<xsl:if test="func:HasVideo(enclosure/@url)">
						<xsl:element name="item">
							<xsl:attribute name="date">
								<xsl:value-of select="pubDate" />
							</xsl:attribute>
							<xsl:attribute name="duration">
								<xsl:value-of select="media:group/media:content/@duration" />
							</xsl:attribute>
							<xsl:attribute name="rating">100</xsl:attribute>
							<xsl:attribute name="title">
								<xsl:value-of select="title" />
							</xsl:attribute>
							<xsl:element name="description">
								<xsl:value-of select="func:ResolveDescription(evnet:previewtext)" />
							</xsl:element>
							<xsl:element name="thumbnails">
								<xsl:element name="thumbnail">
									<xsl:attribute name="height">240</xsl:attribute>
									<xsl:attribute name="url">
										<xsl:value-of select="media:thumbnail/@url" />
									</xsl:attribute>
									<xsl:attribute name="width">320</xsl:attribute>
								</xsl:element>
							</xsl:element>
							<xsl:element name="videos">
								<xsl:element name="video">
									<xsl:attribute name="type">video/x-ms-wmv</xsl:attribute>
									<xsl:attribute name="url">
										<xsl:value-of select="enclosure/@url" />
									</xsl:attribute>
								</xsl:element>
							</xsl:element>
						</xsl:element>
					</xsl:if>
				</xsl:template>
				<xsl:template match="rss/channel">
					<xsl:element name="items">
						<xsl:apply-templates select="item" />
					</xsl:element>
				</xsl:template>
			</xsl:stylesheet>
		</Transform>
	</Transforms>
</VideoService>

jachin99

Posts: 1132
Joined: Wed Feb 24, 2016 3:36 pm
Location:

HTPC Specs: Show details

#3

Post by jachin99 » Sat Jul 14, 2018 7:08 pm

This adds MSDN Channel 9, and still works however most of the content is old. I peeked at the MSDN page, and there are 119 pages of various shows. The featured, videos, podcasts, and screencasts sorts will show current content but for anything specific, you will have to add the name of the show.

Code: Select all

<VideoService
	Name="MSDN Channel 9"
	Description="Channel 9 keeps you up to date with the latest news and behind the scenes info from Microsoft that developers love to keep up with."
	Image="file://c:\programdata\jasmio\macrotube\providers\channel9.png"
	DefaultCategoryUrl="http://channel9.msdn.com/shows/{Category.ID}/RSS/"
	DefaultCategoryTransform="Feed"
	SearchUrl="http://channel9.msdn.com/tags/{SearchTerm}/RSS/"
	SearchTransform="Feed"
	IsMultipage="False"
	Type="XSLT"
	>
	<Categories>
		<Category ID="Featured" Name="Featured" Url="http://channel9.msdn.com/Feeds/RSS/" />
		<Category ID="Videos" Name="Videos" Url="http://channel9.msdn.com/Media/Videos/RSS/" />
		<Category ID="Screencasts" Name="Screencasts" Url="http://channel9.msdn.com/Media/Screencasts/RSS/" />
		<Category ID="Podcasts" Name="Podcasts" Url="http://channel9.msdn.com/Media/Podcasts/RSS/" />
		<Category ID="10-4" Name="10-4" />
		<Category ID="Access" Name="Access Show" />
		<Category ID="ARCast.tv" Name="ARCast.tv" />
		<Category ID="Behind+The+Code" Name="Behind The Code" />
		<Category ID="ButWhy" Name="But Why" />
		<Category ID="Cloud+Cover" Name="Cloud Cover" />
		<Category ID="Communicating" Name="Communicating" />
		<Category ID="Endpoint" Name="endpoint.tv" />
		<Category ID="geekSpeak" Name="geekSpeak" />
		<Category ID="Going+Deep" Name="Going Deep" />
		<Category ID="History" Name="History of MS" />
		<Category ID="The+HPC+Show" Name="HPC Show" />
		<Category ID="Identity" Name="Id Element" />
		<Category ID="InsideXbox" Name="Inside Xbox" />
		<Category ID="The+Knowledge+Chamber" Name="Knowledge Chamber" />
		<Category ID="TheOfficeBlog" Name="Office Blog" />
		<Category ID="PingShow" Name="Ping!" />
		<Category ID="SilverlightTV" Name="Silverlight TV" />
		<Category ID="VisualStudioDocumentary" Name="VS Documentary" />
		<Category ID="This+Week+On+Channel+9" Name="This Week" />
		<Category ID="WM_IN" Name="WM_IN" />
	</Categories>
	<SortOrders>
		<SortOrder ID="date" Name="Date" />
	</SortOrders>
	<Transforms>
		<Transform Name="Feed">
			<xsl:stylesheet version="1.0"
				xmlns:media="http://search.yahoo.com/mrss/"
				xmlns:evnet="http://www.mscommunities.com/rssmodule/"
				xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
				xmlns:msxsl="urn:schemas-microsoft-com:xslt"
				xmlns:func="urn:local-functions">
				<msxsl:script language="C#" implements-prefix="func">
					<![CDATA[
    
					public bool HasVideo(string Enclosure)
					{
					  return Enclosure.Length != 0;
					}
		            
					public string ResolveDescription(string Description)
					{
					   return Description.Replace("<br />","").Replace("<p>","").Replace("</p>","").Trim();
					}
		    
					]]>
				</msxsl:script>
				<xsl:output indent="yes" method="xml" />
				<xsl:template match="item">
					<xsl:if test="func:HasVideo(enclosure/@url)">
						<xsl:element name="item">
							<xsl:attribute name="date">
								<xsl:value-of select="pubDate" />
							</xsl:attribute>
							<xsl:attribute name="duration">
								<xsl:value-of select="media:group/media:content/@duration" />
							</xsl:attribute>
							<xsl:attribute name="rating">100</xsl:attribute>
							<xsl:attribute name="title">
								<xsl:value-of select="title" />
							</xsl:attribute>
							<xsl:element name="description">
								<xsl:value-of select="func:ResolveDescription(evnet:previewtext)" />
							</xsl:element>
							<xsl:element name="thumbnails">
								<xsl:element name="thumbnail">
									<xsl:attribute name="height">240</xsl:attribute>
									<xsl:attribute name="url">
										<xsl:value-of select="media:thumbnail/@url" />
									</xsl:attribute>
									<xsl:attribute name="width">320</xsl:attribute>
								</xsl:element>
							</xsl:element>
							<xsl:element name="videos">
								<xsl:element name="video">
									<xsl:attribute name="type">video/x-ms-wmv</xsl:attribute>
									<xsl:attribute name="url">
										<xsl:value-of select="enclosure/@url" />
									</xsl:attribute>
								</xsl:element>
							</xsl:element>
						</xsl:element>
					</xsl:if>
				</xsl:template>
				<xsl:template match="rss/channel">
					<xsl:element name="items">
						<xsl:apply-templates select="item" />
					</xsl:element>
				</xsl:template>
			</xsl:stylesheet>
		</Transform>
	</Transforms>
</VideoService>

jachin99

Posts: 1132
Joined: Wed Feb 24, 2016 3:36 pm
Location:

HTPC Specs: Show details

#4

Post by jachin99 » Mon Jul 23, 2018 3:10 pm

This adds Twit TV, which also still works but doesn't have some newer content

Code: Select all

<?xml version="1.0" encoding="utf-8" ?>
<VideoService
	Author="Boondoklife"
	DefaultCategoryTransform="Feed"
	DefaultCategoryUrl="http://feeds.twit.tv/{Category.ID}_video_{SortOrder}"
	Description="Leo Laporte and friends present the TWiT network. Netcasts you love, from people you trust."
	Image="http://mainwall1.us.to/macrotube/providers/Twit.png"
	IsMultipage="False"
	Name="TWIT.tv"
	Type="XSLT"
	UpdateUrl="http://mainwall1.us.to/macrotube/providers/Twit.xml"
	Version="2.1"
	>
	<Categories>
		<Category
			ID="aaa"
			Name="All About Android"
		/>
		<Category
			ID="byb"
			Name="Before You Buy"
		/>
		<Category
			ID="floss"
			Name="floss Weekly"
		/>
		<Category
			ID="fr"
			Name="Frame Rate"
		/>
		<Category
			ID="hn"
			Name="Ham Nation"
		/>
		<Category
			ID="htg"
			Name="Home Theater Geek"
		/>
		<Category
			ID="ifive"
			Name="iFive for the iPhone"
		/>
		<Category
			ID="ipad"
			Name="iPad Today"
		/>
		<Category
			ID="kh"
			Name="Know How..."
		/>
		<Category
			ID="mbw"
			Name="MacBreak Weekly"
		/>
		<Category
			ID="nsfw"
			Name="NSFW"
		/>
		<Category
			ID="sn"
			Name="Security Now"
		/>
		<Category
			ID="tnt"
			Name="Tech News Today"
		/>
		<Category
			ID="dgw"
			Name="The Giz Wiz"
		/>
		<Category
			ID="natn"
			Name="The Social Hour"
		/>
		<Category
			ID="ttg"
			Name="The Tech Guy"
		/>
		<Category
			ID="twich"
			Name="This Week in Computer Hardware"
		/>
		<Category
			ID="twiet"
			Name="This Week in Enterprise Tech"
		/>
		<Category
			ID="twig"
			Name="This Week in Google"
		/>
		<Category
			ID="twil"
			Name="This Week in Law"
		/>
		<Category
			ID="twit"
			Name="This Week in Tech"
		/>
		<Category
			ID="tri"
			Name="Triangulation"
		/>
		<Category
			ID="specials"
			Name="TwiT Live Specials"
		/>
		<Category
			ID="ww"
			Name="Windows Weekly"
		/>
	</Categories>
	<SortOrders>
		<SortOrder
			ID="hd"
			Name="HD"
		/>
		<SortOrder
			ID="large"
			Name="Large"
		/>
		<SortOrder
			ID="small"
			Name="small"
		/>
	</SortOrders>
	<Transforms>
		<Transform Name="Feed">
			<xsl:stylesheet
			 version="1.0"
			 xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
			 xmlns:media="http://search.yahoo.com/mrss"
			 xmlns:dm="http://www.dailymotion.com/dmrss"
			 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
			 xmlns:msxsl="urn:schemas-microsoft-com:xslt"
			 xmlns:func="urn:local-functions"
			 xmlns:mediafly="http://mediafly.com/xsd/RSS/1.0"
			 xmlns:atom="http://www.w3.org/2005/Atom">
				<msxsl:script language="C#" implements-prefix="func">
				<![CDATA[
					public string ReplaceVideoUrl(string VideoUrl)
					{
						return VideoUrl.Replace("h264b_640x368_500", "h264b_864x480_2000") ;
					}

					public string TruncateSummary(string summary)
					{
						return summary.Substring(0, 80)+"...";
					}

					public string CleanTitle(string title)
					{
						return System.Text.RegularExpressions.Regex.Replace(title, @"^[^:]+:\s+(.*)$", "$1");
					}

					public string GetThumbnail(string thumb)
					{
						string thumbPrefix = "http://feeds.twit.tv/podcasts/coverart/";
						string thumbSuffix = "600video.jpg";
						string thumbDefault = "http://www.cmikeb.com/wp-content/uploads/2010/10/twit-logo-150x150.jpg";

						if (thumb.Contains ("aaa") == true)
						{
							return thumbPrefix+"aaa"+thumbSuffix;
						}
						else if (thumb.Contains ("byb") == true)
						{
							return thumbPrefix+"byb"+thumbSuffix;
						}
						else if (thumb.Contains ("dgw") == true)
						{
							return thumbPrefix+"dgw"+thumbSuffix;
						}
						else if (thumb.Contains ("floss") == true)
						{
							return thumbPrefix+"floss"+thumbSuffix;
						}
						else if (thumb.Contains ("fr") == true)
						{
							return thumbPrefix+"fr"+thumbSuffix;
						}
						else if (thumb.Contains ("hn") == true)
						{
							return thumbPrefix+"hn"+thumbSuffix;
						}
						else if (thumb.Contains ("htg") == true)
						{
							return thumbPrefix+"htg"+thumbSuffix;
						}
						else if (thumb.Contains ("ifive") == true)
						{
							return thumbPrefix+"ifive"+thumbSuffix;
						}
						else if (thumb.Contains ("ipad") == true)
						{
							return thumbPrefix+"ipad"+thumbSuffix;
						}
						else if (thumb.Contains ("kh") == true)
						{
							return thumbPrefix+"kh"+thumbSuffix;
						}
						else if (thumb.Contains ("mbw") == true)
						{
							return thumbPrefix+"mbw"+thumbSuffix;
						}
						else if (thumb.Contains ("nsfw") == true)
						{
							return thumbPrefix+"nsfw"+thumbSuffix;
						}
						else if (thumb.Contains ("specials") == true)
						{
							return thumbPrefix+"specials"+thumbSuffix;
						}
						else if (thumb.Contains ("sn") == true)
						{
							return thumbPrefix+"sn"+thumbSuffix;
						}
						else if (thumb.Contains ("tnt") == true)
						{
							return thumbPrefix+"tnt"+thumbSuffix;
						}
						else if (thumb.Contains ("tsh") == true)
						{
							return thumbPrefix+"tsh"+thumbSuffix;
						}
						else if (thumb.Contains ("ttg") == true)
						{
							return thumbPrefix+"ttg"+thumbSuffix;
						}
						else if (thumb.Contains ("twich") == true)
						{
							return thumbPrefix+"twich"+thumbSuffix;
						}
						else if (thumb.Contains ("twiet") == true)
						{
							return thumbPrefix+"twiet"+thumbSuffix;
						}
						else if (thumb.Contains ("twig") == true)
						{
							return thumbPrefix+"twig"+thumbSuffix;
						}
						else if (thumb.Contains ("twil") == true)
						{
							return thumbPrefix+"twil"+thumbSuffix;
						}
						else if (thumb.Contains ("twit/") == true)
						{
							return thumbPrefix+"twit"+thumbSuffix;
						}
						else if (thumb.Contains ("tri") == true)
						{
							return thumbPrefix+"tri"+thumbSuffix;
						}
						else if (thumb.Contains ("ww") == true)
						{
							return thumbPrefix+"ww"+thumbSuffix;
						}
						else 
						{
							return thumbDefault;
						}
					}
			    ]]>
				</msxsl:script>
				<xsl:output indent="yes" method="xml" />
				<xsl:template match="item">
					<xsl:element name="item">
						<xsl:attribute name="date">
							<xsl:value-of select="pubDate"/>
						</xsl:attribute>
						<xsl:attribute name="duration">
							<xsl:value-of select="itunes:duration"/>
						</xsl:attribute>
						<xsl:attribute name="title">
							<xsl:value-of select="func:CleanTitle(title)"/>
						</xsl:attribute>
						<xsl:attribute name="rating">
							<xsl:value-of select="100"/>
						</xsl:attribute>
						<xsl:element name="description">
							<xsl:value-of select="func:TruncateSummary(itunes:summary)"/>
						</xsl:element>
						<xsl:element name="thumbnails">
							<xsl:element name="thumbnail">
								<xsl:attribute name="height">95</xsl:attribute>
								<xsl:attribute name="url">
									<xsl:value-of select="func:GetThumbnail(enclosure/@url)"/>
								</xsl:attribute>
								<xsl:attribute name="width">169</xsl:attribute>
							</xsl:element>
						</xsl:element>
						<xsl:element name="videos">
							<xsl:element name="video">
								<xsl:attribute name="type">
									<xsl:value-of select="enclosure/@type"/>
								</xsl:attribute>
								<xsl:attribute name="url">
									<xsl:value-of select="func:ReplaceVideoUrl(enclosure/@url)"/>
								</xsl:attribute>
							</xsl:element>
						</xsl:element>
					</xsl:element>
				</xsl:template>
				<xsl:template match="/">
					<xsl:element name="items">
						<xsl:apply-templates select="//item"/>
					</xsl:element>
				</xsl:template>
			</xsl:stylesheet>
		</Transform>
	</Transforms>
</VideoService>

jachin99

Posts: 1132
Joined: Wed Feb 24, 2016 3:36 pm
Location:

HTPC Specs: Show details

#5

Post by jachin99 » Mon Jul 23, 2018 3:11 pm

This adds esa. The URLs are still good but the content is old

Code: Select all

<?xml version="1.0" encoding="utf-8"?>

<VideoService Name="Science@ESA vodcasts"
              Description="The Science@ESA vodcasts explore the extraordinary Universe in which we live as it is seen through the eyes of ESA's fleet of science spacecraft. Visit http://astronomy2009.esa.int"
              Image="{ServicesPath}\ESA Science.png"
              DefaultCategoryUrl="http://sci.esa.int/vodcasts/scienceatesa/rss.xml"
              DefaultCategoryTransform="Feed"
              IsMultipage="False"
              Type="XSLT" 
              Version="0.2">
  
  <Categories>
    <Category ID="Science" Name="SD"  Url="http://sci.esa.int/vodcasts/scienceatesa/rss.xml" /> 
  <Category ID="ScienceHD" Name="HD" Url="http://sci.esa.int/vodcasts/hd/scienceatesa/rss.xml" /> 
  </Categories>
  
  <SortOrders>
    <SortOrder ID="date" Name="Date" />
  </SortOrders>
  
  <Transforms>
    <Transform Name="Feed">
      <xsl:stylesheet version="1.0"
                xmlns:content="http://purl.org/rss/1.0/modules/content/"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                xmlns:func="urn:local-functions"
                xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
                xmlns:media="http://search.yahoo.com/mrss/">

        <msxsl:script language="C#" implements-prefix="func">
          <![CDATA[
    
    
    ]]>
        </msxsl:script>
        <xsl:output indent="yes" method="xml" />

        <xsl:template match="item">
            <xsl:element name="item">
		<xsl:attribute name="date">
                	<xsl:value-of select="pubDate" />
		</xsl:attribute>
      		<xsl:attribute name="duration">
			<xsl:value-of select="300" />
		</xsl:attribute>
		<xsl:attribute name="rating">
			<xsl:value-of select="100" />
		</xsl:attribute>
		<xsl:attribute name="title">
			<xsl:value-of select="title" />
		</xsl:attribute>
		<xsl:element name="description">
	                <xsl:value-of select="itunes:summary" />
		</xsl:element>
              <xsl:element name="thumbnails">
                <xsl:element name="thumbnail">
                  <xsl:attribute name="height">120</xsl:attribute>
                  <xsl:attribute name="url">http://sci.esa.int/science-e-media/img/8e/IntroEpisode600.jpg</xsl:attribute>
                  <xsl:attribute name="width">192</xsl:attribute>
                </xsl:element>
              </xsl:element>
		<xsl:element name="videos">
                <xsl:element name="video">
			<xsl:attribute name="type"><xsl:value-of select="enclosure/@type"/></xsl:attribute>
			<xsl:attribute name="url"><xsl:value-of select="enclosure/@url"/></xsl:attribute>
		</xsl:element>
		</xsl:element>
            </xsl:element>
        </xsl:template>

        <xsl:template match="rss/channel">
          <xsl:element name="items">
            <xsl:apply-templates select="item" />
          </xsl:element>
        </xsl:template>


      </xsl:stylesheet>
    </Transform>
  
  </Transforms>
  
</VideoService>

jachin99

Posts: 1132
Joined: Wed Feb 24, 2016 3:36 pm
Location:

HTPC Specs: Show details

#6

Post by jachin99 » Mon Jul 23, 2018 3:18 pm

This adds the TV Archive, and still works

Code: Select all

<?xml version="1.0" encoding="utf-8"?>

<VideoService Name="Archive Classic TV"
              Description="Focus is on content made more than 30 years ago, and more specifically on movies and TV from the 1930s, 40s, 50s and 60s, when they really knew how to make 'em!, but any classics from 1930`s to 1980`s is welcome."
              Image="{ServicesPath}\Archive Classic TV.png"
              DefaultCategoryUrl="http://feeds2.feedburner.com/ArchiveClassicTv"
              DefaultCategoryTransform="Feed"
              IsMultipage="False"
              Type="XSLT" 
              Version="0.2">
    <Categories>
    <Category ID="Stories" Name="Soapbox" />
  </Categories>
  
  <SortOrders>
    <SortOrder ID="date" Name="Date" />
  </SortOrders>
  
  <Transforms>
    <Transform Name="Feed">
      <xsl:stylesheet version="1.0"
                xmlns:content="http://purl.org/rss/1.0/modules/content/"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                xmlns:func="urn:local-functions"
                xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
                xmlns:media="http://search.yahoo.com/mrss/">

        <msxsl:script language="C#" implements-prefix="func">
          <![CDATA[
    
    
    ]]>
        </msxsl:script>
        <xsl:output indent="yes" method="xml" />

        <xsl:template match="item">
            <xsl:element name="item">
		<xsl:attribute name="date">
                	<xsl:value-of select="pubDate" />
		</xsl:attribute>
      		<xsl:attribute name="duration">
			<xsl:value-of select="300" />
		</xsl:attribute>
		<xsl:attribute name="rating">
			<xsl:value-of select="100" />
		</xsl:attribute>
		<xsl:attribute name="title">
			<xsl:value-of select="title" />
		</xsl:attribute>
		<xsl:element name="description">
	                <xsl:value-of select="itunes:summary" />
		</xsl:element>
              <xsl:element name="thumbnails">
                <xsl:element name="thumbnail">
                  <xsl:attribute name="height">120</xsl:attribute>
                  <xsl:attribute name="url">http://api.ning.com/files/NxOVmXDgY4PJyxGQXG1GBuIisk0Vh8Q9lUoaWoOuVq6BP3foGCM9L7zEIBBuOII2VhcGFIGiaO3hQGZfnMtqah0J0C1cXRlE/classicshows320x200.jpg?crop=1%3A1&width=171
 </xsl:attribute>
                  <xsl:attribute name="width">192</xsl:attribute>
                </xsl:element>
              </xsl:element>
		<xsl:element name="videos">
                <xsl:element name="video">
			<xsl:attribute name="type"><xsl:value-of select="enclosure/@type"/></xsl:attribute>
			<xsl:attribute name="url"><xsl:value-of select="enclosure/@url"/></xsl:attribute>
		</xsl:element>
		</xsl:element>
            </xsl:element>
        </xsl:template>

        <xsl:template match="rss/channel">
          <xsl:element name="items">
            <xsl:apply-templates select="item" />
          </xsl:element>
        </xsl:template>


      </xsl:stylesheet>
    </Transform>
  
  </Transforms>
  
</VideoService>

User avatar
DavidinCT

Posts: 1385
Joined: Mon Feb 13, 2012 3:45 pm
Location:

HTPC Specs: Show details
5+ Yrs TGB Veteran Microsoft MVP

#7

Post by DavidinCT » Sun Jul 29, 2018 5:10 pm

Nice to have a list of things for this but, 95% of the stuff you have listed has old content, Used to use this app a lot when it was a active app... Anything more modern ?
-Dave
Twitter @TheCoolDave

Windows Media Center certified and WMC MVP 2010 - 2012

jachin99

Posts: 1132
Joined: Wed Feb 24, 2016 3:36 pm
Location:

HTPC Specs: Show details

#8

Post by jachin99 » Thu Aug 02, 2018 2:13 am

DavidinCT wrote:Nice to have a list of things for this but, 95% of the stuff you have listed has old content, Used to use this app a lot when it was a active app... Anything more modern ?
Twit TV, and Channel 9 still have current, regularly updated content but the TV Archive feed hasn't been updated in four years I believe. Here is one for Zero Puncutation, which has a current feeds.

Code: Select all

<?xml version="1.0" encoding="utf-8" ?>
<VideoService
	DefaultCategoryTransform="Feed"
	DefaultCategoryUrl="http://www.escapistmagazine.com/rss/videos/list/1.xml"
    Description="Zero Punctuation is The Escapist's groundbreaking video review series starring Ben 'Yahtzee' Croshaw. Every Wednesday Zero Punctuation picks apart the games so you don't have to."
	Enabled="true"
    Image="http://services.jasmio.com/macrotube/providers/ZeroPunctuation.png"
	Name="Zero Punctuation"
	IsMultipage="False"
	Type="XSLT"
	UpdateUrl="http://services.jasmio.com/macrotube/providers/ZeroPunctuation.xml"
	Version="1.0"
	>
	<Categories>
		<Category ID="all" Name="All" />
	</Categories>
	<SortOrders>
		<SortOrder ID="date" Name="date" />
	</SortOrders>
	<Transforms>
		<Transform Name="Feed">
			<xsl:stylesheet
				version="1.0"
				xmlns:dc="http://purl.org/dc/elements/1.1/"
				xmlns:content="http://purl.org/rss/1.0/modules/content/"
				
				xmlns:atom="http://www.w3.org/2005/Atom"
				xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
				xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
				xmlns:gml="http://www.opengis.net/gml"
				xmlns:georss="http://www.georss.org/georss"
				xmlns:media="http://search.yahoo.com/mrss/"
				xmlns:yt="http://gdata.youtube.com/schemas/2007"
				xmlns:gd="http://schemas.google.com/g/2005"
				xmlns:msxsl="urn:schemas-microsoft-com:xslt"
				xmlns:func="urn:local-functions"
				>
				<msxsl:script language="C#" implements-prefix="func">
				<![CDATA[
				
				static Regex descMatch = new Regex(@"^.*<p>(.+?)</p>.*", RegexOptions.Compiled);
				
				public string escapeuridata(string unescaped)
				{
					return Uri.EscapeDataString(unescaped);
				}
				public string fixdesc(string source)
				{
				  return string.Format("{0}", descMatch.Replace(source, @"$1"));
				}
				public string fixdate(string source)
				{
				  return Regex.Replace(source, ".{3}$", "+0000");
				}
				]]>
				</msxsl:script>

				<xsl:output indent="yes" method="xml" />
			   <xsl:template match="item">
				<xsl:element name="item">
				  <xsl:attribute name="date">
				    <xsl:value-of select="func:fixdate(pubDate)" />
				  </xsl:attribute>
				  <xsl:attribute name="duration">
				    500
				  </xsl:attribute>
				  <xsl:attribute name="title">
				    <xsl:value-of select="title" />
				  </xsl:attribute>
				  <xsl:attribute name="rating">
				    0
				  </xsl:attribute>
				  <xsl:element name="description">
				    <xsl:value-of select="func:fixdesc(description)" />
				  </xsl:element>
				  <xsl:element name="thumbnails">
				    <xsl:element name="thumbnail">
					 <xsl:attribute name="width">150</xsl:attribute>
					 <xsl:attribute name="height">128</xsl:attribute>
					 <xsl:attribute name="url">http://img1.imageshack.us/thumbnail.png</xsl:attribute>
					</xsl:element>
				  </xsl:element>
				  <xsl:element name="videos">
				    <xsl:element name="video">
					 <xsl:attribute name="type">video/mpeg</xsl:attribute>
					 <xsl:attribute name="url">
					   <xsl:value-of select="link" />
					 </xsl:attribute>
				    </xsl:element>
				  </xsl:element>
				</xsl:element>
			   </xsl:template>
			   <xsl:template match="/">
				<xsl:element name="items">
				  <xsl:apply-templates select="//item" />
				</xsl:element>
			   </xsl:template>
			</xsl:stylesheet>
		</Transform>
	</Transforms>
	<VideoProviders>
		<VideoProvider class="MacroTube.Model.ZeroPunctuationProvider">
					<![CDATA[

using System;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;

namespace MacroTube.Model
{
	public class ZeroPunctuationProvider : VideoProvider
	{
		private static readonly Regex _watchMatch = new Regex(@"^http://www.escapistmagazine.com/.*", RegexOptions.Compiled);
		
		private static readonly Regex _jsMatch = new Regex(@"^.*flashvars=""config=(.+?)"".*", RegexOptions.Compiled | RegexOptions.Singleline);
		
		private static readonly Regex _urlMatch = new Regex(@"^.*url':'(http://video2.+?)'.*", RegexOptions.Compiled | RegexOptions.Singleline);

		public YouTubeVideoProvider()
			: base()
		{
		}

		public override string GetDownloadUrl(string sourceURL)
		{
			if (!IsProvider(sourceURL)) return null;

			string newsourceURL = null;
			string resolvedURL = null;

			Debug.WriteLine(string.Format("Source URL: {0}", sourceURL));

			try
			{
				WebClient client = new WebClient();

				string html = client.DownloadString(sourceURL);

				newsourceURL = string.Format("{0}", _jsMatch.Replace(html, "$1"));

				Debug.WriteLine(string.Format("New Source URL: {0}", newsourceURL));
				
				client.Headers.Clear();
				client.Headers.Add("Referer", sourceURL);
				
				string newhtml = client.DownloadString(newsourceURL);
				
				Debug.WriteLine("NEW HTML: " + newhtml);

				resolvedURL = string.Format("{0}", _urlMatch.Replace(newhtml, "$1"));

				Debug.WriteLine(string.Format("Resolved URL: {0}", resolvedURL));
			}
			catch (Exception ex)
			{
                Debug.WriteLine(string.Format("Error getting download URL: {0}\r\n{1}\r\n{2}", sourceURL, ex));
			}

			return Uri.IsWellFormedUriString(resolvedURL, UriKind.Absolute) ? resolvedURL : null;
		}

		public override bool IsProvider(string url)
		{
			return _watchMatch.IsMatch(url);
		}
	}
}
		]]></VideoProvider>
	</VideoProviders>
</VideoService>
Video links show up in macrotube but for whatever reason I can't get the videos to play. I see an LAV splitter Icon show up in the system tray for a second but then get no video, and the LAV splitter icon goes away. I have shark's advanced codecs installed. I labeled the thread "All about Macrotube" becasue there might be a codec component in terms of restoring everything. The daily motion also has a current feed but won't play videos. In the old TGB forums I saw where a member had trouble with youtube, the daily motion, and others but they resolved it by installing core avc codecs, which were a paid product but have dissapeared. I believe Core AVC was just a H264 codec. I'm still sorting through these but I doubt I will be successful, and I'll likely need help from at least someone who understands XLST. The two I was able to fix are Channel 9, and TV Archive.

User avatar
DavidinCT

Posts: 1385
Joined: Mon Feb 13, 2012 3:45 pm
Location:

HTPC Specs: Show details
5+ Yrs TGB Veteran Microsoft MVP

#9

Post by DavidinCT » Sat Aug 11, 2018 9:49 pm

If am correct... Macrotube can be setup for any video site that has a RSS feed, you just need to edit the XML file for the site.... To make it a worthy app, it's gota have a ton of current updated options.

jachin99 wrote: Video links show up in macrotube but for whatever reason I can't get the videos to play. I see an LAV splitter Icon show up in the system tray for a second but then get no video, and the LAV splitter icon goes away. I have shark's advanced codecs installed. I labeled the thread "All about Macrotube" becasue there might be a codec component in terms of restoring everything. The daily motion also has a current feed but won't play videos. In the old TGB forums I saw where a member had trouble with youtube, the daily motion, and others but they resolved it by installing core avc codecs, which were a paid product but have dissapeared. I believe Core AVC was just a H264 codec. I'm still sorting through these but I doubt I will be successful, and I'll likely need help from at least someone who understands XLST. The two I was able to fix are Channel 9, and TV Archive.
Open IE, go to the main site with that has the videos in question. Try to play them in IE and see what your results are. This should help you troubleshoot this. On a general note with WMC, if IE and Media player (for other content) can play it, it will work in WMC.

This has always been the case, as it depends on components from both to play.
-Dave
Twitter @TheCoolDave

Windows Media Center certified and WMC MVP 2010 - 2012

jachin99

Posts: 1132
Joined: Wed Feb 24, 2016 3:36 pm
Location:

HTPC Specs: Show details

#10

Post by jachin99 » Sat Dec 01, 2018 5:56 am

Perfect candidate for macrotube: https://www.npr.org/rss/podcast.php?id=510292

jachin99

Posts: 1132
Joined: Wed Feb 24, 2016 3:36 pm
Location:

HTPC Specs: Show details

#11

Post by jachin99 » Thu May 30, 2019 5:40 pm

A lot of the providers in macrotube came from google's feedburner before it was shut down. I haven't been able to find anything similar but this might be what I have been looking for: https://podsync.net/ It looks to do the same thing as feedburner for youtube and vimeo at least, and it claims to turn individual youtube channels into podcast feeds. With enough work I might be able to create a provider for macrotube that parses podsync xml feeds.

Post Reply