Пример #1
0
        public void Test_Read_Write_Equals_From_Absolute_Url()
        {
            string absoluteUrl = "https://www.dr.dk/sitemap.xml";
            string s           = string.Empty;
            Urlset urlset      = null;

            using (var httpLoader = new HttpLoader(new Url(absoluteUrl)))
            {
                try
                {
                    urlset = httpLoader.Urlsets.FirstOrDefault();
                    if (urlset == null)
                    {
                        Assert.Fail($"urlset expected from {urlset} is null");
                    }
                    s = Composer.ComposeUrlset(httpLoader.Urlsets.First());
                }
                catch (Exception ex)
                {
                    Assert.Fail($"error {ex.Message}");
                }
            }
            var loader = new Loader();

            loader.Add(urlset);

            Assert.IsTrue(loader.Urlsets.First().Entities.Count == urlset.Entities.Count);
        }
Пример #2
0
        public Urlset SitemapToObject(string path)
        {
            Urlset        Data       = new Urlset();
            XmlSerializer serializer = new XmlSerializer(typeof(Urlset));
            StreamReader  reader     = new StreamReader(path);

            Data = (Urlset)serializer.Deserialize(reader);
            reader.Close();
            return(Data);
        }
Пример #3
0
 private static void digikala_SitemapToObject(string path)
 {
     //string path = @"C:\Digikala\100125842.xml";
     using (var sitemap = new SitemapHelper())
     {
         Urlset list  = sitemap.SitemapToObject(path);
         var    _test = list.urlset.ToList();
         Console.WriteLine("Sitemap Count: " + _test.Count());
     }
 }
        public void Process(SitemapBuildSitemapXmlArgs args)
        {
            Assert.ArgumentNotNull(args, nameof(args));

            var urlSet = new Urlset();

            var filteredSitemapItems = args.SitemapItems;

            if (args.IsGroup)
            {
                filteredSitemapItems = filteredSitemapItems.Where(sitemapItem =>
                                                                  sitemapItem.SiteContext.Name == args.SitemapSiteArgs.SiteContext.Name).ToList();
            }

            foreach (var sitemapItem in filteredSitemapItems)
            {
                var path = sitemapItem.Path;

                // TODO: optimize this loop
                var alternates = args.SitemapItems.Where(item => item.Path == path);

                // Cycle through once to get all links for itemAlternates
                //
                // e.g.
                //
                // <xhtml:link rel="alternate" hreflang="en" href="http://www.site.com/"  />
                // <xhtml:link rel="alternate" hreflang="fr-ca" href="http://www.site.com/fr" />
                //
                var links = BuildAlternates(alternates, args.SitemapSiteArgs);

                // output individual loc and lastmod time per https://support.google.com/webmasters/answer/2620865?hl=en
                //
                // e.g.
                //
                //<url>
                //  <loc>http://www.site.com/</loc>
                //  <lastmod>2018-01-16</lastmod>
                //  <xhtml:link rel="alternate" hreflang="en" href="http://www.site.com/" />
                //  <xhtml:link rel="alternate" hreflang="fr-ca" href="http://www.site.com/fr" />
                //</url>
                //<url>
                //  <loc>http://www.site.com/fr</loc>
                //  <lastmod>2018-03-26</lastmod >
                //  <xhtml:link rel="alternate" hreflang="en" href="http://www.site.com" />
                //  <xhtml:link rel="alternate" hreflang="fr-ca" href="http://www.site.com/fr" />
                //</url>
                //

                var url = BuildUrl(links, sitemapItem, args.SitemapSiteArgs.SiteContext.SiteInfo.EnableItemLanguageFallback);

                urlSet.Url.Add(url);
            }

            args.SitemapSiteArgs.XmlObjects = urlSet;
        }
Пример #5
0
    static void Main(string[] args)
    {
        var data = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><urlset><url><loc>http://www.myurl.de/</loc><lastmod>2012-06-25T17:10:30+00:00</lastmod><changefreq>always</changefreq></url></urlset>";

        var ser = new System.Xml.Serialization.XmlSerializer(typeof(Urlset));

        Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(data));

        Urlset reply = (Urlset)ser.Deserialize(stream);

        reply.Dump();
    }
