Sharkscope 或 PTR 数据究竟是如何挖掘所有这些手的?
Posted
技术标签:
【中文标题】Sharkscope 或 PTR 数据究竟是如何挖掘所有这些手的?【英文标题】:How exactly does sharkscope or PTR data mine all those hands? 【发布时间】:2011-04-29 23:50:33 【问题描述】:我很想知道这个过程是如何运作的。这些网站(http://www.sharkscope.com 和 http://www.pokertableratings.com)每天从 PokerStars 和 Full Tilt 等安全扑克网络挖掘数千手牌。
他们是否拥有运行应用程序的服务器场,这些应用程序打开数百个表(窗口),然后以某种方式蜘蛛/数据挖掘正在玩的手?
这是如何工作的,编程明智的?
【问题讨论】:
我猜数据是给/卖给他们的。 @jnpcl 恐怕这不是真的。其中一些网站有协议,但据我所知,它们(最初)都在未经相关网站同意/知情的情况下获取数据。 【参考方案1】:我想过这个,有两个理论:
“嗅探器”站点打开了每个表,并且:
-
能够从网络流中提取手数据。 (或:)
正在从 GUI 获取手部数据(屏幕抓取、通过 GUI API 提取内容)。
或者,他们可能已经开发/修改了客户端来为他们记录所有内容,但我认为上述解决方案之一可能更简单。
【讨论】:
【参考方案2】:嗯,他们有两个选择:
他们未经同意就抓取/抓取数据。然后他们有随时被关闭的风险。扑克网站可以轻松检测到这种规模的监控并阻止它。甚至因违反服务条款而冒着诉讼的风险,这可能不允许使用机器人。 他们为直接获取数据付费。这节省了大量带宽(例如,不必加载完整页面、提取、更新 html 更改等)并降低他们的业务风险(法律和技术上)。猜猜他们更可能选择哪一个;至少如果该网站已经存在了一段时间而不时不时地被关闭。
【讨论】:
我怀疑你甚至不知道 PTR 或 Sharkscope 是什么...为什么还要回答呢?我需要事实而不是猜测。【参考方案3】:有几个选项。我一直在研究它,因为我想在我正在开发的网络应用程序中实现其中的一些功能。例如,我将使用 PokerStars,因为到目前为止,它们的安全性是所有在线扑克网站中最好的。
首先,要意识到开发人员无法从 PokerStars 应用程序本身获取实时信息。您无法访问 API。不过,您可以执行以下操作:
屏幕抓取/OCR
PokerStars 尽最大努力破坏他们应用程序的屏幕/文本抓取(通过做一些简单的事情,例如像素级颜色波动),但只要有足够的动力,您就可以轻松解决这个问题。 Google AutoHotkey 与 ImageSearch 相结合。
API 访问和 XML 供稿
PokerStars 不提供对其 API 的公开访问。但它确实为预先批准的开发人员提供了 XML 提要。此 XML 提要提供:
PokerStars 网站摘要 - 显示玩家、牌桌和锦标赛人数
PokerStars 当前锦标赛数据 - 包含有关即将到来和正在进行的锦标赛信息的文件。数据在两个文件中提供:
PokerStars 静态锦标赛数据 - 提供不经常更改的锦标赛信息,并且 PokerStars 动态锦标赛数据 - 提供经常变化的锦标赛信息PokerStars 锦标赛结果 - 提供有关已完成锦标赛的信息。数据在两个文件中提供:
PokerStars 锦标赛结果 - 提供有关已完成锦标赛的基本信息,以及 PokerStars 锦标赛扩展结果 - 提供有关已完成锦标赛的扩展信息。PokerStars 锦标赛排行榜 - 提供有关使用 PokerStars 锦标赛排名系统排名的 PokerStars ***玩家的信息
PokerStars 锦标赛排行榜 BOP - 提供有关使用 PokerStars Battle Of Planets 排名系统排名的 PokerStars ***玩家的信息
Team PokerStars – 提供有关 Team PokerStars 玩家及其在线活动的信息
这些网站不太可能访问 XML 提要(或提供他们所需的所有功能的改进版提要),因为 PokerStars 与大多数这些网站的关系并不好。
这留下了两个选择。为所述数据抓取网络连接,我认为这是不可能的(我没有这方面的经验,所以我不确定;我听说它是高度加密的,不容易修补,但我不确定) 以及上面提到的屏幕抓取/OCR。
选项 #2 很容易实现,并且通过一些工作可以避免检测。据我所知,这是他们对 PokerStars 进行如此大规模数据挖掘的唯一方法(我没有查看其他网站,但我听说除了 PokerStars/Full Tilt 之外的任何东西的安全性都非常可怕)。
[编辑] 重读你的问题,发现我没有明确回答。
是的,他们可能有大量服务器正在运行,监视所有当前正在运行的牌桌、锦标赛等。意识到他们正在做的事情有相当多的钱。
例如,这可能是他们的做法(推测):
所述机器人应用程序监视表格并数据挖掘所有“发布”到聊天日志的信息。他们通过已经拥有一个图像表来做到这一点,例如,对应于字母表中的所有字母(因为 PokerStars 不会将他们的文本发布为......文本。他们软件中的所有文本实际上都是图像)。因此,机器人会撕下聊天日志的图像,将其与商店进行匹配,将数据转换为他们可以使用的格式,然后将其放入数据库中。完成。
[编辑] 不,这些数据不是由扑克网站本身出售给他们的。如果它出来了,这将是一场公关噩梦,它会的。而且它不会考虑这些网站的功能,这似乎是即时的。 OPR、Sharkscope 等。毫无疑问,正在运行的应用程序正在从扑克软件中实时提取数据,可能使用我列出的方法。
【讨论】:
现在,这是一个答案,伙计们!看起来你真的知道你在说什么。非常感谢! 这个问题不是我的,答案已经被接受了。你得到了赏金,更有价值:) 暂时没有访问这个问题,但感谢您的彻底回答:) 我很确定他们也在使用 chat-scraping-ocr - 一定是他们拥有的一些基础设施。 您有关于 XML 提要的任何信息吗?你需要成为合伙人吗? (pokerstarspartners.com/public/marketing/online/xmlFeeds.html) 这是准确的。我一直在对扑克之星进行屏幕截图,以制作一种“顾问”应用程序。我遇到的问题是颜色波动,在某些情况下卡片位置“偏离”了一点,这可能会弄乱 OCR,对于某些卡片来说 OCR 也可能很困难。 XML 不可用,网络抓取被锁定,所以你很幸运能够获得数据,唯一剩下的就是屏幕抓取。屏幕抓取是可行的,只是在定位元素和硬编码它们的位置时非常困难。虽然可行,但祝你好运。【参考方案4】:也许我可以帮忙。 我玩扑克,运行 HUD,查看统计数据,并且是一名软件开发人员。
我看到一些关于此的帖子表明它是由 OCR 软件抓取屏幕完成的。嗯,这真的很困难,而且处理器很饿,所以除非没有其他选择,否则程序员不会选择这样做。 另外,由于可以打开多个窗口,扑克窗口可能会被屏幕上的其他东西隐藏或部分遮挡,因此不能保证能够截取屏幕。
简而言之,他们读取扑克软件输出的日志文件。
当您安装像 Sharkscope 或 Jivaro 等 HUD 时,它们会在您的 PC 上运行客户端软件。它会读取日志文件并在您玩的每一手牌时更新自己的服务器。
大多数扑克软件都相似,但让我们从 Pokerstars 开始,因为那是我玩的地方。扑克软件为您/它所做的每一个动作输出到本地日志文件。它会显示您的牌、您看到的任何对手牌以及您所做的事情。例如。您按下了哪个按钮,您/他们下注了多少等。它几乎实时发布这些更新并为日志文件加上时间戳。
您可以查看自己的文件以了解其实际效果。 在 PC 上执行此操作(不确定您在 Mac 上执行的操作,但会类似) 1.加载文件资源管理器 2. 从菜单中选择查看 3.选择HIDDEN ITEMS,这样你就可以看到隐藏的数据文件 4. 转到 C:\Users\Dave\AppData\Local\PokerStars.UK(你可能不叫 DAVE...) 5. 在 NOTEPAD 中打开 PokerStars.log.0 文件 6. 在记事本中,搜索 updateMyCard 7.它将以数字显示您的卡 3c for 3 of Clubs 钻石王牌 14d
您只能在牌桌上看到对手的牌时才能看到他们。
以下是日志文件中的几行示例。
OnTableData() round -2
:::TableViewImpl::updateMyCard() 8s (0) [2A0498]
:::TableViewImpl::updateMyCard() 13h (1) [2A0498]
:::TableViewImpl::updatePlayerCard() 7s (0) [2A0498]
:::TableViewImpl::updatePlayerCard() 14s (1) [2A0498]
[2015/12/13 12:19:34]
干杯,希望这会有所帮助 戴夫
【讨论】:
用户是否有任何唯一的 id 或类似的东西,我怎样才能得到他们的行动,我只看到我自己的。 这是正确答案。牌局结束后,PokerStars 会将牌局写入日志文件。这里的关键是他们只在牌局打完之后才这样做,这意味着你无法实时分析它。要实时进行,您必须进行屏幕抓取。【参考方案5】:我不确定它是如何工作的,但我有一个应用程序 ID 和一个密钥 - 您作为金牌或银牌订阅者获得 - 注册一个月并向他们发送电子邮件,您将获得访问权限和 API 文档.
【讨论】:
以上是关于Sharkscope 或 PTR 数据究竟是如何挖掘所有这些手的?的主要内容,如果未能解决你的问题,请参考以下文章
br.read() 如何在读取字符串结束时给出 -1 或 br.read() 究竟是如何工作的?