summaryrefslogtreecommitdiff
path: root/scripts/fetch-play-metadata.py
blob: 7c65b64839f84279a95dcc92931b2b735d9707bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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))