Загрузите общедоступные файлы с cloud.google.com, используя python, когда требуется вход в систему - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь загрузить набор данных по дезинформации / выборам в Twitter по адресу: https://storage.cloud.google.com/twitter-election-integrity/hashed/ira/ira_media_file_list_hashed.txt

Но для этого требуется логин.Я не использую Google App Engine, просто Python 3 работает на моем ноутбуке.Я написал следующий код для загрузки файлов:

for a_url in download_urls:
    filename = os.path.join(data_path, os.path.basename(a_url))

    if not os.path.isfile(filename):
        #urllib.request.urlretrieve(a_url, filename)
        with open(filename, 'wb') as f:
            c = pycurl.Curl()
            c.setopt(c.URL, a_url)
            c.setopt(c.WRITEDATA, f)
            c.setopt(c.CAINFO, certifi.where())
            c.perform()
            c.close()

Есть ли способ загрузить эти файлы, избегая необходимости входить в мою учетную запись Google?

Или естьпростой способ входа через python?

Почти вся информация в Интернете - как это сделать из среды GAE, и я не пытаюсь подключиться к корзине.

1 Ответ

0 голосов
/ 26 февраля 2019

Указанный URL-адрес указывает, что файлы обслуживаются из Облачное хранилище .Поскольку вход в систему необходим, это означает, что объекты не являются общедоступными .

Приложение, обслуживающее эти файлы, использует ориентированный на пользователя поток OAuth 2.0.С Аутентификация :

Облачное хранилище использует OAuth 2.0 для аутентификации и авторизации API.Аутентификация - это процесс определения личности клиента.

  • Ориентированный на пользователя поток позволяет приложению получать учетные данные от конечного пользователя.Пользователь входит в систему для завершения аутентификации.

Is there a way I can download these files while avoiding having to log in to my google account?

Ответ здесь должен быть нет .В противном случае это ошибка - вы могли бы обойти защиту Google Cloud;)

Я не смог найти подробности для pycurl, но сам curl не отображает OAuth 2.0 как поддерживаемый.Из Особенности - что может делать curl :

HTTP

  • аутентификация: Basic, Digest, NTLM (* 9) и согласование (SPNEGO)(* 3) на сервер и прокси

Так что я думаю, что вы не сможете загружать файлы, используя pycurl.По крайней мере, не напрямую (может быть, через прокси?).

Одной из возможных альтернатив будет использование Cloud SDK gsutil в вашем скрипте (запускается как любойдругой внешний процесс).:

  • вы сначала получите токен аутентификации с gcloud auth login.
  • затем вы запустите свой скрипт, gsutil выполнения внутри него будут использовать ранее полученный токен аутентификации

Я вижу, что можно установить и использовать gsutil в автономном режимережим, без облачного SDK, но я не использовал его таким образом.Может быть, стоит провести расследование по вашему делу.С gsutil config:

Команда gsutil config применяется к пользователям, которые установили gsutil в качестве автономного инструмента.

Команда gsutil config получает доступучетные данные для Google Cloud Storage и записывает файл конфигурации boto / gsutil, содержащий полученные учетные данные, а также ряд других контролируемых конфигурацией значений.

...