PHP scraper to get data from Google Play

Overview

nelexa/google-play-scraper

nelexa/google-play-scraper

Packagist Version Packagist Downloads PHP from Packagist License Build Status Build Status Scrutinizer Code Quality Code Coverage

PHP library to scrape application data from the Google Play store.

  • Checking the exists of the app on Google Play.
  • Retrieving full app info.
  • Retrieving reviews on the app.
  • Retrieving a list of app permissions.
  • Retrieving a list of similar apps.
  • Retrieving a list of categories.
  • Retrieving a list of new and the best apps.
  • Retrieving a list of apps by the category.
  • Retrieving a list of apps by the developer.
  • Retrieving info about the developer.
  • Retrieving search results.
  • Downloading images for the specified size.

Installation

composer require nelexa/google-play-scraper

Documentation

docs/README.md

Example

// Retrieving full app info

$gplay = new \Nelexa\GPlay\GPlayApps($defaultLocale = 'fr_CA', $defaultCountry = 'ca');
$appInfo = $gplay->getAppInfo('com.google.android.youtube');

Result:

class Nelexa\GPlay\Model\AppInfo {
  -getId(): string: "com.google.android.youtube"
  -getLocale(): string: "fr_CA"
  -getCountry(): string: "ca"
  -getUrl(): string: "https://play.google.com/store/apps/details?id=com.google.android.youtube"
  -getFullUrl(): string: "https://play.google.com/store/apps/details?id=com.google.android.youtube&hl=fr_CA&gl=ca"
  -getName(): string: "YouTube"
  -getDescription(): string: """
    Téléchargez l'application YouTube officielle sur votre téléphone ou tablette Android. Découvrez les contenus regardés partout dans le monde : des clip…
    """
  -getIcon(): Nelexa\GPlay\Model\GoogleImage: {
    -__toString(): string: "https://play-lh.googleusercontent.com/lMoItBgdPPVDJsNOVtP26EKHePkwBg-PkuY9NOrc-fumRtTFP4XhpUNk_22syN4Datc"
    -getUrl(): string: "https://play-lh.googleusercontent.com/lMoItBgdPPVDJsNOVtP26EKHePkwBg-PkuY9NOrc-fumRtTFP4XhpUNk_22syN4Datc"
    -getOriginalSizeUrl(): string: "https://play-lh.googleusercontent.com/lMoItBgdPPVDJsNOVtP26EKHePkwBg-PkuY9NOrc-fumRtTFP4XhpUNk_22syN4Datc=s0"
    -getBinaryImageContent(): string: …
  }
  -getScreenshots(): array: array:5 [
    0 => class Nelexa\GPlay\Model\GoogleImage {
      -__toString(): string: "https://play-lh.googleusercontent.com/ysXRzV6uIprDW4_cTODTc3RICYKV57YAzNv7zHeAYpwJpe2lC6Wdx-GuCoSgzCCDwuc"
      -getUrl(): string: "https://play-lh.googleusercontent.com/ysXRzV6uIprDW4_cTODTc3RICYKV57YAzNv7zHeAYpwJpe2lC6Wdx-GuCoSgzCCDwuc"
      -getOriginalSizeUrl(): string: "https://play-lh.googleusercontent.com/ysXRzV6uIprDW4_cTODTc3RICYKV57YAzNv7zHeAYpwJpe2lC6Wdx-GuCoSgzCCDwuc=s0"
      -getBinaryImageContent(): string: …
    }
    1 => class Nelexa\GPlay\Model\GoogleImage {
      -__toString(): string: "https://play-lh.googleusercontent.com/YshbPqiMzsf-UJbTlLhgOXriJw2X_A0HIZ7AX1kfuyk1IkfWjHmTWmYMG0t9pJW3yqU"
      -getUrl(): string: "https://play-lh.googleusercontent.com/YshbPqiMzsf-UJbTlLhgOXriJw2X_A0HIZ7AX1kfuyk1IkfWjHmTWmYMG0t9pJW3yqU"
      -getOriginalSizeUrl(): string: "https://play-lh.googleusercontent.com/YshbPqiMzsf-UJbTlLhgOXriJw2X_A0HIZ7AX1kfuyk1IkfWjHmTWmYMG0t9pJW3yqU=s0"
      -getBinaryImageContent(): string: …
    }

  ]
  -getScore(): float: 3.8564255
  -getPriceText(): ?string: null
  -isFree(): bool: true
  -getInstallsText(): string: "10 000 000 000+"
  -jsonSerialize(): array: …
  -getDeveloper(): ?Nelexa\GPlay\Model\Developer: {
    -getId(): string: "5700313618786177705"
    -getUrl(): string: "https://play.google.com/store/apps/dev?id=5700313618786177705"
    -getName(): string: "Google LLC"
    -getDescription(): ?string: null
    -getWebsite(): ?string: "https://support.google.com/youtube/topic/2422554?rd=1"
    -getIcon(): ?Nelexa\GPlay\Model\GoogleImage: null
    -getCover(): ?Nelexa\GPlay\Model\GoogleImage: null
    -getEmail(): ?string: "[email protected]"
    -getAddress(): ?string: "1600 Amphitheatre Parkway, Mountain View 94043"
    -asArray(): array: …
    -jsonSerialize(): array: …
  }
  -getDeveloperName(): string: "Google LLC"
  -getSummary(): string: "Regardez vos vidéos, chaînes et playlists préférées où que vous soyez."
  -getTranslatedFromLocale(): mixed: null
  -getCover(): ?Nelexa\GPlay\Model\GoogleImage: {
    -__toString(): string: "https://play-lh.googleusercontent.com/vA4tG0v4aasE7oIvRIvTkOYTwom07DfqHdUPr6k7jmrDwy_qA_SonqZkw6KX0OXKAdk"
    -getUrl(): string: "https://play-lh.googleusercontent.com/vA4tG0v4aasE7oIvRIvTkOYTwom07DfqHdUPr6k7jmrDwy_qA_SonqZkw6KX0OXKAdk"
    -getOriginalSizeUrl(): string: "https://play-lh.googleusercontent.com/vA4tG0v4aasE7oIvRIvTkOYTwom07DfqHdUPr6k7jmrDwy_qA_SonqZkw6KX0OXKAdk=s0"
    -getBinaryImageContent(): string: …
  }
  -getCategory(): ?Nelexa\GPlay\Model\Category: {
    -getId(): string: "VIDEO_PLAYERS"
    -getName(): string: "Lecteurs vidéo et éditeurs"
    -isGamesCategory(): bool: false
    -isFamilyCategory(): bool: false
    -isApplicationCategory(): bool: true
    -asArray(): array: …
    -jsonSerialize(): array: …
  }
  -getCategoryFamily(): ?Nelexa\GPlay\Model\Category: null
  -getVideo(): ?Nelexa\GPlay\Model\Video: null
  -getRecentChanges(): ?string: "Pour plus d'informations sur les nouvelles fonctionnalités et leur utilisation, consultez la documentation et les notifications intégrées au produit."
  -isEditorsChoice(): bool: false
  -getInstalls(): int: 11923110578
  -getHistogramRating(): Nelexa\GPlay\Model\HistogramRating: {
    -getFiveStars(): int: 28666549
    -getFourStars(): int: 4783408
    -getThreeStars(): int: 7638282
    -getTwoStars(): int: 14217650
    -getOneStar(): int: 83304870
    -asArray(): array: …
    -jsonSerialize(): array: …
  }
  -getPrice(): float: 0.0
  -getCurrency(): string: "CAD"
  -isContainsIAP(): bool: false
  -getOffersIAPCost(): ?string: null
  -isContainsAds(): bool: true
  -getSize(): mixed: null
  -getAppVersion(): ?string: null
  -getAndroidVersion(): ?string: null
  -getMinAndroidVersion(): ?string: null
  -getContentRating(): ?string: ""
  -getPrivacyPoliceUrl(): ?string: "http://www.google.com/policies/privacy"
  -getReleased(): ?DateTimeInterface: @1287601948 {
    date: 2010-10-20T19:12:28+00:00
  }
  -getUpdated(): ?DateTimeInterface: @1654299141 {
    date: 2022-06-03T23:32:21+00:00
  }
  -getNumberVoters(): int: 138611767
  -getNumberReviews(): int: 142747
  -getReviews(): array: array:40 [
    0 => class Nelexa\GPlay\Model\Review {
      -getId(): string: "gp:AOqpTOEMQEAUOLXyd5CBETDY47q0t0LfiCNl0igi4p9DscGE10LQedLKFr6WPPvGFbQ4rTqKu_vR9bf1k2Dl6g"
      -getUrl(): mixed: ""
      -getUserName(): string: "Boromir et Tilou"
      -getText(): string: "Cette application est excellente, cependant il y a quelque problématique niveau pub! Par exemple : il arrive des fois que je regarde une vidéo qui dur…"
      -getAvatar(): Nelexa\GPlay\Model\GoogleImage: {
        -__toString(): string: "https://play-lh.googleusercontent.com/a-/AOh14GiEuZYl4opeaRXLTVlEPX09UT7O1pu28Xibw2YO=s64"
        -getUrl(): string: "https://play-lh.googleusercontent.com/a-/AOh14GiEuZYl4opeaRXLTVlEPX09UT7O1pu28Xibw2YO=s64"
        -getOriginalSizeUrl(): string: "https://play-lh.googleusercontent.com/a-/AOh14GiEuZYl4opeaRXLTVlEPX09UT7O1pu28Xibw2YO=s0"
        -getBinaryImageContent(): string: …
      }
      -getDate(): ?DateTimeInterface: @1652904683 {
        date: 2022-05-18T20:11:23+00:00
      }
      -getScore(): int: 4
      -getCountLikes(): int: 1929
      -getReply(): ?Nelexa\GPlay\Model\ReplyReview: null
      -getAppVersion(): ?string: "17.19.34"
      -asArray(): array: …
      -jsonSerialize(): array: …
    }
    1 => class Nelexa\GPlay\Model\Review {
      -getId(): string: "gp:AOqpTOEMsRD995sFxjIRu23yRV7za1PH0O2IKHmydCwK9CyQuf4IhL6WNyMsS7ZoEFcdTSI6-akTQAoHGQmzXQ"
      -getUrl(): mixed: ""
      -getUserName(): string: "Mathias Blouin"
      -getText(): string: "Beaucoup trop de publicités, sous-titres qui se mettent tout seul, la résolution n'est JAMAIS sur la plus haute et c'est assez long à changer, des foi…"
      -getAvatar(): Nelexa\GPlay\Model\GoogleImage: {
        -__toString(): string: "https://play-lh.googleusercontent.com/a-/AOh14GiIFpEtppYtvFbeki1HKoLOHfLOuDfPFOtuvoBFew=s64"
        -getUrl(): string: "https://play-lh.googleusercontent.com/a-/AOh14GiIFpEtppYtvFbeki1HKoLOHfLOuDfPFOtuvoBFew=s64"
        -getOriginalSizeUrl(): string: "https://play-lh.googleusercontent.com/a-/AOh14GiIFpEtppYtvFbeki1HKoLOHfLOuDfPFOtuvoBFew=s0"
        -getBinaryImageContent(): string: …
      }
      -getDate(): ?DateTimeInterface: @1652148284 {
        date: 2022-05-10T02:04:44+00:00
      }
      -getScore(): int: 3
      -getCountLikes(): int: 2569
      -getReply(): ?Nelexa\GPlay\Model\ReplyReview: null
      -getAppVersion(): ?string: "17.17.34"
      -asArray(): array: …
      -jsonSerialize(): array: …
    }
    …
  ]
  -asArray(): array: …
}

