반응형

GetAppInfo 클래스에서는 넘겨받은 패키지명을 가지고 Play 스토어의 해당 페이지로 가서 앱 이름과 버전에 해당하는 element의 값을 Jsoup 라이브러리를 이용해서 구하게 됩니다.

public class GetAppInfo extends AsyncTask<Void, String, Boolean> {
    private String appPackageName;
    private String appName;
    private String appVersion;

    public GetAppInfo(String packageName) {
        appPackageName = packageName;
    }

    @Override
    protected Boolean doInBackground(Void... strings) {
        Elements elementsAppName;
        Elements elementsAppVersion;
        boolean result = false;
        try {
            String AppFromPlayStore = "https://play.google.com/store/apps/details?id=" + appPackageName;
            Document doc = Jsoup.connect(AppFromPlayStore).get();
            elementsAppName = doc.select("div > div.sIskre > c-wiz:nth-child(1) > h1 > span");
            if (elementsAppName.size() != 0) {
                appName = elementsAppName.text();
            } else {
                elementsAppName = doc.select("div > div.sIskre > c-wiz:nth-child(2) > h1 > span");
                if (elementsAppName.size() != 0) {
                    appName = elementsAppName.text();
                } else {
                    appName = "Crawling code(App Name) needs to be changed.";
                }
            }
            elementsAppVersion = doc.select("div > div:nth-child(4) > span > div > span");
            if (elementsAppVersion.size() != 0) {
                appVersion = elementsAppVersion.text();
            } else {
                appName = "Crawling code(App Version) needs to be changed.";
            }
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

실제 테스트한 앱은 아래와 같은 화면을 구성하고 있습니다.

패키지명을 입력하고 버튼을 누르면 Play 스토어에서 크롤링해 온 앱 이름과 버전을 표시해줍니다.

왼쪽: 버튼 누르기 전, 오른쪽: 버튼 누른 후 

아래처럼 여러 경우에 따라서 App name과 App version에 표시해주는 정보가 달라집니다.

        btnGetAppInfo = findViewById(R.id.btnGetAppInfo);
        btnGetAppInfo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                hideKeyboard();

                if (isNetwork()) {
                    try {
                        getAppInfo = new GetAppInfo(etPackageName.getText().toString());
                        if (getAppInfo.execute().get()) {
                            tvAppName.setText(getAppInfo.getAppName());
                            tvAppVersion.setText(getAppInfo.getAppVersion());
                        } else {
                            tvAppName.setText("N/A (The package name app does not exist on the Play Store.)");
                            tvAppVersion.setText("N/A (The package name app does not exist on the Play Store.)");
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        tvAppName.setText("N/A (Error)");
                        tvAppVersion.setText("N/A (Error)");
                    }
                } else {
                    tvAppName.setText("N/A (No internet connection)");
                    tvAppVersion.setText("N/A (No internet connection)");
                }
            }
        });

 

위의 예제 소스를 첨부하였으니 참고하세요.

CrawlingAppInfo.zip
0.14MB

 

 

+ Recent posts