IN .NET 3.5 Je connais les classes System.ServiceModel.Syndication qui peuvent créer des flux rss Atom 1.0 et RSS 2.0. Est-ce que quelqu'un sait d'un moyen de générer facilement Media RSS de Yahoo dans ASP.Net? Je suis à la recherche d'un moyen gratuit et rapide de générer un flux MRSS.Générer un flux RSS (MRSS) Media dans ASP.NET 3.5
Répondre
Voici une solution simplifiée, je fini par utiliser dans un HttpHandler (de ashx):
public void GenerateRss(HttpContext context, IEnumerable<Media> medias)
{
context.Response.ContentType = "application/rss+xml";
XNamespace media = "http://search.yahoo.com/mrss";
List<Media> videos2xml = medias.ToList();
XDocument rss = new XDocument(
new XElement("rss", new XAttribute("version", "2.0"),
new XElement("channel",
new XElement("title", ""),
new XElement("link", ""),
new XElement("description", ""),
new XElement("language", ""),
new XElement("pubDate", DateTime.Now.ToString("r")),
new XElement("generator", "XLinq"),
from v in videos2xml
select new XElement("item",
new XElement("title", v.Title.Trim()),
new XElement("link", "",
new XAttribute("rel", "alternate"),
new XAttribute("type", "text/html"),
new XAttribute("href", String.Format("/Details.aspx?vid={0}", v.ID))),
new XElement("id", NotNull(v.ID)),
new XElement("pubDate", v.PublishDate.Value.ToLongDateString()),
new XElement("description",
new XCData(String.Format("<a href='/Details.aspx?vid={1}'> <img src='/Images/ThumbnailHandler.ashx?vid={1}' align='left' width='120' height='90' style='border: 2px solid #B9D3FE;'/></a><p>{0}</p>", v.Description, v.ID))),
new XElement("author", NotNull(v.Owner)),
new XElement("link",
new XAttribute("rel", "enclosure"),
new XAttribute("href", String.Format("/Details.aspx?vid={0}", v.ID)),
new XAttribute("type", "video/wmv")),
new XElement(XName.Get("title", "http://search.yahoo.com/mrss"), v.Title.Trim()),
new XElement(XName.Get("thumbnail", "http://search.yahoo.com/mrss"), "",
new XAttribute("url", String.Format("/Images/ThumbnailHandler.ashx?vid={0}", v.ID)),
new XAttribute("width", "320"),
new XAttribute("height", "240")),
new XElement(XName.Get("content", "http://search.yahoo.com/mrss"), "a",
new XAttribute("url", String.Format("/Details.aspx?vid={0}", v.ID)),
new XAttribute("fileSize", Default(v.FileSize)),
new XAttribute("type", "video/wmv"),
new XAttribute("height", Default(v.Height)),
new XAttribute("width", Default(v.Width))
)
)
)
)
);
using (XmlWriter writer = new XmlTextWriter(context.Response.OutputStream, Encoding.UTF8))
{
try
{
rss.WriteTo(writer);
}
catch (Exception ex)
{
Log.LogError("VideoRss", "GenerateRss", ex);
}
}
}
Étape 1: Convertir vos données en XML:
Alors, donné une liste de photos:
var photoXml = new XElement("photos",
new XElement("album",
new XAttribute("albumId", albumId),
new XAttribute("albumName", albumName),
new XAttribute("modified", DateTime.Now.ToUniversalTime().ToString("r")),
from p in photos
select
new XElement("photo",
new XElement("id", p.PhotoID),
new XElement("caption", p.Caption),
new XElement("tags", p.StringTags),
new XElement("albumId", p.AlbumID),
new XElement("albumName", p.AlbumName)
) // Close element photo
) // Close element album
);// Close element photos
Étape 2: Lancez le XML à travers une XSLT:
Ensuite, en utilisant quelque chose comme suivant, exécutez cela à travers some XSLT, où xslPath est le chemin d'accès à votre XSLT, courant est le HttpContext actuel:
var xt = new XslCompiledTransform();
xt.Load(xslPath);
var ms = new MemoryStream();
if (null != current){
var xslArgs = new XsltArgumentList();
var xh = new XslHelpers(current);
xslArgs.AddExtensionObject("urn:xh", xh);
xt.Transform(photoXml.CreateNavigator(), xslArgs, ms);
} else {
xt.Transform(photoXml.CreateNavigator(), null, ms);
}
// Set the position to the beginning of the stream.
ms.Seek(0, SeekOrigin.Begin);
// Read the bytes from the stream.
var byteArray = new byte[ms.Length];
ms.Read(byteArray, 0, byteArray.Length);
// Decode the byte array into a char array
var uniEncoding = new UTF8Encoding();
var charArray = new char[uniEncoding.GetCharCount(
byteArray, 0, byteArray.Length)];
uniEncoding.GetDecoder().GetChars(
byteArray, 0, byteArray.Length, charArray, 0);
var sb = new StringBuilder();
sb.Append(charArray);
// Returns the XML as a string
return sb.ToString();
J'ai ces deux bits de code assis dans une méthode "BuildPhotoStream".
La classe "XslHelpers" contient les éléments suivants:
public class XslHelpers{
private readonly HttpContext current;
public XslHelpers(HttpContext currentContext){
current = currentContext;
}
public String ConvertDateTo822(string dateTime){
DateTime original = DateTime.Parse(dateTime);
return original.ToUniversalTime()
.ToString("ddd, dd MMM yyyy HH:mm:ss G\"M\"T");
}
public String ServerName(){
return current.Request.ServerVariables["Server_Name"];
}
}
Cela me fournit essentiellement avec une belle mise en forme des dates que XSLT doens't me donner.
Etape 3: le rendu XML résultant à l'application client:
« BuildPhotoStream » est appelé par « RenderHelpers.Photos » et « RenderHelpers.LatestPhotos », qui sont responsables pour obtenir les détails de la photo du Linq2Sql objets, et ils sont appelés à partir d'une page ASPX vide (je sais maintenant que cela devrait vraiment être un gestionnaire d'ASHX, je suis tout simplement pas eu l'occasion de le fixer):
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentType = "application/rss+xml";
ResponseEncoding = "UTF-8";
if (!string.IsNullOrEmpty(Request.QueryString["AlbumID"]))
{
Controls.Add(new LiteralControl(RenderHelpers
.Photos(Server.MapPath("/xsl/rssPhotos.xslt"), Context)));
}
else
{
Controls.Add(new LiteralControl(RenderHelpers
.LatestPhotos(Server.MapPath("/xsl/rssLatestPhotos.xslt"), Context)));
}
}
A la fin de tout cela, Je me retrouve avec ceci:
qui a travaillé dans Cooliris/PicLens quand je l'ai mis en place, mais semble maintenant de rendre les images dans le plan de réflexion, et lorsque vous cliquez sur eux, mais pas dans la vue murale :(
Si vous l'avez manqué ci-dessus, le XSLT se trouve ici:
Vous devrez évidemment l'éditer en fonction de vos besoins (et l'ouvrir dans quelque chose comme Visual Studio - FF cache la plupart des stylesheet def, y compris xmlns: atom = "http://www.w3.org/2005/Atom "xmlns: media =" http://search.yahoo.com/mrss ").
Cela semble beaucoup de travail étant donné que la seule chose qui manque à la classe SyndicationFeed est la possibilité de définir xmlns: media = "http://search.yahoo.com/mrss" dans la balise
Pour être honnête, j'ai écrit cela dans .NET 2.0 avant que les trucs de flux de syndication soient sortis. Ce n'est pas tout ce travail;) Je suppose qu'avec une quantité de travail différente, on pourrait facilement se débarrasser du nouveau SyndicationFeedFormatter qui gère les flux MRSS, je ne l'ai pas encore regardé c'est tout. –
j'ai pu ajouter l'espace de noms de médias à la balise rss en procédant comme suit:
XmlDocument feedDoc = new XmlDocument();
feedDoc.Load(new StringReader(xmlText));
XmlNode rssNode = feedDoc.DocumentElement;
// You cant directly set the attribute to anything other then then next line. So you have to set the attribute value on a seperate line.
XmlAttribute mediaAttribute = feedDoc.CreateAttribute("xmlns", "media", "http://www.w3.org/2000/xmlns/");
mediaAttribute.Value = "http://search.yahoo.com/mrss/";
rssNode.Attributes.Append(mediaAttribute);
return feedDoc.OuterXml;
Juste pour ajouter une autre option pour référence future:
J'ai créé une bibliothèque qui exploite les classes SyndicationFeed dans .NET et vous permet de lire et d'écrire des flux rss de médias.
- 1. Inverser un flux RSS
- 2. TFS checkin Flux RSS
- 3. Comment écrire un flux RSS avec Java?
- 4. Rendre un service Web ASP.NET en sortie Flux RSS
- 5. Flux RSS personnalisé dans Dokuwiki
- 6. Flux RSS dans EBSCO igoogle
- 7. AdSense dans flux RSS - PHP
- 8. Générer un flux atom ou rss dans le cadre d'un processus msbuild
- 9. Gestion des flux RSS
- 10. Problèmes de flux RSS?
- 11. Flux RSS depuis Gallery2
- 12. craigslist flux rss
- 13. flux RSS liste (gratuit)
- 14. créant un flux RSS à partir asp.net boîte à outils à l'aide datasource rss
- 15. Comment créer un flux RSS et l'afficher?
- 16. Comment masser/modifier un flux RSS?
- 17. DateTime.Parse pour pubDate dans les flux RSS
- 18. Appliquer XSL au flux RSS
- 19. Combinaison de plusieurs flux RSS
- 20. Meilleur moyen d'enregistrer un flux dans un fichier dans asp.net 3.5?
- 21. Champs personnalisés dans le flux RSS WordPress
- 22. Désérialisation d'un flux RSS dans .NET
- 23. Configuration du flux RSS dans MOSS
- 24. Comment personnaliser les flux RSS dans SharePoint
- 25. Accès PHP aux tags iTunes dans un flux RSS
- 26. Détection de nouveaux éléments dans un flux RSS
- 27. Comment obtenir la saisie complète dans un flux RSS 2.0
- 28. Flux RSS populaires de MySQL
- 29. Ruby XML Iteration Flux RSS
- 30. Bibliothèque Java pour lire un flux Microsoft Media Server (MMS)
J'ai en fait quelqu'un de mon équipe qui travaille sur ce sujet, en essayant d'utiliser la classe SyndicationFeed intégré. Il vient de m'annoncer qu'il croit avoir trouvé une solution et j'espère pouvoir en poster un bientôt. – James
ce serait génial s'il vous plaît envoyer – chrisg
J'ai trouvé cela aussi comme une alternative LINQ à XML http://code-inside.de/blog-in/2008/07/01/howto-use-piclens-and-other-mediarss- clients-pour-votre-propre-site-web-créer-mediarss-avec-linq-à-xml/ – chrisg