Fetching first 10 media items...
Traceback (most recent call last):
File "gphotos_connectfetchtest.py", line 43, in
list_media_items()
File "gphotos_connectfetchtest.py", line 31, in list_media_items
results = service.mediaItems().list(pageSize=10).execute()
File "D:\Program Files\Python\Python38\lib\site-packages\googleapiclient\_help
ers.py", line 130, in positional_wrapper
return wrapped(*args, **kwargs)
File "D:\Program Files\Python\Python38\lib\site-packages\googleapiclient\http.
py", line 938, in execute
raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError:
< /code>
Даже GPT не мог бы помочь мне в этом, в течение последних 15 прочитан мы бегаем вокруг кругов снова и снова и снова. Может быть, это что -то с моей учетной записью, может быть, мне понадобятся дополнительные обручи, которые мне нужно прыгнуть, чтобы наконец решить это .. Я не знаю .... < /p>
l.e.:образноimport os
import json
import csv
from datetime import datetime
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
SCOPES = ['https://www.googleapis.com/auth/photoslibrary.readonly']
CLIENT_SECRET_FILE = 'credentials.json'
TOKEN_FILE = 'token.json'
def authenticate():
creds = None
# Load token if it exists
if os.path.exists(TOKEN_FILE):
creds = Credentials.from_authorized_user_file(TOKEN_FILE, SCOPES)
# If no valid credentials available, let user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
creds = flow.run_local_server(port=8080)
# Save credentials for next run
with open(TOKEN_FILE, 'w') as token:
token.write(creds.to_json())
return creds
def estimate_size(media_type, megapixels):
try:
if media_type == "Photo" and megapixels:
return round(megapixels * 0.3, 2) # MB estimate
else:
return ""
except:
return ""
def get_photos():
creds = authenticate()
service = build('photoslibrary', 'v1', credentials=creds, static_discovery=False)
media_items = []
next_page_token = None
print("Fetching media items...")
while True:
results = service.mediaItems().list(pageSize=100, pageToken=next_page_token).execute()
items = results.get('mediaItems', [])
media_items.extend(items)
next_page_token = results.get('nextPageToken')
if not next_page_token:
break
timestamp = datetime.now().strftime('%d.%m.%Y_%H%M')
output_file = f'google_photos_{timestamp}.csv'
with open(output_file, 'w', newline='', encoding='utf-8') as csvfile:
fieldnames = ['Name', 'Date Taken', 'Type', 'Extension', 'Resolution', 'Megapixels', 'Est. File Size (MB)', 'Link', 'mediaItemId']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames, delimiter='\t')
writer.writeheader()
for item in media_items:
metadata = item.get('mediaMetadata', {})
mime_type = item.get('mimeType', '')
media_type = 'Video' if mime_type.startswith('video') else 'Photo'
width = metadata.get('width')
height = metadata.get('height')
resolution = f"{width} x {height}" if width and height else ''
megapixels = round((int(width) * int(height)) / 1_000_000, 2) if width and height else ''
estimated_size = estimate_size(media_type, megapixels)
filename = item.get('filename', '')
extension = os.path.splitext(filename)[1].lower().lstrip('.')
writer.writerow({
'Name': filename,
'Date Taken': metadata.get('creationTime', ''),
'Type': media_type,
'Extension': extension,
'Resolution': resolution,
'Megapixels': f"{megapixels} MP" if megapixels else '',
'File Size': get_file_size(base_url),
'Device Model': device_model,
'Link': base_url + '=d',
'mediaItemId': item.get('id'),
})
print(f"Saved {len(media_items)} media items to '{output_file}'.")
if __name__ == '__main__':
get_photos()
< /code>
token: < /p>
{"token": tokenTOKENtokenToKeNTOKENtokentokenTOKENtokenToKeNTOKENtokentokenTOKENtokenToKeNTOKENtokentokenTOKENtokenToKeNTOKENtokentokenTOKENtokenToKeNTOKEN_tokentokenTOKEN_tokenToKeNTOKENtokentokenTOKENtokenToKeNTOKENtokentokenTOKENtoken",
"refresh_token": "1//0refresh_tokenrefresh_tokenAkSNwF-refresh_token-refresh_tokenrefresh_tokenrefresh_tokenrefresh_token",
"token_uri": "https://oauth2.googleapis.com/token",
"client_id": "client_id-CLIENT_IDclient.idClIeNt_Id.apps.googleusercontent.com",
"client_secret": "SECRET-SECRETsecretSECRET-SeCrEtsecret-SECRET",
"scopes": ["https://www.googleapis.com/auth/photoslibrary.readonly"],
"universe_domain": "googleapis.com",
"account": "",
"expiry": "3485-06-25T00:39:18.310504Z"}
Подробнее здесь: https://stackoverflow.com/questions/796 ... google-api
Запрос имел недостаточные области аутентификации. Google API ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение