如何使用Python以编程方式从Google Play开发人员控制台下载CSV文件?

n3h0vuf2  于 2023-11-14  发布在  Python
关注(0)|答案(2)|浏览(135)

我正在尝试从Google Play开发人员控制台下载CSV文件。在开发人员控制台中,在下载报告>统计信息下,我可以下载CSV文件,其中包含有关应用程序下载、安装和卸载的统计信息。
使用我在开发者控制台中获得的存储在Cloud Storage中的数据的存储桶的URI,我打开以下URL:https://console.cloud.google.com/storage/browser/pubsite_prod_7157330435810114607,其中显示文件。从那里,使用与开发者控制台中的开发者帐户相同的Gmail帐户登录,我可以逐个下载CSV文件。
但是,我想使用Python脚本下载它们,用matplotlib绘制数据:

import webbrowser

def download_file():
    # Download URL for the CSV file
    download_url = "https://storage.googleapis.com/pubsite_prod_7157330435810114607/stats/installs/installs_com.geology_quiz_and_guide.mineralogy_202301_app_version.csv"

    # Opens the browser at Google's login URL
    webbrowser.open('https://accounts.google.com/')

    # Wait to allow time to log in manually
    input("Press Enter after you have logged into Google...")

    # Once logged in, attempt to download the file
    webbrowser.open(download_url)

    print("Downloading file...")

download_file()

字符串
由于缺少权限,脚本不允许我下载文件:

<Error>
    <Code>AccessDenied</Code>
    <Message>Access denied.</Message>
    <Details>Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object. Permission 'storage.objects.get' denied on resource (or it may not exist).</Details>
</Error>


如果我登录了,并且是与存储桶关联的帐户,为什么我无法下载文件?
是否有其他方法下载CSV文件?

ogsagwnx

ogsagwnx1#

最好使用服务帐户和云存储python客户端从bucket下载文件。
首先,您将生成一个服务account.json文件,该文件将包含您的凭据,以便您可以使用Google Cloud API进行身份验证。
在你的google cloud控制台上,你可以转到IAM and admin > Service accounts。你可以创建一个新的服务帐户或使用默认值,前提是它有访问项目存储桶的权限。为服务帐户创建一个新的密钥,并选择JSON类型。将下载的json文件存储在一个方便的位置,也许就在你的脚本旁边。
另外,pip安装库google-cloud-storage和任何依赖项。
下面是一个示例代码,您可以使用它从存储桶中下载文件。

from google.cloud import storage
import os

# set environment variable referencing location of service account file
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "file.json" # actual path

# function to download file from bucket
def download_blob(bucket_name, source_blob_name, destination_file_name):
    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(source_blob_name)
    
    # download blob to local file
    blob.download_to_filename(destination_file_name)

字符串
因此,如果我的bucket名称是bucket1,bucket中的blob是bucket1data,并且我想保存到“\files\downloaded_blob”

download_blob('bucket1', 'bucket1data', '\files\downloaded_blob')

uxhixvfz

uxhixvfz2#

它可以用gsutil完成,并在bash终端(Linux)中执行命令:

import subprocess

# Definition of commands
commands = [
    'gsutil -m cp -r "gs://pubsite_prod_7157330435810114607/earnings" .',
    'gsutil -m cp -r "gs://pubsite_prod_7157330435810114607/reviews" .',
    'gsutil -m cp -r "gs://pubsite_prod_7157330435810114607/sales" .',
    'gsutil -m cp -r "gs://pubsite_prod_7157330435810114607/stats" .'
]

# Execution of each command
for cmd in commands:
    subprocess.run(cmd, shell=True, check=True)

字符串
这个脚本不需要认证,所以我认为文件是公开的。我不知道为什么在问题中发布的脚本中出现403错误。

编辑

安装gsutil时需要身份验证。阅读更多信息中的注解。

相关问题