Git Product home page Git Product logo

advanced-play-search's Introduction

Google Play Advanced Search

The application is available at http://play.gqqnbig.me/.

Can't run the application? Check how the application runs on GitHub Action Server.

Install

Run pip install -r requirements.txt to install the dependencies. If you see conflicts, like "something has requirements xxx but you'll have xxx", you will need to update your pip.

Test

Run pytest --rootdir=GooglePlayAdvancedSearch/tests in the src folder.

If you want to run a single test file, use pytest src/GooglePlayAdvancedSearch/tests/test_scraper.py or check pytest documentation

If you see warnings like "the imp module is deprecated in favour of importlib", add option --disable-pytest-warnings.

Execute

Run python manage.py runserver in src/web folder for the website.

Run python Program.py in src/scraper folder for the web scraper.

Run server: make sure to conda activate cs188 first as root (cs188) root@server:/project-random/src/GooglePlayAdvancedSearch/django# nohup uwsgi --uid 1003 --gid 1004 --socket /tmp/GooglePlayAdvancedSearch.sock --module web.wsgi --chmod-socket=666 &> /tmp/django.log &

System Requirements

The project is best to run by Python 3.7. Ubuntu 19 comes with Python 3.7. If you are using other systems, eg. Ubuntu 16, whose repositories don't have Python 3.7, refrain from installing Python 3.7 because the official repositories not having Python 3.7 is for a reason. It's very likely that you are unable to install other dependencies, for instance sqlite 3.24+, django 3, etc.

Browsers supporting URLSearchParams, Chrome >=49, Edge>=17, Firefix>=29.

sqlite 3.24+. Check your version with

import sqlite3
sqlite3.sqlite_version

You may follow install sqlite 3.31 section in .github/workflows/pythonapp.yml.

Deploy

Make use of the sparse checkout feature since Git 2.26.

git clone  --no-checkout --depth 1 https://github.com/gqqnbig/advanced-play-search.git
cd advanced-play-search
git sparse-checkout init --cone
git sparse-checkout add src
git sparse-checkout add deploy
git remote set-branches origin 'dev'
git fetch --all

sudo ln -s /var/www/play-search/deploy/systemd/system/play-search-staleAppRemover.service /lib/systemd/system/
sudo ln -s /var/www/play-search/deploy/systemd/system/play-search-staleAppRemover.timer /lib/systemd/system/
sudo ln -s /var/www/play-search/deploy/systemd/system/uwsgi-play-search.service /lib/systemd/system/

Uninstall

rm /lib/systemd/system/play-search-staleAppRemover.service
rm /lib/systemd/system/play-search-staleAppRemover.timer
rm /lib/systemd/system/uwsgi-play-search.service

Related Projects

https://github.com/facundoolano/google-play-scraper/ It's a Node.js scraper to get data from Google Play. It's a Nodejs library and provides some RESTful API support. This project helped us understand some Google Play behavior.

https://www.appbrain.com

https://playsearch.kaki87.net/ from https://android.stackexchange.com/a/202695/97993

advanced-play-search's People

Contributors

dliang090222 avatar gqqnbig avatar peanutboo avatar rickyoung221 avatar terranzmczmx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

alarian

advanced-play-search's Issues

search null?

click Allow in-app purchase, then click search. The keyword becomes null.

Allow permissions

Is there a way to show all the app that request authorization for precise GPS location?

Thanks

Check if we really need to build systemd

I tested a while ago, that the systemd version on github actions servers is 237.

systemd version 245 works fine for me. Therefore I build the binary on-the-fly on github actions servers.

But it's best to first check if the installed version of systemd is >=245.

OSError: write error

