Indexera data från youtube och andra källor
2013-04-03Att skapa en Connector för att indexera data från externa system är relativt enkelt i SiteSeeker, givet att den externa källan är hjälpsam.
Genom att blanda er webbplats träffar med videoklipp från t.ex. er Youtube-kanal kan ni leverera ännu mer värde till era besökare.
Introduktion
Denna guide beskriver hur du hämtar data från Youtube och presenterar den på din resultatsida, med hjälp av SiteSeekers .NET-modul. Principerna går dock att applicera på andra datakällor och integrationsmoduler.
Steg 1 - Skapa en feed
Youtube erbjuder ett väldigt trevligt feed-API som du kan använda dig av. I vårt fall nöjer vi oss med en enkel feed, vi anger YouTube i Author-fältet, ökar Number of Results till 50, och väljer RSS 2.0 som feed-format. Det ger oss följande feed:
http://gdata.youtube.com/feeds/api/videos?max-results=50&alt=rss&author=YouTube
Steg 2 - Hämta ut data från feeden och skapa HTML-sidor av resultatet
Vi använder oss av Linq för att strukturera upp datat från vår feed:
using System.Xml.Linq; using System.Linq; using System.ServiceModel.Syndication; //Skapa en dataklass för att spara ner videoegenskaperna public class YoutubeObject { public string Title; public string Url; public string Thumbnail; public string Description; } //URL till din feed public static string FEED_URL = "http://gdata.youtube.com/feeds/api/videos?max-results=50&alt=rss&author=YouTube"; //Läs in din feed och returnera datat som YoutubeObjects public static List<YoutubeObject> ReadFeed() { var xDoc = XDocument.Load(FEED_URL); XNamespace media = "http://search.yahoo.com/mrss/"; XNamespace atom = "http://www.w3.org/2005/Atom"; var items = xDoc.Descendants(media + "group") .Select(i => new YoutubeObject { Title = i.Element(media + "title").Value, Url = i.Element(media + "player").Attribute("url").Value, Thumbnail = i.Element(media + "thumbnail").Attribute("url").Value, Description = i.Element(media + "description").Value }).ToList(); return items; }
Skapa sedan en webbsida av varje video-objekt, och sedan en samlingssida som länkar till dem alla. Den behöver inte vara vacker utan ska endast besökas av SiteSeekers crawler. En färdig sida ska se ut ungefär så här:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" > <meta name="videoUrl" content="[VideoObject.Url]" /> <meta name="thumbnail" content="[VideoObject.Thumbnail]" /> <meta name="videoid" content="[VideoID - kan hämtas från videons URL]" /> </head> <body> <h1>[VideoObject.Title</h1> <p>[VideoObject.Description]</p> </body> </html>
Steg 3 - SiteSeeker admin
Gå in i Siteseeker admin och skapa en startpunkt till din nyskapade samlingssida från Servrar -> Startpunkter.
Gå sedan till fliken Metainformation och skriv in följande för att kunna komma åt dina metadatafält från koden i steg 4:
string:thumbnail
string:videoId
string:videoUrl
Kör nu en full indexering av din nya startpunkt. Du borde nu kunna söka på dina HTML-representationer av videoklippen.
Steg 4 - Designa träfflistan
För att videoklippen ska visas korrekt i träfflistan behöver du överrida HTML-helpern ResultHItTitleAndSnippet och designa deras HTML-kod.
public override string ResultHitTitleAndSnippet(SearchHit hit) { var a = new TagBuilder("a"); a.AddCssClass("ess-hitLink"); a.MergeAttribute("name", "ess-hitNumber-" + hit.OrdinalNumberInResult); //Länka till youtube om det är en videoträff, länka annars till webbsidan som vanligt string videoUrl =""; hit.MetaAttributes.TryGetValue("videoUrl", out videoUrl); if (!String.IsNullOrEmpty(videoUrl)) { a.MergeAttribute("href", videoUrl); } else { a.MergeAttribute("href", GetUrl(hit)); } a.MergeAttribute("title", hit.TitleNoFormatting); var h2 = this.GetHeadingByLevel(2); h2.AddCssClass("ess-hitTitleHeader"); h2.InnerHtml = hit.Title; var snippet = new TagBuilder("p") { InnerHtml = hit.Snippet }; a.InnerHtml += h2; //Använd videoID för att skapa ett embed-objekt. string videoID = ""; hit.MetaAttributes.TryGetValue("videoId", out videoID); if (!String.IsNullOrEmpty(videoID)) { var embed = new TagBuilder("iframe"); embed.MergeAttribute("width", "560"); embed.MergeAttribute("height", "315"); embed.MergeAttribute("src", "http://www.youtube.com/embed/" + videoID); embed.MergeAttribute("frameborder", "0"); embed.MergeAttribute("allowfullscreen", ""); return a.ToString() + new TagBuilder("br") + embed.ToString() + snippet.ToString(); } //Skriv ut träffen som vanligt om det inte är en videoträff. return a + snippet.ToString(); }
Om du istället för embed-objekt endast vill visa en tumnagel kan du ersätta embed-koden med följande:
string imageUrl =""; hit.MetaAttributes.TryGetValue("thumbnail", out imageUrl); if (!String.IsNullOrEmpty(imageUrl)) { var img = new TagBuilder("img"); img.MergeAttribute("src", imageUrl); img.AddCssClass("ess-thumbnail"); return a + img.ToString() + snippet.ToString(); }