通过使用Analytics's API在sitecore中获得访问次数最多的页面
本文关键字:访问 sitecore Analytics API | 更新日期: 2023-09-27 18:06:47
我想通过使用Analytics的API获得sitecore中访问量最大的页面。
我使用下面的代码来得到这个:
Sitecore.Analytics.Data.DataAccess.DataSets.VisitorDataSet.PagesDataTable pagesDataTable = new VisitorDataSet.PagesDataTable();
var Count = pagesDataTable.Count(p => p.ItemId.ToString() == "{B0358D8A-A3B7-4D99-B123-78E7B1CA9F83}");
但是它总是给我0
计数。我的Analytics数据库已启用。我不确定我是否做错了什么。
结果是0因为你将它实例化为new VisitorDataSet.PagesdataTable()
在我的解决方案中,我做了这样的事情:
var connectionString = ConfigurationManager.ConnectionStrings["analytics"].ConnectionString;
var builder = new SqlConnectionStringBuilder(connectionString);
var query = "SELECT itemid, count(Url) as NumberOfVisits FROM [" + builder.InitialCatalog + "].[dbo].[Pages] group by itemid order by NumberOfVisits desc";
虽然这显然没有使用任何最佳实践(硬编码SQL),而是使用SQL来获取数据,但它确实做到了。
这是我们在最新版本的Sitecore(目前为7.2)上使用的
//Sitecore query syntax
//You must use the symbols {0} and {1} around all table and field names.
//You must use the symbols {2} and {3} around parameters.
//You must use the symbol {4} to insert a quote and symbol {5} to insert a wildcard.
//You must use the symbol {6} to insert an empty string literal.
private const string _trendingQueryBase = @"SELECT TOP {0} {{0}}ItemId{{1}}, COUNT(*) as {{0}}Views{{1}}
FROM {{0}}Pages{{1}}
WHERE {{0}}DateTime{{1}} >= GETDATE() - {1}
AND {{0}}Url{{1}} LIKE {{4}}/stories/{{5}}{{4}}
GROUP BY {{0}}ItemId{{1}}
ORDER BY {{0}}Views{{1}} DESC";
public IEnumerable<Guid> Get(int? topPagesToGet = 5, int? fromPastDays = 7)
{
var trendingQuery = string.Format(_trendingQueryBase, topPagesToGet, fromPastDays);
var result = DataAdapterManager.Sql.ReadMany(trendingQuery, reader => DataAdapterManager.Sql.GetGuid(0, reader));
return result;
}
您可以使用以下功能获得访问次数最多的页面-
public List<Guid> GetMostPopularArticles()
{
string where = "Where it.TemplateID = {2}TemplateCondition{3} OR it.templateID ={2}SecoundTemplateId{3} ";
string CommandText = @"SELECT TOP (100) PERCENT pa.ItemId, it.TemplateID, pa.PageViewCount
FROM (SELECT {0}ItemId{1},COUNT(*) AS {0}PageViewCount{1}
FROM [lp_analytics].[dbo].[Pages]
GROUP BY {0}ItemId{1}) AS pa
INNER JOIN [lp_master].[dbo].[Items] AS it ON pa.ItemId = it.ID
" + where + " ORDER BY pa.PageViewCount DESC";
string firstTemplateId = ArticlePageItem.TemplateId.ToString().Replace("{", "").Replace("}", "");
string secoundTemplateId = RecipePageItem.TemplateId.ToString().Replace("{", "").Replace("}", "");
List<Guid> visitsId = DataAdapterManager.Sql.ReadMany<Guid>(CommandText, reader => DataAdapterManager.Sql.GetGuid(0, reader), new object[] { "TemplateCondition", firstTemplateId, "SecoundTemplateId", secoundTemplateId });
return visitsId;
}