Пример #6
0
        public static Urlset getUrls(string xml)
        {
            Urlset reply    = new Urlset();
            string xmlClean = xml.Replace("<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n", "<urlset>");
            var    ser      = new System.Xml.Serialization.XmlSerializer(typeof(Urlset));

            //Replace("</urlset>", "").Trim();

            Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(xmlClean));

            reply = (Urlset)ser.Deserialize(stream);
            return(reply);
        }
Пример #7
0
 public async Task <Urlset> GetUrlsetAsync(string url)
 {
     return(await _cacheManager.GetCache(SitemapCacheNames.CacheSitemap)
            .GetAsync("Admin", async k =>
     {
         var articleIds = await _articleRepository
                          .GetAll()
                          .OrderByDescending(p => p.CreationTime)
                          .Select(p => p.Id)
                          .ToListAsync();
         var typeIds = await _articleTypeRepository
                       .GetAll()
                       .Select(p => p.Id)
                       .ToListAsync();
         var tagNames = await _articleTagRepository
                        .GetAll()
                        .Select(p => p.Name)
                        .ToListAsync();
         Urlset urlset = new Urlset();
         urlset.Urls.Add(new UrlDto()
         {
             loc = url, lastmod = DateTime.Now.ToShortDateString(), changefreq = "weekly", priority = "1.00"
         });
         foreach (var item in typeIds)
         {
             urlset.Urls.Add(new UrlDto()
             {
                 loc = $"{url}/Article/Type_{item}.html", changefreq = "weekly", priority = "0.80"
             });
         }
         foreach (var item in articleIds)
         {
             urlset.Urls.Add(new UrlDto()
             {
                 loc = $"{url}/Article/Details_{item}.html", changefreq = "daily", priority = "0.90"
             });
         }
         foreach (var item in tagNames)
         {
             urlset.Urls.Add(new UrlDto()
             {
                 loc = $"{url}/Article/Tag_{item}.html", changefreq = "daily", priority = "0.70"
             });
         }
         return urlset;
     }) as Urlset);
 }
Пример #8
0
        public async Task sitemap()
        {
            Response.ContentType = "text/xml";
            var serializer = new XmlSerializer(typeof(Urlset));
            var set        = new Urlset();
            var data       = await GetTiles();

            var page = 0;

            set.Url = data.Split(this.setting.AmountPerPage).Select(a => new Url()
            {
                Changefreq = "daily",
                Lastmod    = a.Select(b => b.PublishedDate).Max().ToString(),
                Loc        = Url.Action("Index", "Home", new { page = page++ }, this.Request.Scheme),
                Priority   = "1"
            }).ToList();
            serializer.Serialize(Response.Body, set);
        }
Пример #9
0
        public IEnumerable <string> GetSitemapUrls(string sitemapXML)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(Urlset));

            var result = new Urlset();

            using (TextReader reader = new StringReader(sitemapXML))
            {
                try
                {
                    result = (Urlset)serializer.Deserialize(reader);
                }
                catch (System.InvalidOperationException)
                {
                    throw new Exception("Invalid sitemap format");
                }
            }

            return(result.Urls.Select(url => url.Loc));
        }