May 19 13:14:31 fuckGfw uwsgi[79452]: spawned uWSGI worker 1 (and the only) (pid: 79452, cores: 1)
May 19 13:14:38 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 1/1] 164.67.235.242 () {42 vars in 839 bytes} [Tue May 19 20:14:38 2020] GET / => generated 15501 bytes in 683 msecs (HTTP/1.1 200) 3 headers in 104 bytes (1 switches on core
May 19 13:14:38 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 2/2] 164.67.235.242 () {42 vars in 786 bytes} [Tue May 19 20:14:38 2020] GET /jsi18n/ => generated 3223 bytes in 3 msecs (HTTP/1.1 200) 3 headers in 112 bytes (1 switches on c
May 19 13:14:38 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 3/3] 164.67.235.242 () {42 vars in 800 bytes} [Tue May 19 20:14:38 2020] GET /Api/Categories => generated 1098 bytes in 6 msecs (HTTP/1.1 200) 4 headers in 133 bytes (1 switch
May 19 13:14:38 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 4/4] 164.67.235.242 () {42 vars in 796 bytes} [Tue May 19 20:14:38 2020] GET /Api/AppCount => generated 5 bytes in 5 msecs (HTTP/1.1 200) 4 headers in 119 bytes (1 switches on
May 19 13:14:38 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 5/5] 164.67.235.242 () {42 vars in 794 bytes} [Tue May 19 20:14:38 2020] GET /Api/Version => generated 17 bytes in 12 msecs (HTTP/1.1 200) 5 headers in 181 bytes (1 switches o
May 19 13:14:38 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 6/6] 164.67.235.242 () {42 vars in 808 bytes} [Tue May 19 20:14:38 2020] GET /Api/RecentSearches => generated 894 bytes in 6 msecs (HTTP/1.1 200) 3 headers in 96 bytes (1 swit
May 19 13:15:14 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 7/7] 164.67.235.242 () {46 vars in 919 bytes} [Tue May 19 20:15:14 2020] GET / => generated 15501 bytes in 13 msecs (HTTP/1.1 200) 3 headers in 104 bytes (1 switches on core 0
May 19 13:15:14 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 8/8] 164.67.235.242 () {46 vars in 866 bytes} [Tue May 19 20:15:14 2020] GET /jsi18n/ => generated 3223 bytes in 4 msecs (HTTP/1.1 200) 3 headers in 112 bytes (1 switches on c
May 19 13:15:14 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 9/9] 164.67.235.242 () {46 vars in 882 bytes} [Tue May 19 20:15:14 2020] GET /Api/Permissions => generated 9122 bytes in 4 msecs (HTTP/1.1 200) 4 headers in 134 bytes (1 switc
May 19 13:15:14 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 10/10] 164.67.235.242 () {46 vars in 880 bytes} [Tue May 19 20:15:14 2020] GET /Api/Categories => generated 1098 bytes in 3 msecs (HTTP/1.1 200) 4 headers in 133 bytes (1 swit
May 19 13:15:14 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 11/11] 164.67.235.242 () {46 vars in 876 bytes} [Tue May 19 20:15:14 2020] GET /Api/AppCount => generated 5 bytes in 6 msecs (HTTP/1.1 200) 4 headers in 119 bytes (1 switches
May 19 13:15:14 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 12/12] 164.67.235.242 () {46 vars in 888 bytes} [Tue May 19 20:15:14 2020] GET /Api/RecentSearches => generated 894 bytes in 1 msecs (HTTP/1.1 200) 3 headers in 96 bytes (1 sw
May 19 13:15:14 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 13/13] 164.67.235.242 () {46 vars in 874 bytes} [Tue May 19 20:15:14 2020] GET /Api/Version => generated 17 bytes in 1 msecs (HTTP/1.1 200) 5 headers in 181 bytes (1 switches
May 19 13:16:34 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 14/14] 49.4.31.138 () {30 vars in 340 bytes} [Tue May 19 20:16:34 2020] HEAD / => generated 15501 bytes in 15 msecs (HTTP/1.1 200) 3 headers in 104 bytes (1 switches on core 0
May 19 13:16:36 fuckGfw uwsgi[79452]: Tue May 19 20:16:36 2020 - SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) on request / (ip 49.4.31.138) !!!
May 19 13:16:36 fuckGfw uwsgi[79452]: Tue May 19 20:16:36 2020 - uwsgi_response_writev_headers_and_body_do(): Broken pipe [core/writer.c line 306] during GET / (49.4.31.138)
May 19 13:16:36 fuckGfw uwsgi[79452]: OSError: write error
May 19 13:16:36 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 15/15] 49.4.31.138 () {30 vars in 339 bytes} [Tue May 19 20:16:36 2020] GET / => generated 0 bytes in 43 msecs (HTTP/1.1 200) 3 headers in 0 bytes (0 switches on core 0)
May 19 13:22:24 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 16/16] 164.67.235.242 () {44 vars in 1027 bytes} [Tue May 19 20:22:24 2020] GET / => generated 15436 bytes in 18 msecs (HTTP/1.1 200) 3 headers in 109 bytes (1 switches on cor
May 19 13:22:24 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 17/17] 164.67.235.242 () {42 vars in 899 bytes} [Tue May 19 20:22:24 2020] GET /jsi18n/ => generated 3823 bytes in 4 msecs (HTTP/1.1 200) 3 headers in 117 bytes (1 switches on
May 19 13:22:24 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 18/18] 164.67.235.242 () {42 vars in 913 bytes} [Tue May 19 20:22:24 2020] GET /Api/Categories => generated 1098 bytes in 3 msecs (HTTP/1.1 200) 4 headers in 138 bytes (1 swit
May 19 13:22:24 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 19/19] 164.67.235.242 () {42 vars in 909 bytes} [Tue May 19 20:22:24 2020] GET /Api/AppCount => generated 5 bytes in 6 msecs (HTTP/1.1 200) 4 headers in 124 bytes (1 switches
May 19 13:22:24 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 20/20] 164.67.235.242 () {42 vars in 921 bytes} [Tue May 19 20:22:24 2020] GET /Api/RecentSearches => generated 894 bytes in 3 msecs (HTTP/1.1 200) 3 headers in 101 bytes (1 s
May 19 13:22:24 fuckGfw uwsgi[79452]: [pid: 79452|app: 0|req: 21/21] 164.67.235.242 () {42 vars in 907 bytes} [Tue May 19 20:22:24 2020] GET /Api/Version => generated 16 bytes in 10 msecs (HTTP/1.1 200) 5 headers in 186 bytes (1 switches
lines 299524-299585/299585 (END)

It happens every day.

Sort (and filter) by price

Google frequently gives away coupons for £3 off £5 spend.

As Google has no basket for buying multiple products together, and the vast majority of premium apps are <£5, a means of finding those few apps that are >=£5 is highly desirable.

2021 resolutions

In year 2021

  • add license #63
  • update year and author in the project
  • create a new tag before these updates

Sort by size, limit maximum download size

I almost exclusively favor and select small apps, less than 10mb, for the majority of my android app installs. I found this search engine looking for a way to narrow my search results to the smallest matches. I would appreciate a feature to sort by size, or narrow results in that manner. Cheers!
Screenshot_2021-05-22_16-29-25

warning: unterminated string

$ django-admin makemessages -l zh_hans -d djangojs --extension html
.\templates\dynamic\header.html:10: warning: RegExp literal terminated too early
.\templates\index.html:9: warning: unterminated string
.\templates\index.html:18: warning: unterminated string
.\templates\index.html:21: warning: unterminated string
.\templates\index.html:132: warning: unterminated string
.\templates\index.html:156: warning: unterminated string
.\templates\index.html:161: warning: unterminated string
.\templates\index.html:200: warning: unterminated string
.\templates\index.html:302: warning: unterminated string
.\templates\index.html:313: warning: unterminated string
.\templates\index.html:315: warning: unterminated string
.\templates\index.html:321: warning: unterminated string
.\templates\index.html:376: warning: unterminated string
.\templates\index.html:399: warning: unterminated string
.\templates\vue\collapsible-searchable-list.html:13: warning: unterminated string
.\templates\vue\collapsible-searchable-list.html:75: warning: unterminated string
.\templates\vue\collapsible-searchable-list.html:85: warning: unterminated string
.\templates\vue\collapsible-searchable-list.html:225: warning: RegExp literal terminated too early
processing locale zh_hans

Check if there are ways to fix the warnings.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.