Changelog

Changes are documented in the releases page.

License

The library is open-sourced software licensed under the MIT License.

Donation

  • USDT TRC-20 - TAR6uqMAMCpTUemy9RP26zrTpJM1rtECxE
  • USDT ERC-20 - 0xA6c9776996f16A0C473Dec464A5608a7BCD3BB81
  • BTC - 16Aavqejcdy2rnyNLLZ1FN4cQEdWXQE3YJ
Comments
  • Error on add lib to project

    Error on add lib to project

    Error on add lib to project

    
      Problem 1
        - nelexa/http-client-simple-cache[1.0.1, ..., 1.1.1] require guzzlehttp/guzzle ^6.5 -> found guzzlehttp/guzzle[6.5.0, ..., 6.5.x-dev] but it conflicts with your root composer.json require (^7.0.1).
        - nelexa/google-play-scraper 0.2.1 requires nelexa/http-client-simple-cache ^1.0.1 -> satisfiable by nelexa/http-client-simple-cache[1.0.1, 1.1, 1.1.1].
        - Root composer.json requires nelexa/google-play-scraper ^0.2.1 -> satisfiable by nelexa/google-play-scraper[0.2.1].
    
    

    Please, update versions in your required "nelexa" libs.

    opened by Porshe 4
  • Warning:  Trying to access array offset on value of type null in /vendor/nelexa/google-play-scraper/src/Scraper/AppInfoScraper.php on lin 75

    Warning: Trying to access array offset on value of type null in /vendor/nelexa/google-play-scraper/src/Scraper/AppInfoScraper.php on lin 75

    When i submit com.vivo.easyshare, com.seewo.screensharepro.client2 and com.shareall.transfer apps. I get some error


    Warning: Trying to access array offset on value of type null in vendor/nelexa/google-play-scraper/src/Scraper/AppInfoScraper.php on line 75

    Fatal error: Uncaught TypeError: Nelexa\GPlay\Scraper\AppInfoScraper::extractHistogramRating(): Argument #1 ($data) must be of type array, null given, called in vendor/nelexa/google-play-scraper/src/Scraper/AppInfoScraper.php on line 75 and defined in vendor/nelexa/google-play-scraper/src/Scraper/AppInfoScraper.php:212 Stack trace

    #0 vendor/nelexa/google-play-scraper/src/Scraper/AppInfoScraper.php(75): Nelexa\GPlay\Scraper\AppInfoScraper->extractHistogramRating(NULL)

    #1 vendor/nelexa/google-play-scraper/src/HttpClient/HttpClient.php(164): Nelexa\GPlay\Scraper\AppInfoScraper->__invoke(Object(GuzzleHttp\Psr7\Request), Object(GuzzleHttp\Psr7\Response), Array) #2 vendor/guzzlehttp/promises/src/Promise.php(204): Nelexa\GPlay\HttpClient\HttpClient->Nelexa\GPlay\HttpClient{closure}(Object(GuzzleHttp\Psr7\Response)) #3 vendor/guzzlehttp/promises/src/Promise.php(153): GuzzleHttp\Promise\Promise::callHandler(1, Object(GuzzleHttp\Psr7\Response), NULL) #4 vendor/guzzlehttp/promises/src/TaskQueue.php(48): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise{closure}() #5 vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(118): GuzzleHttp\Promise\TaskQueue->run() #6 vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(145): GuzzleHttp\Handler\CurlMultiHandler->tick() #7 vendor/guzzlehttp/promises/src/Promise.php(248): GuzzleHttp\Handler\CurlMultiHandler->execute(true) #8 vendor/guzzlehttp/promises/src/Promise.php(224): GuzzleHttp\Promise\Promise->invokeWaitFn() #9 vendor/guzzlehttp/promises/src/Promise.php(269): GuzzleHttp\Promise\Promise->waitIfPending() #10 vendor/guzzlehttp/promises/src/Promise.php(226): GuzzleHttp\Promise\Promise->invokeWaitList() #11 vendor/guzzlehttp/promises/src/Promise.php(62): GuzzleHttp\Promise\Promise->waitIfPending() #12 vendor/guzzlehttp/promises/src/EachPromise.php(116): GuzzleHttp\Promise\Promise->wait() #13 vendor/guzzlehttp/promises/src/Promise.php(248): GuzzleHttp\Promise\EachPromise->GuzzleHttp\Promise{closure}(true) #14 vendor/guzzlehttp/promises/src/Promise.php(224): GuzzleHttp\Promise\Promise->invokeWaitFn() #15 vendor/guzzlehttp/promises/src/Promise.php(62): GuzzleHttp\Promise\Promise->waitIfPending() #16 vendor/nelexa/google-play-scraper/src/HttpClient/HttpClient.php(201): GuzzleHttp\Promise\Promise->wait() #17 vendor/nelexa/google-play-scraper/src/GPlayApps.php(219): Nelexa\GPlay\HttpClient\HttpClient->requestPool(Array) #18 vendor/nelexa/google-play-scraper/src/GPlayApps.php(184): Nelexa\GPlay\GPlayApps->getAppsInfo(Array) #19 app/Controllers/GplayController.php(21): Nelexa\GPlay\GPlayApps->getAppInfo('com.vivo.easysh...') #20 app/Systems/Route.php(38): Controllers\GplayController->index('com.vivo.easysh...') #21 public/index.php(6): include_once('/home/playstore...') #22 {main}

    Next Nelexa\GPlay\Exception\GooglePlayException: Nelexa\GPlay\Scraper\AppInfoScraper::extractHistogramRating(): Argument #1 ($data) must be of type array, null given, called in vendor/nelexa/google-play-scraper/src/Scraper/AppInfoScraper.php on line 75 in vendor/nelexa/google-play-scraper/src/GPlayApps.php:221 Stack trace: #0 vendor/nelexa/google-play-scraper/src/GPlayApps.php(184): Nelexa\GPlay\GPlayApps->getAppsInfo(Array) #1 app/Controllers/GplayController.php(21): Nelexa\GPlay\GPlayApps->getAppInfo('com.vivo.easysh...') #2 app/Systems/Route.php(38): Controllers\GplayController->index('com.vivo.easysh...') #3 public/index.php(6): include_once('/home/playstore...') #4 {main} thrown in vendor/nelexa/google-play-scraper/src/GPlayApps.php on line 221

    opened by sayedsahin 3
  • getListApps ()" method doesn't return the full list of apps for category">

    "$gplay->getListApps ()" method doesn't return the full list of apps for category

    what list does it provide?

    for example: $apps_list = $gplay->getListApps( $category = \Nelexa\GPlay\Enum\CategoryEnum::GAME_RACING(), $ageLimit = null, $limit = 100000 );

    returns only 13 apps, does GAMES_RACING category has only 13 apps? even on play market website I get more apps https://play.google.com/store/apps/category/GAME_RACING

    how I can get more apps/all apps in "Top New Free" collection? Top New Free (https://play.google.com/store/apps/new/category/GAME_RACING) I modified source class to use it with "Top New Free" collection, it returns more applications, but also not all from that webpage :( this is strange.

    opened by GrinOleksandr 3
  • Hello.its not working again

    Hello.its not working again

    Hello. Check that you use the latest version of the library.

    Originally posted by @Ne-Lexa in https://github.com/Ne-Lexa/google-play-scraper/issues/28#issuecomment-1165488911

    opened by masoomdil 2
  • Not working

    Not working

    Hello scraper is not working any more its giving me HTTP ERROR 500,I am using on https://pakibuz.com/apkn/fetch.php that was working but stopped now please guide me how I can fix it

    opened by masoomdil 2
  • Uninitialized string offset

    Uninitialized string offset

    Hi, As of this morning I'm getting notices when using this library:

    Notice: Uninitialized string offset: 2 in /var/www/html/public_html/vendor/nelexa/google-play-scraper/src/Scraper/Extractor/ReviewsExtractor.php on line 55

    Notice: Uninitialized string offset: 3 in /var/www/html/public_html/vendor/nelexa/google-play-scraper/src/Scraper/Extractor/ReviewsExtractor.php on line 55

    The end result is that I'm not getting the data from Google Play.

    Doe's anyone knows what this means?

    Thanks, Amit

    opened by pixelgroup-israel 2
  • Unable to get data for this application. - PHP 8.1. -

    Unable to get data for this application. - PHP 8.1. -

    Hello!

    I have this Code

    $myAppID = "com.adobe.sparklerandroid"; $gplay = new \Nelexa\GPlay\GPlayApps($defaultLocale = 'de_DE', $defaultCountry = 'de'); $appId = new \Nelexa\GPlay\Model\AppId($myAppID, $defaultLocale = 'de_DE', $defaultCountry = 'de'); $exists = $gplay->existsApp($appId); if($exists) { $appInfo = $gplay->getAppInfo($myAppID); And So on. Now i Get these Error:

    <b>Fatal error</b>: Uncaught Nelexa\GPlay\Exception\GooglePlayException: Unable to get data for this application. in /var/www/composer/vendor/nelexa/google-play-scraper/src/Scraper/AppInfoScraper.php:208 Stack trace: #0 /var/www/composer/vendor/nelexa/google-play-scraper/src/Scraper/AppInfoScraper.php(65): Nelexa\GPlay\Scraper\AppInfoScraper-&gt;getScriptData() #1 /var/www/composer/vendor/nelexa/google-play-scraper/src/HttpClient/HttpClient.php(164): Nelexa\GPlay\Scraper\AppInfoScraper-&gt;__invoke() #2 /var/www/composer/vendor/guzzlehttp/promises/src/Promise.php(204): Nelexa\GPlay\HttpClient\HttpClient-&gt;Nelexa\GPlay\HttpClient\{closure}() #3 /var/www/composer/vendor/guzzlehttp/promises/src/Promise.php(153): GuzzleHttp\Promise\Promise::callHandler() #4 /var/www/composer/vendor/guzzlehttp/promises/src/TaskQueue.php(48): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}() #5 /var/www/composer/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(158): GuzzleHttp\Promise\TaskQueue-&gt;run() #6 /var/www/composer/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(183): GuzzleHttp\Handler\CurlMultiHandler-&gt;tick() #7 /var/www/composer/vendor/guzzlehttp/promises/src/Promise.php(248): GuzzleHttp\Handler\CurlMultiHandler-&gt;execute() #8 /var/www/composer/vendor/guzzlehttp/promises/src/Promise.php(224): GuzzleHttp\Promise\Promise-&gt;invokeWaitFn() #9 /var/www/composer/vendor/guzzlehttp/promises/src/Promise.php(269): GuzzleHttp\Promise\Promise-&gt;waitIfPending() #10 /var/www/composer/vendor/guzzlehttp/promises/src/Promise.php(226): GuzzleHttp\Promise\Promise-&gt;invokeWaitList() #11 /var/www/composer/vendor/guzzlehttp/promises/src/Promise.php(62): GuzzleHttp\Promise\Promise-&gt;waitIfPending() #12 /var/www/composer/vendor/guzzlehttp/promises/src/EachPromise.php(116): GuzzleHttp\Promise\Promise-&gt;wait() #13 /var/www/composer/vendor/guzzlehttp/promises/src/Promise.php(248): GuzzleHttp\Promise\EachPromise-&gt;GuzzleHttp\Promise\{closure}() #14 /var/www/composer/vendor/guzzlehttp/promises/src/Promise.php(224): GuzzleHttp\Promise\Promise-&gt;invokeWaitFn() #15 /var/www/composer/vendor/guzzlehttp/promises/src/Promise.php(62): GuzzleHttp\Promise\Promise-&gt;waitIfPending() #16 /var/www/composer/vendor/nelexa/google-play-scraper/src/HttpClient/HttpClient.php(201): GuzzleHttp\Promise\Promise-&gt;wait() #17 /var/www/composer/vendor/nelexa/google-play-scraper/src/GPlayApps.php(217): Nelexa\GPlay\HttpClient\HttpClient-&gt;requestPool() #18 /var/www/composer/vendor/nelexa/google-play-scraper/src/GPlayApps.php(182): Nelexa\GPlay\GPlayApps-&gt;getAppsInfo() #19 /var/www/test.php(29): Nelexa\GPlay\GPlayApps-&gt;getAppInfo() #20 {main} Next Nelexa\GPlay\Exception\GooglePlayException: Unable to get data for this application. in /var/www/composer/vendor/nelexa/google-play-scraper/src/GPlayApps.php:219 Stack trace: #0 /var/www/composer/vendor/nelexa/google-play-scraper/src/GPlayApps.php(182): Nelexa\GPlay\GPlayApps-&gt;getAppsInfo() #1 /var/www/test.php(29): Nelexa\GPlay\GPlayApps-&gt;getAppInfo() #2 {main} thrown in <b>/var/www/composer/vendor/nelexa/google-play-scraper/src/GPlayApps.php</b> on line <b>219</b><br />

    What can Help?

    Greets

    opened by BrunoFischerGermany 2
  • reviews on how to get the corresponding version number ??

    reviews on how to get the corresponding version number ??

    eg:

    class Nelexa\GPlay\Model\Review {
      -getId(): string: "gp:AOqpTOGkxfRp2B9_nud4zNgpwZ3L5ZHhjm2Bl7hNSeX2LkYTLL7rhkrNmnPPvtecH8Sg5mpWlU2_569ktUzNRjY"
      -getUrl(): string: "https://play.google.com/store/apps/details?id=com.viber.voip&reviewId=gp%3AAOqpTOGkxfRp2B9_nud4zNgpwZ3L5ZHhjm2Bl7hNSeX2LkYTLL7rhkrNmnPPvtecH8Sg5mpWlU2…"
      -getUserName(): string: "rih"
      -getText(): string: "images are not saved on gallery even though it is in automatic download mode. fix this problem fast."
      -getAvatar(): Nelexa\GPlay\Model\GoogleImage: {
        -__toString(): string: "https://play-lh.googleusercontent.com/a/AATXAJziqSeotXUfYPXZWqlg_qfxBBER-0bPb4Tt-in8=s64"
        -getUrl(): string: "https://play-lh.googleusercontent.com/a/AATXAJziqSeotXUfYPXZWqlg_qfxBBER-0bPb4Tt-in8=s64"
        -getOriginalSizeUrl(): string: "https://play-lh.googleusercontent.com/a/AATXAJziqSeotXUfYPXZWqlg_qfxBBER-0bPb4Tt-in8=s0"
        -getBinaryImageContent(): string: …
      }
      -getDate(): ?DateTimeInterface: @1581236842 {
        date: 2020-02-09T08:27:22+00:00
      }
      -getVersion(): stirng: ...
    }
    

    getVersion

    opened by shencw 2
  • Error in 0.3.1

    Error in 0.3.1

    Hi, I'm getting this error after upgrading to the latest version, can you please fix it. PHP VERSION: 8.1

    Fatal error: Uncaught Error: Undefined constant "STDOUT" in /vendor/nelexa/google-play-scraper/src/HttpClient/ConsoleLog.php:23 Stack trace: #0 /vendor/guzzlehttp/guzzle/src/Middleware.php(192): Nelexa\GPlay\HttpClient\ConsoleLog->log() #1 /vendor/guzzlehttp/promises/src/Promise.php(204): GuzzleHttp\Middleware::GuzzleHttp\{closure}() #2 /vendor/guzzlehttp/promises/src/Promise.php(153): GuzzleHttp\Promise\Promise::callHandler() #3 /vendor/guzzlehttp/promises/src/TaskQueue.php(48): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}() #4 /vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(118): GuzzleHttp\Promise\TaskQueue->run() #5 /vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(145): GuzzleHttp\Handler\CurlMultiHandler->tick() #6 /vendor/guzzlehttp/promises/src/Promise.php(248): GuzzleHttp\Handler\CurlMultiHandler->execute() #7 /vendor/guzzlehttp/promises/src/Promise.php(224): GuzzleHttp\Promise\Promise->invokeWaitFn() #8 /vendor/guzzlehttp/promises/src/Promise.php(269): GuzzleHttp\Promise\Promise->waitIfPending() #9 /vendor/guzzlehttp/promises/src/Promise.php(226): GuzzleHttp\Promise\Promise->invokeWaitList() #10 /vendor/guzzlehttp/promises/src/Promise.php(62): GuzzleHttp\Promise\Promise->waitIfPending() #11 /vendor/nelexa/google-play-scraper/src/HttpClient/HttpClient.php(126): GuzzleHttp\Promise\Promise->wait() #12 /vendor/nelexa/google-play-scraper/src/GPlayApps.php(967): Nelexa\GPlay\HttpClient\HttpClient->request() #13 /vendor/nelexa/google-play-scraper/src/GPlayApps.php(1170): Nelexa\GPlay\GPlayApps->getClusterPages() #14 /vendor/nelexa/google-play-scraper/src/GPlayApps.php(1128): Nelexa\GPlay\GPlayApps->fetchAppsFromClusterPages() #15 /controller/HomeController.php(32): Nelexa\GPlay\GPlayApps->getTopApps() #16 /index.php(2): require('/home/...') #17 {main} thrown in /vendor/nelexa/google-play-scraper/src/HttpClient/ConsoleLog.php on line 23

    opened by hki98 2
  • PHP 8.1. - Fails

    PHP 8.1. - Fails

    Hi

    i get this messages out

    Deprecated: Return type of Nelexa\GPlay\Model\Developer::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /var/www/composer/vendor/nelexa/google-play-scraper/src/Model/JsonSerializableTrait.php on line 29

    Deprecated: Return type of Nelexa\GPlay\Model\Category::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /var/www/composer/vendor/nelexa/google-play-scraper/src/Model/JsonSerializableTrait.php on line 29

    Deprecated: Return type of Nelexa\GPlay\Model\HistogramRating::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /var/www/composer/vendor/nelexa/google-play-scraper/src/Model/JsonSerializableTrait.php on line 29

    Deprecated: Return type of Nelexa\GPlay\Model\Review::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /var/www/composer/vendor/nelexa/google-play-scraper/src/Model/JsonSerializableTrait.php on line 29

    Deprecated: Return type of Nelexa\GPlay\Model\App::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /var/www/composer/vendor/nelexa/google-play-scraper/src/Model/JsonSerializableTrait.php on line 29

    Deprecated: Return type of Nelexa\GPlay\Model\ImageInfo::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /var/www/composer/vendor/nelexa/google-play-scraper/src/Model/JsonSerializableTrait.php on line 29

    php -v said PHP 8.1.3 (cli) (built: Feb 21 2022 14:48:42) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.3, Copyright (c) Zend Technologies with Zend OPcache v8.1.3, Copyright (c), by Zend Technologies

    Can You help?

    Greets

    opened by BrunoFischerGermany 2
  • ERROR: InvalidArgumentException: Developer id cannot be null or empty

    ERROR: InvalidArgumentException: Developer id cannot be null or empty

    $gplay = new GPlayApps();
    $appInfo = $gplay->search('Apar Games', 500);
    var_dump($appInfo);
    

    Error:

    InvalidArgumentException: Developer id cannot be null or empty. Solution: $developerBuilder->setId(...); .../vendor/nelexa/google-play-scraper/src/Model/Developer.php:84

    opened by kobyle69 2
  • Unable to get data for this application.

    Unable to get data for this application.

    Nelexa\GPlay\Exception\GooglePlayException: Unable to get data for this application. in file /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/nelexa/google-play-scraper/src/GPlayApps.php on line 221

    #0 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/nelexa/google-play-scraper/src/GPlayApps.php(184): Nelexa\GPlay\GPlayApps->getAppsInfo() #1 /var/www/vhosts/plte.link/httpdocs/shelf_app/app/Http/Controllers/API/AdminAppController.php(79): Nelexa\GPlay\GPlayApps->getAppInfo() #2 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\Http\Controllers\API\AdminAppController->store() #3 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction() #4 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Routing/Route.php(262): Illuminate\Routing\ControllerDispatcher->dispatch() #5 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\Routing\Route->runController() #6 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\Routing\Route->run() #7 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Routing\Router->Illuminate\Routing{closure}() #8 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #9 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Routing\Middleware\SubstituteBindings->handle() #10 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(127): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #11 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(103): Illuminate\Routing\Middleware\ThrottleRequests->handleRequest() #12 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(55): Illuminate\Routing\Middleware\ThrottleRequests->handleRequestUsingNamedLimiter() #13 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Routing\Middleware\ThrottleRequests->handle() #14 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #15 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\Pipeline\Pipeline->then() #16 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\Routing\Router->runRouteWithinStack() #17 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\Routing\Router->runRoute() #18 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\Routing\Router->dispatchToRoute() #19 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\Routing\Router->dispatch() #20 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http{closure}() #21 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/livewire/livewire/src/DisableBrowserCache.php(19): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #22 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Livewire\DisableBrowserCache->handle() #23 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #24 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle() #25 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle() #26 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #27 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle() #28 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\TrimStrings->handle() #29 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #30 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle() #31 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #32 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle() #33 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #34 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\Cors\HandleCors->handle() #35 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #36 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\Proxy\TrustProxies->handle() #37 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #38 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\Pipeline\Pipeline->then() #39 /var/www/vhosts/plte.link/httpdocs/shelf_app/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter() #40 /var/www/vhosts/plte.link/httpdocs/shelf_app/index.php(52): Illuminate\Foundation\Http\Kernel->handle() #41 {main} -->

    opened by ottomanvictor 0
  • fixed library 4.0.5

    fixed library 4.0.5

    Update line 51 file /src/Scaper/AppInfoScraper.php : $appInfo = ScraperUtil::getValue($scriptData, 'ds:4.1.2'); $appInfo = ScraperUtil::getValue($scriptData, 'ds:5.1.2');

    opened by sanghuynhxuan 1
Releases(0.4.0.9)
  • 0.4.0.6(Aug 19, 2022)

  • 0.4.0.4(Aug 3, 2022)

  • 0.4.0(Jun 7, 2022)

    BC:

    Deprecated or delete methods:

    Nelexa\GPlay\GPlayApps::getReviewById() - deprecated and throw exception (no alternative) Nelexa\GPlay\GPlayApps::getCategoriesForLocales() - delete method (no alternative) Nelexa\GPlay\GPlayApps::getCategoriesForAvailableLocales() - delete method (no alternative) Nelexa\GPlay\GPlayApps::getTopApps() - deprecated (use getTopSellingFreeApps(), getTopSellingPaidApps() or getTopGrossingApps()) Nelexa\GPlay\GPlayAppss::getNewApps() - deprecated (use getListApps()) Nelexa\GPlay\Model\App::getSummary() - deprecated (always null) (use Nelexa\GPlay\Model\AppInfo::getSummary()) Nelexa\GPlay\Model\App::getDeveloper() - deprecated (always null) (use Nelexa\GPlay\Model\AppInfo::getDeveloper())

    New methods:

    Nelexa\GPlay\GPlayApps::getTopSellingFreeApps() Nelexa\GPlay\GPlayApps::getTopSellingPaidApps() Nelexa\GPlay\GPlayApps::getTopGrossingApps() Nelexa\GPlay\Model\App::getDescription() Nelexa\GPlay\Model\App::getScreenshots() Nelexa\GPlay\Model\App::getInstallText() Nelexa\GPlay\Model\App::getDeveloperName()

    Source code(tar.gz)
    Source code(zip)
  • 0.3.0(Feb 26, 2022)

Owner
Pisarev Alexey
Fullstack developer (PHP, JavaScript, React, Java, Bash)
Pisarev Alexey
PHP exercises from my course at ETEC and some of my own play-around with PHP

etec-php-exercises PHP exercises from my course at ETEC and some of my own play-around with PHP Translations: Português (BR) Projects Project Descript

Luis Felipe Santos do Nascimento 6 May 3, 2022
A PHP library to play with the Raspberry PI's GPIO pins

php-gpio php-gpio is a simple PHP library to play with the Raspberry PI's GPIO pins. It provides simple tools such as reading & writing to pins. [UPDA

Ronan Guilloux 266 Oct 17, 2022
It's goal is to create my own platform where I can play various board games I like.

Card games The goal of this project is to create a social platform where players can communicate, create lobbies and play various board games. Current

Ondřej Mastík 2 Oct 29, 2021
This plugin allow you play music from resources pack in minecraft

Music Player for PocketMine-MP Commands music-start songname music-stop songname IMPORTANT! You must add music resources pack to PocketMine resources

Excalibur 1 Oct 14, 2021
Plug-and-Play Custom Enchants Plugin For PocketMine-PMP

DEVELOPER'S NOTE: I can tell you right now this plugin hasn't been tested. I haven't even checked to see if it loads without crashing yet. Half of thi

VANIC 10 Oct 23, 2021
Plug-and-Play Custom Enchants Plugin For PocketMine-PMP

DEVELOPER'S NOTE: I can tell you right now this plugin hasn't been tested. I haven't even checked to see if it loads without crashing yet. Half of thi

VANIC 10 Oct 23, 2021
A good plugin to play a sound when the player hits the enemy's head

HeadshotSound A good plugin to play a sound when the player hits the enemy's head. How to use Hit the player with a snowball, egg and bow in the head

Laith Youtuber 6 Nov 3, 2022
Scorm Player Api for play scorm modules

flux-scorm-player-api Scorm Player Api for play scorm modules Installation Native Download RUN (mkdir -p /%path%/libs/flux-scorm-player-api && cd /%pa

null 1 Dec 12, 2022
Melek Berita Backend is a service for crawling data from various websites and processing the data to be used for news data needs.

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Chacha Nurholis 2 Oct 9, 2022
Google Tag Manager for Magento 2 with Advance Data Layer

Google Tag Manager is a user-friendly, yet powerful and cost-effective solution that is a must-have integration for every Magento store. It simplifies the process of adding and managing third-party JavaScript tags. With dozens of custom events and hundreds of data points our extensions the #1 GTM solution for Magento.

MagePal :: Magento Extensions 241 Dec 29, 2022
Data visualization for NASA's DSNNow public data

DSN Monitor Data visualization for NASA's DSNNow public data. A live version of the project can be accessed at http://dsnmonitor.ddns.net. Description

Vinz 2 Sep 18, 2022
Import data from and export data to a range of different file formats and media

Ddeboer Data Import library This library has been renamed to PortPHP and will be deprecated. Please use PortPHP instead. Introduction This PHP library

David de Boer 570 Dec 27, 2022
Get the system resources in PHP, as memory, number of CPU'S, Temperature of CPU or GPU, Operating System, Hard Disk usage, .... Works in Windows & Linux

system-resources. A class to get the hardware resources We can get CPU load, CPU/GPU temperature, free/used memory & Hard disk. Written in PHP It is a

Rafael Martin Soto 10 Oct 15, 2022
Get dialogflow fullfilment message in PHP

dialogflow-php PHP Client Library for Dialogflow API v2 Requirements Dialogflow Agent Google Account Credentials file PHP Composer Installation To beg

Emmadi Sumith Kumar 17 Oct 28, 2022
MOP is a php query handling and manipulation library providing easy and reliable way to manipulate query and get result in a fastest way

Mysql Optimizer mysql optimizer also known as MOP is a php query handling and manipulation library providing easy and reliable way to manipulate query

null 2 Nov 20, 2021
A php package to get the server information.

A php package to get you the server information Install Via Composer $ composer require ameetroy/server Usage use BubbleGum\Sweety; $getTotalSpace =

null 4 May 23, 2022
ShellHacks 2021 Project: URide is a carpooling app for College students to get to and from campus

ShellHacks 2021 Project: URide is a carpooling app for College students to get to and from campus. Focused on scheduling it matches you to students nearby with similar schedules to alleviate campus parking and emissions.

Kayla Marcantonio 2 Sep 27, 2021
Supper quick use Aliyun OSS or Tencent COS or Qiniu Koa to get、put、delete Object.

An SDK integrating Alibaba cloud, Tencent cloud and qiniu cloud object storage

null 6 Sep 26, 2021
DiscordLookup | Get more out of Discord with Discord Lookup! Snowflake Decoder, Guild List with Stats, Invite Info and more...

DiscordLookup Get more out of Discord with Discord Lookup! Snowflake Decoder, Guild List with Stats, Invite Info and more... Website Getting Help Tool

Felix 69 Dec 23, 2022