Android Dev/Snippets & Samples
Play 스토어 크롤링 - 앱 정보(이름, 버전) 가져오기
Guter Mann
2020. 3. 31. 23:27
반응형
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)");
}
}
});
위의 예제 소스를 첨부하였으니 참고하세요.