import os import argparse import json from googleapiclient.discovery import build from google.oauth2 import service_account # Load API key from environment variable api_key = os.environ.get('GOOGLE_PLAY_API_KEY') # Load command-line arguments parser = argparse.ArgumentParser(description='Fetch app details from Google Play Store.') parser.add_argument('package_name', help='Package name of the app') parser.add_argument('--source-language', action='store_true', help='Fetch app description in source language') parser.add_argument('--list-languages', action='store_true', help='List all supported languages') parser.add_argument('--extract-details', action='store_true', help='Extract and save app details as JSON') parser.add_argument('--extract-changelog', action='store_true', help='Extract and save changelog as JSON') args = parser.parse_args() # Create a service account credentials object credentials = service_account.Credentials.from_service_account_file( '/home/kwadronaut/dev/leap/secrets/android-api.json', scopes=['https://www.googleapis.com/auth/androidpublisher'] ) # Build the service object for the Google Play Developer API service = build('androidpublisher', 'v3', credentials=credentials, cache_discovery=False) # Fetch app details def fetch_app_details(package_name, language): # Create a new edit edit_request = service.edits().insert(body={}, packageName=package_name) edit_response = edit_request.execute() edit_id = edit_response['id'] # Fetch the app listing for the specified language within the edit app_details = service.edits().listings().get( packageName=package_name, editId=edit_id, language=language ).execute() # Commit the edit (optional) service.edits().commit( packageName=package_name, editId=edit_id ).execute() return app_details, edit_id # Fetch changelog for a specific version def fetch_changelog(package_name, edit_id): # Fetch the tracks for the package tracks = service.edits().tracks().list(packageName=package_name, editId=edit_id).execute() track = tracks['tracks'][0]['track'] # Fetch the changelog for the track changelog = service.edits().tracks().get(packageName=package_name, editId=edit_id, track=track).execute() return changelog # Package name package_name = args.package_name # Fetch app details try: #app_details, edit_id = fetch_app_details(package_name, 'en-US') app_details, edit_id = fetch_app_details(package_name, 'nl-NL') print("App Details:") print(app_details) except Exception as e: print("An error occurred:", str(e)) # List all supported languages if args.list_languages: try: # Create a new edit edit_request = service.edits().insert(body={}, packageName=package_name) edit_response = edit_request.execute() edit_id = edit_response['id'] # Fetch the app listings for the edit listings = service.edits().listings().list(packageName=package_name, editId=edit_id).execute() supported_languages = [listing['language'] for listing in listings['listings']] print("Supported Languages:") for language in supported_languages: print(language) # Commit the edit service.edits().commit(packageName=package_name, editId=edit_id).execute() except Exception as e: print("An error occurred:", str(e)) # Extract and save app details as JSON if args.extract_details: try: # Extract the text fields from app details title = app_details['title'] full_description = app_details['fullDescription'] short_description = app_details['shortDescription'] # Create a dictionary to hold the extracted app details extracted_details = { 'title': title, 'full_description': full_description, 'short_description': short_description } # Determine the output file path based on the language language = 'en-US' # Update with the desired language json_file_path = f"locale/{language}/transifex.json" # Create the output directory if it doesn't exist os.makedirs(os.path.dirname(json_file_path), exist_ok=True) # Save the extracted details as JSON with open(json_file_path, 'w', encoding='utf-8') as json_file: json.dump(extracted_details, json_file, ensure_ascii=False, indent=4) print(f"App details extracted and saved to {json_file_path} as JSON successfully.") except Exception as e: print("An error occurred:", str(e)) # Extract and save changelog as JSON if args.extract_changelog: try: changelog = fetch_changelog(package_name, edit_id) print("Changelog:") print(changelog) # Determine the output file path based on the language language = 'en-US' # Update with the desired language json_file_path = f"locale/{language}/transifex.json" # Create the output directory if it doesn't exist os.makedirs(os.path.dirname(json_file_path), exist_ok=True) # Save the changelog as JSON with open(json_file_path, 'w', encoding='utf-8') as json_file: json.dump(changelog, json_file, ensure_ascii=False, indent=4) print(f"Changelog extracted and saved to {json_file_path} as JSON successfully.") except Exception as e: print("An error occurred:", str(e))