有没有办法显示Play中的所有评分?
您会看到一些等级降序排列:
但是对于成千上万的评论来说,这不是那么可行,因为您只能以这种方式阅读5星级评分。
还有其他更好的方法来查看评分吗?
也许Greasemonkey有可能吗?
有没有办法显示Play中的所有评分?
您会看到一些等级降序排列:
但是对于成千上万的评论来说,这不是那么可行,因为您只能以这种方式阅读5星级评分。
还有其他更好的方法来查看评分吗?
也许Greasemonkey有可能吗?
Answers:
同样,由于Google Play缺乏适当的过滤/排序选项而感到沮丧,并受到您关于使用Greasemonkey脚本可以解决问题的建议的启发,我决定编写一个,并上传到https://greasyfork.org/en/ scripts / 24667-google-play-review-rating-filter。它将五个复选框添加到play.google.com上的应用程序页面,使您可以筛选具有特定星级的评论。我已经使用Firefox中的Greasemonkey和Unified Script Injector和Chrome中的Tampermonkey对其进行了测试。
除了在此处重现整个脚本之外,我将描述为感兴趣的人所采用的方法。TL; DR:如果仅需要解决方案,请安装适当的浏览器加载项并从上面的链接下载用户脚本。请注意,如果您想在自己的Android设备上使用它,则可能需要将Firefox与USI插件一起使用(并从菜单中选择“请求桌面网站”),因为大多数其他Android浏览器均不支持add-或用户脚本以及Greasemonkey当前在Android的Firefox中无法使用-在Google Play应用中将无法使用。
当您浏览评论时,GP(Google Play)/store/getreviews
使用HTTP POST
方法通过AJAX请求向URL加载更多评论的数据。因此,通过挂接这些AJAX调用,可以修改返回给GP的数据。
XMLHttpRequest.prototype.open
可以用将调用原始函数的函数代替,但是首先,如果请求是针对审阅数据的,则修改XHR(XMLHttpRequest
)对象,以便POST
可以捕获请求主体并修改响应。甲send
属性可以被分配到XHR对象作为将所述存储的函数POST
调用原始之前的数据。onreadystatechange
可以将该属性分配为一个函数,该函数将在调用GP分配给该属性的函数之前修改响应。正如GP将onreadystatechange
在此之后分配的那样,Object.defineProperty
将需要使用它来重新定义属性,以便存储GP设置的值,而不是实际将其分配给内部属性。并且由于该responseText
属性是只读的,Object.defineProperty
因此需要更改其值。
GP返回的数据为JSON格式,尽管开头有一些垃圾字符,应该在所有修改后的数据中忠实地复制这些字符。
以下代码对此进行了演示,并将请求正文和响应数据输出到浏览器的开发者控制台窗口(尽管实际上并未对其进行修改):
XMLHttpRequest.prototype.open = (function(open) {
return function(method, url) {
if (
method === 'POST' &&
url &&
url.replace(/^https?:\/\/play\.google\.com/, '').split('?', 1)[0] ===
'/store/getreviews'
) {
var requestBody;
var orgSend = this.send;
var orgOnReadyStateChange = this.onreadystatechange;
this.send = function(data) {
requestBody = data;
return orgSend.apply(this, arguments);
};
this.onreadystatechange = function() {
if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
var responseText = this.responseText;
var nJunkChars = responseText.indexOf('[');
try {
var jsonData = JSON.parse(
nJunkChars ? responseText.substr(nJunkChars) : responseText
);
// TODO: modify jsonData here
console.log('Request: %o\nResponse: %o', requestBody, jsonData);
Object.defineProperty(this, 'responseText', {
value: responseText.substr(0, nJunkChars) +
JSON.stringify(jsonData),
configurable: true,
enumerable: true
});
} catch (e) {
console && console.log && console.log(e);
}
}
if (orgOnReadyStateChange) {
return orgOnReadyStateChange.apply(this, arguments);
}
};
Object.defineProperty(this, 'onreadystatechange', {
get: function() { return orgOnReadyStateChange; },
set: function(v) { orgOnReadyStateChange = v; },
configurable: true,
enumerable: true
});
}
return open.apply(this, arguments);
};
})(XMLHttpRequest.prototype.open);
GP返回的数据包括一个元素的数组,该元素是四个元素的数组,如下所示:
"ecr"
;1
如果还有更多评论,2
如果这是评论的最后一个“页面”,3
则发生错误;pageNum
POST请求正文中的参数相对应。可以修改HTML,以删除星级(而不是感兴趣的星级)的评论(以及任何相关的开发人员回复)。评论与选择器匹配,div.single-review
并具有div.current-rating
与内联样式匹配的后代,其中CSS width属性是与评级相对应的百分比(20%
用于1星,40%
用于2星等)。开发人员的答复与选择者匹配,div.developer-reply
并且是审核之后的兄弟姐妹。
在用户界面中添加复选框以允许选择要显示的评论星级,这非常简单。但是,当更改他们的选择时,需要重新获取评论。更改排序顺序会导致这种情况的发生,甚至选择与以前相同的排序顺序也是如此。因此,要自动实现此目的,每当更改复选框时,click
都可以在当前选择的排序顺序元素上触发一个事件,该事件可以通过选择器进行查找.id-review-sort-filter .dropdown-child.selected
。最初加载GP上的应用程序页面时,评论的第一页已经包含在内,并且不会通过AJAX加载,但是只要所有复选框都被初始选中,那都没有关系。
有时,一页(40)条评论中不会包含任何具有所需评分的评论。如果返回的HTML中没有元素,则GP将不再请求任何页面。因此,要满足此要求,有必要获取其他页面的评论(通过相同的AJAX API,但要修改pageNum
参数),直到返回一些评论为止。对于后续页面,该pageNum
参数需要进行翻译以解决此问题。
当选定的排序顺序为“评分”时,可能会有许多5星级评论的页面排在任何具有期望评分的页面上。重复获取和丢弃评论的页面和页面将效率低下(并且可能会触发Google的临时IP阻止)。在这种情况下,当reviewSortOrder
参数为时1
,可以使用二进制搜索来更快地找到要返回评论的下一页。span.reviews-num
可以检查与选择器匹配的页面元素,以查找评论总数,从而确定页面上限。不过,目前看来,对页面111之后的页面的请求会收到HTTP 400响应。
这仅适用于Android和设备上的Google Play应用,但大多数Google Play不再适用于网络桌面。通过Google 查看您应用的评级和评论,您可以通过将应用导出到CSV文件来查看其评级和评论数据。
通过从开发者控制台导出评分和评论,您可以批量分析趋势,以更好地了解您的用户反馈。每天生成报告,将其存储在每月CSV文件中,并存储在Google Cloud Storage存储桶中。
有一个小节标题,审阅数据的文件格式。
Field Format Optional Example
Package Name String NO com.company.app
App Version Code int32 YES
Star Rating int32 (between 1 and 5) NO
Review Title
Review Text String
Review Link String NO https://play.google.com/apps/publish/?dev_acc=<...>#ReviewPlace:id=<..>
也可以尝试此操作,查看单个应用程序统计信息,评级。