Пример #10
0
        public override void Process(HttpRequestArgs args)
        {
            //This check will verify if the physical path of the request exists or not.
            if (!System.IO.File.Exists(args.HttpContext.Request.PhysicalPath) &&
                !System.IO.Directory.Exists(args.HttpContext.Request.PhysicalPath))
            {
                Assert.ArgumentNotNull(args, "args");
                //Check if the request is of sitemap.xml then only allow the request to serve sitemap.xml
                if (args.Url == null || !args.Url.FilePath.ToLower().EndsWith("sitemap.xml"))
                {
                    return;
                }
                try
                {
                    // Homepage of the Website.
                    // Start path will give homepage including Multisite.
                    var homepage = Context.Database.GetItem(args.StartPath);
                    var ser      = new XmlSerializer(typeof(Urlset));

                    var urlSet = new Urlset();

                    //Create node of Homepage in Sitemap.
                    var tmpurlset = new List <Url>();
                    var config    = AppendLanguage();

                    if (!ExcludeItemFromSitemap(homepage))
                    {
                        tmpurlset.Add(new Url
                        {
                            Loc = GetAbsoluteLink(LinkManager.GetItemUrl(homepage, new UrlOptions()
                            {
                                LanguageEmbedding = (config == 2 ? LanguageEmbedding.Always : (config == 1 ? LanguageEmbedding.AsNeeded : LanguageEmbedding.Never))
                            })),
                            Lastmod = homepage.Statistics.Updated.ToString("yyyy-MM-dd hh:mm:ss")
                        });
                    }

                    // Get all decendants of Homepage to create full Sitemap.
                    var childrens = homepage.Axes.GetDescendants();
                    //Remove the items whose templateid is in exclude list
                    var finalcollection = childrens.Where(x => !ExcludeItemFromSitemap(x)).ToList();

                    tmpurlset.AddRange(finalcollection.Select(childItem => new Url
                    {
                        Loc = GetAbsoluteLink(LinkManager.GetItemUrl(childItem, new UrlOptions()
                        {
                            LanguageEmbedding = (config == 2 ? LanguageEmbedding.Always : (config == 1 ? LanguageEmbedding.AsNeeded : LanguageEmbedding.Never))
                        })),
                        Lastmod = childItem.Statistics.Updated.ToString("yyyy-MM-dd hh:mm:ss")
                    }));

                    // Populate created collection to right object
                    urlSet.Url = tmpurlset;

                    //Write XML Response for Sitemap.
                    var response = HttpContext.Current.Response;
                    response.AddHeader("Content-Type", "text/xml");
                    ser.Serialize(response.OutputStream, urlSet);
                    HttpContext.Current.Response.End();
                    //Response Ends Here
                }
                catch (Exception ex)
                {
                    Log.Error("Error - Sitemap.xml.", ex, this);
                }
            }
        }
Пример #11
0
 public void Add(Urlset o) => Urlsets.Add(o);
