1

我有一个面向网络、可匿名访问的博客目录和博客,我想跟踪每篇博客文章收到的浏览量。

我想让这个尽可能简单,准确度只需要一个近似值。这不适用于分析(我们有谷歌),我不想做任何日志分析来提取统计数据,因为在这种环境中运行后台任务很棘手,我希望数字尽可能新鲜。

我目前的解决方案如下:

  1. 一个 Web 控件,它只是在表中为每个 GET 记录一个视图。
  2. 使用正则表达式和 UserAgent 字符串排除已知网络爬虫列表
  3. 规定排除某些 IP 地址(已知的垃圾邮件发送者)
  4. 提供锁定一些帖子(当垃圾邮件发送者来找它时)

这实际上似乎做得很好,但有几件事让我烦恼。垃圾邮件发送者仍然点击一些帖子,从而扭曲了观点。我仍然必须手动监控视图以更新我的“坏”IP 地址列表。

有人对我有更好的建议吗?有人知道如何跟踪 StackOverflow 问题的观点吗?

4

2 回答 2

1

听起来您当前的解决方案实际上相当不错。

我们实现了一个,其中传递视图内容的服务器代码还更新了一个数据库表,该表存储了 URL(实际上是 URL 的特殊 ID 代码,因为 URL 可能会随着时间而改变)和视图计数。

这实际上是针对具有其他人可以评论的用户撰写帖子的系统,但它同样适用于您是唯一创建帖子的用户的情况(如果我正确理解您的描述)。

我们必须执行以下操作来最小化(不幸的是,不是消除)偏斜。

  • 对于已登录的用户,每个用户只能在帖子中添加一个观点。曾经。没有例外。
  • 对于匿名用户,每个 IP 地址每个月只能为帖子添加一个观点。这稍微不太可靠,因为从我们的角度来看,IP 地址可以“共享”(NAT 等)。我们放宽上述“EVER”要求的原因就是出于这个共享的原因。
  • 帖子本身仅限于每个时间段添加一个观点(该时间段开始时间较短(例如 10 秒)并逐渐增加(例如 5 分钟),因此新帖子由于其新颖性而可以更快地获得观看次数)。这解决了大多数垃圾邮件机器人,因为我们发现它们往往会在帖子创建后很长时间内进行攻击。
  • 删除帖子上的垃圾评论,或尝试绕过验证码失败(见下文),会自动将该 IP 添加到黑名单并减少该帖子的查看次数。
  • 如果列入黑名单的 IP 在 N 天(可配置)内未尝试发表评论,则会将其从黑名单中删除。这条规则和之前的规则,最大限度地减少了维护黑名单的人工干预,我们只需要监控垃圾邮件内容的响应。
  • 验证码。这解决了我们的很多垃圾邮件问题,特别是因为我们不仅仅依赖于 OCR 类型的东西(比如“这个词是什么 -> '可选'”);我们实际上提出了一些问题(比如“2 乘以 8 的一半是多少? ”),它打破了愚蠢的字符识别机器人。它不会击败成群的廉价劳动力 CAPTCHA 破解者(除非他们的数学真的很糟糕 :-) 但无 CAPTCHA 的改进令人印象深刻。
  • 登录用户不受验证码的约束,但垃圾邮件立即删除了该帐户,将 IP 列入黑名单,并从帖子中减去他们的视图。
  • 我很惭愧地承认我们实际上并没有打折网络爬虫(我希望客户没有阅读此内容:-)。老实说,由于我们的 IP 地址规则,他们每个月可能只会添加最少数量的视点(除非他们用多个 IP 地址蜂拥而至)。

所以基本上,我建议以下作为可能的改进。当然,您应该始终监控他们如何去查看他们是否在工作。

  • 验证码。
  • 根据用户行为自动更新黑名单。
  • 限制视图计数从相同的 IP 地址增加。
  • 限制视图计数增加到一定的速率。

您选择的任何方案都不会是完美的(例如,我们的一个月规则),但只要所有帖子都遵循相同的规则集,您仍然可以获得很好的比较价值。正如你所说,准确度只需要一个近似值。

于 2009-02-04T01:52:42.457 回答
0

建议:

  1. 将点击计数逻辑从用户控件移动到基​​ Page 类。
  2. 将排除列表重新设计为可动态更新(即,将其存储在数据库中,甚至存储在 xml 文件中)
  3. 记录所有点击。定期让 cron 作业运行新命中并确定它们是包含还是排除。如果您对每个命中进行排除,则每个用户都必须等待匹配逻辑发生。
  4. 想出一些算法来自动检测垃圾邮件发送者/机器人并将它们添加到您的黑名单中。和/或订阅第 3 方黑名单。
于 2009-02-04T01:53:42.813 回答