From fbe18e2e1ae7c6c13bdb390b29ce9d07d0cf4d22 Mon Sep 17 00:00:00 2001 From: Izzy Date: Sat, 1 Apr 2023 19:12:11 +0200 Subject: [PATCH 1/4] including reviews with app details --- google-play.php | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/google-play.php b/google-play.php index e643d1a..5c13737 100644 --- a/google-play.php +++ b/google-play.php @@ -220,9 +220,9 @@ public function parseApplication($packageName, $lang='en_US', $loc='US') { if ( !empty($data["aggregateRating"]["ratingCount"]) ) $values["votes"] = $data["aggregateRating"]["ratingCount"]; } - $limit = 5; $proto = ''; + $limit = 5; $proto = ''; $proto2 = ''; while ( empty($proto) && $limit > 0 ) { // sometimes protobuf is missing, but present again on subsequent call - $proto = json_decode($this->getRegVal("/key: 'ds:4'. hash: '7'. data:(?\[\[\[.+?). sideChannel: .*?\);<\/script/ims")); // ds:8 hash:22 would have reviews + $proto = json_decode($this->getRegVal("/key: 'ds:4'. hash: '7'. data:(?\[\[\[.+?). sideChannel: .*?\);<\/script/ims")); // DataSource:4 = featureGraphic, video, summary if ( empty($proto) || empty($proto[1]) ) { $this->getApplicationPage($packageName, $lang, $loc); --$limit; @@ -237,6 +237,26 @@ public function parseApplication($packageName, $lang='en_US', $loc='US') { } } + // reviews + $values["reviews"] = []; + if ( $proto = json_decode($this->getRegVal("/key: 'ds:7'. hash: '\d+'. data:(?\[\[\[.+?). sideChannel: .*?\);<\/script/ims")) ) { // DataSource:7 = reviews + foreach($proto[0] as $rev) { + $r["review_id"] = $rev[0]; + $r["reviewed_version"] = $rev[10]; + $r["review_date"] = $rev[5][0]; + $r["text"] = $rev[4]; + $r["stars"] = $rev[2]; + $r["thumbs"] = $rev[6]; + $r["reviewer"] = [ + "id"=>$rev[9][0], + "name"=>$rev[9][1], + "avatar"=>$rev[9][3][0][3][2], + "bg_image"=>$rev[9][4][3][2] + ]; + $values["reviews"][] = $r; + } + } + if ($this->debug) { print_r($values); } From 3c173ee6337e86f186b51950ed2c7797b7001af1 Mon Sep 17 00:00:00 2001 From: Izzy Date: Sat, 1 Apr 2023 19:24:42 +0200 Subject: [PATCH 2/4] cleanup some left-over from testing --- google-play.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-play.php b/google-play.php index 5c13737..9f54209 100644 --- a/google-play.php +++ b/google-play.php @@ -220,7 +220,7 @@ public function parseApplication($packageName, $lang='en_US', $loc='US') { if ( !empty($data["aggregateRating"]["ratingCount"]) ) $values["votes"] = $data["aggregateRating"]["ratingCount"]; } - $limit = 5; $proto = ''; $proto2 = ''; + $limit = 5; $proto = ''; while ( empty($proto) && $limit > 0 ) { // sometimes protobuf is missing, but present again on subsequent call $proto = json_decode($this->getRegVal("/key: 'ds:4'. hash: '7'. data:(?\[\[\[.+?). sideChannel: .*?\);<\/script/ims")); // DataSource:4 = featureGraphic, video, summary if ( empty($proto) || empty($proto[1]) ) { From b9485154c9bc3ad671cfcc5d2b7b4cb0608d7313 Mon Sep 17 00:00:00 2001 From: Izzy Date: Sat, 1 Apr 2023 20:54:44 +0200 Subject: [PATCH 3/4] reviews: adjust field names and include review_token to "catch more later" --- google-play.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/google-play.php b/google-play.php index 9f54209..8bf41e9 100644 --- a/google-play.php +++ b/google-play.php @@ -244,17 +244,20 @@ public function parseApplication($packageName, $lang='en_US', $loc='US') { $r["review_id"] = $rev[0]; $r["reviewed_version"] = $rev[10]; $r["review_date"] = $rev[5][0]; - $r["text"] = $rev[4]; + $r["review_text"] = $rev[4]; $r["stars"] = $rev[2]; - $r["thumbs"] = $rev[6]; + $r["like_count"] = $rev[6]; $r["reviewer"] = [ - "id"=>$rev[9][0], + "reviewer_id"=>$rev[9][0], "name"=>$rev[9][1], "avatar"=>$rev[9][3][0][3][2], "bg_image"=>$rev[9][4][3][2] ]; $values["reviews"][] = $r; } + $values["review_token"] = $proto[1][1]; // needed if we want to fetch more reviews later + } else { + $values["review_token"] = ''; } if ($this->debug) { From c7748ffbb26982f93d3ea09e0df930dcad18268d Mon Sep 17 00:00:00 2001 From: Izzy Date: Sat, 1 Apr 2023 21:14:52 +0200 Subject: [PATCH 4/4] review: include response if exists --- google-play.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/google-play.php b/google-play.php index 8bf41e9..be5c925 100644 --- a/google-play.php +++ b/google-play.php @@ -253,6 +253,15 @@ public function parseApplication($packageName, $lang='en_US', $loc='US') { "avatar"=>$rev[9][3][0][3][2], "bg_image"=>$rev[9][4][3][2] ]; + if ( empty($rev[7]) ) { + $r["reply"] = []; + } else { + $r["response"] = [ + "responder_name"=>$rev[7][0], + "response_text"=>$rev[7][1], + "response_date"=>$rev[7][2][0] + ]; + } $values["reviews"][] = $r; } $values["review_token"] = $proto[1][1]; // needed if we want to fetch more reviews later