Пример #12
0
 public static string ComposeUrlset(Urlset o) => Compose(o);
        public static void GenerateSiteMap(string rootUrl)
        {
            Global.GlobalList = new List <HREFLink>();

            _rootUrl = rootUrl;


            GetLinks((new HREFLink[] { new HREFLink()
                                       {
                                           link = _rootUrl, Processed = false
                                       } }).ToList());

            Urlset siteMapDoc = new Urlset();
            var    urlEntry   = new List <UrlsetUrl>();

            Global.GlobalList.OrderBy(l => l.link.Length);

            if (Global._generateUrlTxtFile)
            {
                foreach (var hrefLink in Global.GlobalList)
                {
                    UrlsetUrl entry = new UrlsetUrl();
                    entry.changefreq = ConfigurationManager.AppSettings["changeFrequence"];
                    if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["priority"]))
                    {
                        entry.priority = decimal.Parse(ConfigurationManager.AppSettings["priority"]);
                    }
                    else
                    {
                        entry.priority = 1;
                    }

                    if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["lastModification"]))
                    {
                        entry.lastmod = DateTime.Parse(ConfigurationManager.AppSettings["lastModification"]);
                    }
                    else
                    {
                        entry.lastmod = DateTime.Now;
                    }

                    entry.loc = hrefLink.link;

                    urlEntry.Add(entry);


                    System.IO.File.AppendAllText(string.Format("{0}links.txt", ConfigurationManager.AppSettings["linksOutputFolder"]), hrefLink.link + Environment.NewLine);
                }
            }

            if (Global._generateSiteMap)
            {
                siteMapDoc.url = urlEntry.ToArray();

                XmlSerializer serializer = new XmlSerializer(typeof(Urlset));

                using (StreamWriter writer = new StreamWriter(string.Format("{0}sitemap.xml", ConfigurationManager.AppSettings["siteMapOutputFolder"])))
                {
                    serializer.Serialize(writer, siteMapDoc);
                }
            }
        }
        public override void Process(HttpRequestArgs args)
        {
            //This check will verify if the physical path of the request exists or not.
            if (!System.IO.File.Exists(args.HttpContext.Request.PhysicalPath) &&
                !System.IO.Directory.Exists(args.HttpContext.Request.PhysicalPath))
            {
                Assert.ArgumentNotNull(args, "args");
                //Check if the request is of sitemap.xml then only allow the request to serve sitemap.xml

                if (args.Url == null || !args.Url.FilePath.ToLower().EndsWith("sitemap.xml"))
                {
                    return;
                }


                if (args.Url.FilePath.ToLower().Equals("/sitemap.xml"))
                {
                    //Write XML Response for Sitemap.
                    var response = HttpContext.Current.Response;
                    try
                    {
                        // Homepage of the Website.
                        // Start path will give homepage including Multisite.
                        var homepage = Sitecore.Context.Database.GetItem(args.StartPath);
                        var ser      = new XmlSerializer(typeof(Urlset));
                        var urlSet   = new Urlset();

                        //Create node of Homepage in Sitemap.
                        var tmpurlset = new List <Url>();
                        var config    = AppendLanguage();
                        tmpurlset.Add(new Url
                        {
                            Loc = GetAbsoluteLink(LinkManager.GetItemUrl(homepage, new UrlOptions()
                            {
                                LanguageEmbedding = (config == 2 ? LanguageEmbedding.Always : (config == 1 ? LanguageEmbedding.AsNeeded : LanguageEmbedding.Never))
                            })),
                            Lastmod         = homepage.Statistics.Updated.ToString("yyyy-MM-dd"),
                            Changefrequency = homepage.Fields["ChangeFrequency"] != null ? homepage.Fields["Changefrequency"].ToEnum <SitemapChangeFrequency>() : SitemapChangeFrequency.Weekly,
                            Priority        = this.GetPriority(homepage)
                        });

                        var sitemapPages = GetAllSitePageItems(homepage, Sitecore.Context.Database);

                        if (sitemapPages != null)
                        {
                            {
                                tmpurlset.AddRange(sitemapPages.Select(childItem => new Url
                                {
                                    Loc = GetAbsoluteLink(LinkManager.GetItemUrl(childItem, new UrlOptions()
                                    {
                                        LanguageEmbedding = (config == 2 ? LanguageEmbedding.Always : (config == 1 ? LanguageEmbedding.AsNeeded : LanguageEmbedding.Never))
                                    })),
                                    Lastmod         = childItem.Statistics.Updated.ToString("yyyy-MM-dd"),
                                    Changefrequency = childItem.Fields["ChangeFrequency"] != null ? childItem.Fields["Changefrequency"].ToEnum <SitemapChangeFrequency>() : SitemapChangeFrequency.Weekly,
                                    Priority        = this.GetPriority(childItem)
                                }));
                            }
                            tmpurlset.RemoveAll(x => x.Changefrequency == SitemapChangeFrequency.DoNotInclude);
                            //tmpurlset.Sort();
                        }

                        urlSet.Urls = tmpurlset;

                        //Sort the List Alphabetically
                        urlSet.Urls = urlSet.Urls.OrderBy(k => k.Loc).ToList();

                        response.AddHeader("Content-Type", "text/xml");
                        ser.Serialize(response.OutputStream, urlSet);
                    }
                    catch (Exception ex)
                    {
                        Log.Error("Error - Sitemap.xml." + ex.Message + " - " + ex.StackTrace, ex, this);
                    }

                    HttpContext.Current.Response.Flush();                      // Sends all currently buffered output to the client.
                    HttpContext.Current.Response.SuppressContent = true;       // Gets or sets a value indicating whether to send HTTP content to the client.
                    HttpContext.Current.ApplicationInstance.CompleteRequest(); // Causes ASP.NET to bypass
                                                                               //Response Ends Here
                }
            }
        }