English | 繁體中文
偽裝成 Android 裝置登入帳號發送請求來訪問 Google Play!
PHP 版本:開發中
如果發現任何 BUG,請在此回報:https://github.com/GoneToneStudio/node-google-play-api/issues
需要 Node.js 14.0.0 或更高版本。
npm install @gonetone/google-play-api
-
登入您的 Google 帳號
-
按下我同意
-
查看 Cookie
-
展開 accounts.google.com > Cookie,找到 "oauth_token" 點擊,複製 "oauth2_4/" 開頭的值
您可以至 Google Play 安裝 "裝置 ID" APP 取得您裝置的 GSF ID:https://play.google.com/store/apps/details?id=tw.reh.deviceid
請注意:
- 您取得 GSF ID 的裝置會影響後續取得 APP 資料,如果您想取得資料的 APP 不支援您取得 GSF ID 的裝置,資料會是 null,所以請先確認 APP 是否支援您的裝置。
- Android TV 無法直接從 Google Play 下載安裝 "Device ID" APP,不過您可以使用其他裝置安裝,然後將 APP 備份為 APK,最後將 APK 傳送到 Android TV 安裝。
const { GooglePlayAPI } = require('@gonetone/google-play-api')
const gpAPI = new GooglePlayAPI("[email protected]", "您的裝置 GSF ID (Google Service Framework ID)")
gpAPI.setUserAgent('User-Agent')
gpAPI.setClientID('am-android-asus')
gpAPI.setSdkVersion(28)
gpAPI.setCountryCode('tw')
gpAPI.setLanguageCode('zh-TW')
gpAPI.getGoogleToken('您的 OAuth2 Token', 'save/token.txt').then(async (token) => {
await gpAPI.googleAuth(token)
const details = await gpAPI.appDetails('com.github.android')
console.log(`Title: ${details.title}`)
console.log(`Description Html: ${details.descriptionHtml}`)
console.log(`Developer Name: ${details.details.appDetails.developerName}`)
console.log(`Version Code: ${details.details.appDetails.versionCode}`)
console.log(`Version String: ${details.details.appDetails.versionString}`)
console.log(`Package Name: ${details.details.appDetails.packageName}`)
console.log(`Share Url: ${details.shareUrl}`)
console.log(details)
})
gpAPI.getGoogleToken('您的 OAuth2 Token', 'save/token.txt').then(async (token) => {
await gpAPI.googleAuth(token)
const bulkDetails = await gpAPI.bulkDetails('com.github.android', 'com.twitter.android', 'com.facebook.katana')
console.log(bulkDetails)
})
gpAPI.getGoogleToken('您的 OAuth2 Token', 'save/token.txt').then(async (token) => {
await gpAPI.googleAuth(token)
const search = await gpAPI.search('GitHub')
console.log(search)
})
gpAPI.getGoogleToken('您的 OAuth2 Token', 'save/token.txt').then(async (token) => {
await gpAPI.googleAuth(token)
const downloadInfo = await gpAPI.downloadInfo('com.github.android')
//const downloadInfo = await gpAPI.downloadInfo('com.github.android', 613) // 指定版本代碼
console.log(downloadInfo)
})
gpAPI.getGoogleToken('您的 OAuth2 Token', 'save/token.txt').then(async (token) => {
await gpAPI.googleAuth(token)
const downloadApkUrl = await gpAPI.downloadApkUrl('com.github.android')
//const downloadApkUrl = await gpAPI.downloadApkUrl('com.github.android', 613) // 指定版本代碼
console.log(downloadApkUrl)
})
gpAPI.getGoogleToken('您的 OAuth2 Token', 'save/token.txt').then(async (token) => {
await gpAPI.googleAuth(token)
await gpAPI.downloadApk('com.github.android', 'save_folder')
//await gpAPI.downloadApk('com.github.android', 'save_folder', 613) // 指定版本代碼
})
gpAPI.getGoogleToken('您的 OAuth2 Token', 'save/token.txt').then(async (token) => {
await gpAPI.googleAuth(token)
const splitDeliveryDataInfo = await gpAPI.splitDeliveryDataInfo('com.supercell.clashofclans')
//const splitDeliveryDataInfo = await gpAPI.splitDeliveryDataInfo('com.supercell.clashofclans', 1383) // 指定版本代碼
console.log(splitDeliveryDataInfo)
})
gpAPI.getGoogleToken('您的 OAuth2 Token', 'save/token.txt').then(async (token) => {
await gpAPI.googleAuth(token)
const downloadSplitApksNameAndUrl = await gpAPI.downloadSplitApksNameAndUrl('com.supercell.clashofclans')
//const downloadSplitApksNameAndUrl = await gpAPI.downloadSplitApksNameAndUrl('com.supercell.clashofclans', 1383) // 指定版本代碼
console.log(downloadSplitApksNameAndUrl)
})
gpAPI.getGoogleToken('您的 OAuth2 Token', 'save/token.txt').then(async (token) => {
await gpAPI.googleAuth(token)
await gpAPI.downloadSplitApks('com.supercell.clashofclans', 'save_folder')
//await gpAPI.downloadSplitApks('com.supercell.clashofclans', 'save_folder', 1383) // 指定版本代碼
})
PS:
- 您可以使用 Split APKs Installer (SAI) 這個 App 來安裝拆分的 Apks。
- 別忘了使用
gpAPI.downloadApk()
下載主 Apk,再一同安裝。
gpAPI.getGoogleToken('您的 OAuth2 Token', 'save/token.txt').then(async (token) => {
await gpAPI.googleAuth(token)
const additionalFileInfo = await gpAPI.additionalFileInfo('com.github.android')
//const additionalFileInfo = await gpAPI.additionalFileInfo('com.github.android', 613) // 指定版本代碼
console.log(additionalFileInfo)
})
gpAPI.getGoogleToken('您的 OAuth2 Token', 'save/token.txt').then(async (token) => {
await gpAPI.googleAuth(token)
const downloadAdditionalFileUrls = await gpAPI.downloadAdditionalFileUrls('com.github.android')
//const downloadAdditionalFileUrls = await gpAPI.downloadAdditionalFileUrls('com.github.android', 613) // 指定版本代碼
console.log(downloadAdditionalFileUrls)
})
gpAPI.getGoogleToken('您的 OAuth2 Token', 'save/token.txt').then(async (token) => {
await gpAPI.googleAuth(token)
await gpAPI.downloadAdditionalFiles('com.github.android', 'save_folder')
//await gpAPI.downloadAdditionalFiles('com.github.android', 'save_folder', 613) // 指定版本代碼
})