Playですべての評価を表示する方法はありますか?
いくつかの評価が降順で表示されます。
しかし、数十万件のレビューの場合、この方法では5つ星の評価しか読み取れません。
評価を表示する別のより良い方法はありますか?
多分これはGreasemonkeyで可能ですか?
Playですべての評価を表示する方法はありますか?
いくつかの評価が降順で表示されます。
しかし、数十万件のレビューの場合、この方法では5つ星の評価しか読み取れません。
評価を表示する別のより良い方法はありますか?
多分これはGreasemonkeyで可能ですか?
回答:
同様に、Google Playに適切なフィルタリング/並べ替えオプションがないことにも不満があり、Greasemonkeyスクリプトで問題を解決できるという提案に触発され、https://greasyfork.org/en/にアップロードしたスクリプトを作成することにしました。 scripts / 24667-google-play-review-rating-filter。5つのチェックボックスがplay.google.comのアプリページに追加され、特定の星評価のレビューをフィルターできます。私はそれをテストしてみたのGreasemonkeyとスクリプトインジェクター統一 Firefoxで、かつTampermonkeyを Chromeで。
ここではスクリプト全体を再現するのではなく、興味があると思われる人のために取られたアプローチについて説明します。TL; DR:ソリューションが必要な場合は、適切なブラウザーアドオンをインストールし、上記のリンクからユーザースクリプトをダウンロードします。他のほとんどのAndroidブラウザーはアドインをサポートしていないため、Androidデバイス自体で使用する場合は、USIアドオンでFirefoxを使用する必要があります(また、メニューから[デスクトップサイトのリクエスト]を選択する必要があります)。 onsまたはユーザースクリプトとGreasemonkeyは現在Android版Firefoxでは機能しません。GooglePlayアプリでは機能しません。
レビューをフリックすると、GP(Google Play)が/store/getreviews
HTTP POST
メソッドを使用して、URLへのAJAXリクエストを介して追加のレビューのデータをロードします。したがって、これらの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から返されるデータは、次の4つの要素の配列である1つの要素の配列で構成されます。
"ecr"
;1
さらにレビューがある2
場合、これがレビューの最後の「ページ」である3
場合、エラーが発生した場合。pageNum
POSTリクエスト本文のパラメータに対応するページ番号。HTMLを変更して、興味のあるもの以外の星評価を付けたレビュー(および関連する開発者の返信)を削除できます。レビューはセレクターにdiv.single-review
一致div.current-rating
し、CSS幅プロパティが評価に対応するパーセンテージ(20%
1つ星、40%
2つ星など)であるインラインスタイルと一致する子孫を持ちます。開発者の返信はセレクターに一致しdiv.developer-reply
、レビュー直後の兄弟です。
チェックボックスをUIに追加して、表示するレビューの星評価を選択できるようにするのは、かなり簡単です。ただし、選択が変更された場合、レビューは新たにフェッチする必要があります。ソート順を変更すると、以前と同じソート順を選択した場合と同様に、これが発生します。したがって、これを自動的に実現するには、チェックボックスが変更されるたびclick
に、現在選択されているソート順要素でイベントをトリガーできます。これは、のセレクターで見つけることができます.id-review-sort-filter .dropdown-child.selected
。GPのアプリページが最初に読み込まれるとき、レビューの最初のページは既に含まれており、AJAX経由で読み込まれませんが、チェックボックスがすべて最初にチェックされている限り、それは問題になりません。
(40)レビューのページに、目的の評価のレビューが含まれていない場合があります。返されたHTMLに要素が存在しない場合、GPはこれ以上ページを要求しません。したがって、これに対応するには、pageNum
返すレビューがいくつかあるまで、レビューの追加ページを(同じAJAX APIを介して、ただしパラメーターを変更して)フェッチする必要があります。そして、後続のページではpageNum
、これを説明するためにパラメーターを変換する必要があります。
選択した並べ替え順が「評価」の場合、希望する評価の前に5つ星のレビューのページが多数表示される可能性があります。ページとレビューのページを繰り返しフェッチして破棄すると効率が悪くなります(Googleによる一時的なIPブロックがトリガーされる可能性があります)。この場合、reviewSortOrder
パラメータがの1
場合、バイナリ検索を使用して、返すレビューのある次のページをはるかにすばやく見つけることができます。セレクターに一致するページ要素をspan.reviews-num
検査して、レビューの合計数を見つけ、上限ページ数を決定できます。ただし、現在判明しているように、111ページを超えるページに対するリクエストはHTTP 400応答を受け取ります。
これはAndroidとデバイス向けのGoogle Playアプリでのみ機能しますが、ほとんどのGoogle Playはウェブ上のデスクトップ向けではなくなりました。Google を介してアプリの評価とレビューを確認し、CSVファイルにエクスポートして、アプリの評価とレビューデータを確認できます。
評価とレビューをDeveloper Consoleからエクスポートすることで、傾向をまとめて分析して、ユーザーのフィードバックをよりよく理解できます。レポートは毎日生成され、毎月の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=<..>
これも試して、個々のアプリケーション統計、評価を表示してください。