#python-3.x #google-drive-api #httplib2
Вопрос:
Я использую проект Google Google Drive API
для создания и обновления файлов на Google диске, до вчерашнего дня все работало нормально. Мой скрипт на python тоже работал нормально, но через пару часов я получаю следующую ошибку:
lib/python3.9/site-packages/httplib2/__init__.py", line 1136, in connect
sock.connect((self.host, self.port))
socket.timeout: timed out
Это функция, которую я использую для подключения Google Drive API
:
def Create_Service(client_secret_file, api_name, api_version, *scopes):
print(client_secret_file, api_name, api_version, scopes, sep='-')
CLIENT_SECRET_FILE = client_secret_file
API_SERVICE_NAME = api_name
API_VERSION = api_version
SCOPES = [scope for scope in scopes[0]]
print(SCOPES)
cred = None
pickle_file = f'token_{API_SERVICE_NAME}_{API_VERSION}.pickle'
# print(pickle_file)
if os.path.exists(pickle_file):
with open(pickle_file, 'rb') as token:
cred = pickle.load(token)
if not cred or not cred.valid:
if cred and cred.expired and cred.refresh_token:
cred.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRET_FILE, SCOPES)
cred = flow.run_local_server()
with open(pickle_file, 'wb') as token:
pickle.dump(cred, token)
try:
service = build(API_SERVICE_NAME, API_VERSION, credentials=cred)
print(API_SERVICE_NAME, 'service created successfully')
return service
except Exception as e:
print('Unable to connect.')
print(e)
return None
Он подключается к Google Drive API
, но всякий раз, когда мой код пытается выполнить какое-либо действие, например, прочитать или записать в файл или папку, он получает socket.timeout: timed out
.
Я изменил свои учетные данные, даже создал новый проект google dev console
со свежими новыми учетными данными, повторно аутентифицировал API с помощью своей учетной записи Google, чтобы получить новый токен, но, похоже, ничего не работает.
Я тоже проверил зависимость от пакета pip check
, и она возвращает, что нарушенной зависимости нет.
# Edit 1:
Мой код для чтения файла из Google Drive
:
def __read_file_from_drive():
CLIENT_SECRET_FILE = 'client_secrets.json'
API_NAME = 'drive'
API_VERSION = 'v3'
SCOPES = ['https://www.googleapis.com/auth/drive']
service = Create_Service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)
file = 'my_file_id'
request = service.files().get_media(fileId=file)
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fd=fh, request=request)
done = False
while not done:
status, done = downloader.next_chunk()
print('File downloaded...')
fh.seek(0)
return fh.read().decode('ascii')
Code to save file to Google Drive
:
def __save_file_to_drive():
CLIENT_SECRET_FILE = 'client_secrets.json'
API_NAME = 'drive'
API_VERSION = 'v3'
SCOPES = ['https://www.googleapis.com/auth/drive']
service = Create_Service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)
__folder_id = 'my_folder_id'
__files = ['my_files_list']
__mime_type = 'text/csv'
for __file in __files:
file_meta = {
'name': __file,
'parents': [__folder_id]
}
media = MediaFileUpload('./{0}'.format(__file), mimetype=__mime_type)
service.files().create(
body=file_meta,
media_body=media,
fields='id'
).execute()
Текущая ошибка, которую я получаю:
Traceback (most recent call last):
File "~/PycharmProjects/project_name/google_drive_upload.py", line 75, in <module>
returned = int(__read_file_from_drive())
File "~/PycharmProjects/project_name/google_drive_upload.py", line 65, in __read_file_from_drive
status, done = downloader.next_chunk()
File "~/mambaforge/envs/project_name/lib/python3.9/site-packages/googleapiclient/_helpers.py", line 134, in positional_wrapper
return wrapped(*args, **kwargs)
File "~/mambaforge/envs/project_name/lib/python3.9/site-packages/googleapiclient/http.py", line 746, in next_chunk
resp, content = _retry_request(
File "~/mambaforge/envs/project_name/lib/python3.9/site-packages/googleapiclient/http.py", line 227, in _retry_request
raise exception
File "~/mambaforge/envs/project_name/lib/python3.9/site-packages/googleapiclient/http.py", line 196, in _retry_request
resp, content = http.request(uri, method, *args, **kwargs)
File "~/mambaforge/envs/project_name/lib/python3.9/site-packages/google_auth_httplib2.py", line 218, in request
response, content = self.http.request(
File "~/mambaforge/envs/project_name/lib/python3.9/site-packages/httplib2/__init__.py", line 1708, in request
(response, content) = self._request(
File "~/mambaforge/envs/project_name/lib/python3.9/site-packages/httplib2/__init__.py", line 1424, in _request
(response, content) = self._conn_request(conn, request_uri, method, body, headers)
File "~/mambaforge/envs/project_name/lib/python3.9/site-packages/httplib2/__init__.py", line 1346, in _conn_request
conn.connect()
File "~/mambaforge/envs/project_name/lib/python3.9/site-packages/httplib2/__init__.py", line 1136, in connect
sock.connect((self.host, self.port))
socket.timeout: timed out
Комментарии:
1. Можете ли вы показать пример кода, который читает/записывает? Вместе со строкой появляется ошибка?
2. @Рафа Гильермо Я обновил вопрос с фрагментом кода и полной ошибкой.
3. Проблема была решена автоматически в один момент, теперь это происходит снова, пожалуйста, если кто-нибудь может помочь…