私はウェブサイトを構築しています。今、Google サイト マップのような xml サイト マップを作成したいと考えています。しかし、C# を使用してプログラムで作成したいと考えています。
Web サイトのベース URL を使用して Web サーバーのルート ディレクトリにアクセスし、すべてのページ リストを文字列リストに取得する方法を誰か教えてもらえますか?
私はウェブサイトを構築しています。今、Google サイト マップのような xml サイト マップを作成したいと考えています。しかし、C# を使用してプログラムで作成したいと考えています。
Web サイトのベース URL を使用して Web サーバーのルート ディレクトリにアクセスし、すべてのページ リストを文字列リストに取得する方法を誰か教えてもらえますか?
If your your site pages are linked to each other and an orginary user can surf all of them (having necessary links in pages content), it is possible to create a list of site's webpages recursively and put it to an xml file (adhering to standards of sitemap protocol) Code snippet of url list generator from working app:
...
new_urls.Add(BaseUrl); //first url
do
{
List hrefs=new List();
foreach (var url in new_urls)
{
string text =await _loader.Get(url);
if (string.IsNullOrEmpty(text)) continue;
visited.Add(url);
List meta=Parser.GetAHrefs(text).Distinct().ToList(); //getting list of links
Parser.Normalize(Domain,url,ref meta);
if (Exclude) //option to exclude query from url
meta = meta.Select(u => u.Contains('?') ? u.Split('?')[0] : u).ToList();
hrefs.AddRange(meta);
hrefs = hrefs.Distinct().ToList();
}
new_urls = hrefs.Except(visited).ToList(); //excluding visited pages
}
while (new_urls.Count != 0);
...
Plain text to xml parsing method:
public void Save(string path)
{
string doc = "<?xml version=\"1.0\" encoding=\"UTF - 8\"?>";
doc += OpenTag("urlset", "xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"");
if (UseOpt)
{
foreach (var url in Urls)
{
doc += OpenTag("url");
doc += Tag("loc", url);
doc += Tag("lastmod", LastMode);
doc += Tag("changefreq", Changefreq);
doc += Tag("priority", Priority);
doc += CloseTag("url");
}
}
else
{
foreach(var url in Urls)
{
doc += OpenTag("url");
doc += Tag("loc", url);
doc += CloseTag("url");
}
}
doc += CloseTag("urlset");
File.WriteAllText(path,doc);
}