@Hikkimaru0_o

Почему программа не видит файл на Google drive?

import gspread
from oauth2client.service_account import ServiceAccountCredentials


def get_form_responses(form_name):
    credentials_path = r'C:\Users\Hikkimaru\Desktop\ProDviz\Work\Bot_lvl\.json'
    scope = ['https://spreadsheets.google.com/feeds',
             'https://www.googleapis.com/auth/drive']
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        credentials_path, scope)
    client = gspread.authorize(credentials)
    print('Успешно авторизовано.')

    # Открываем форму по названию
    form = client.open(form_name).sheet1
    print('Google Forms открыт.')

    # Получаем все ответы на форму
    responses = form.get_all_values()
    print('Ответы получены.')

    return responses


def add_responses_to_sheet(responses, sheet_name, score):
    credentials_path = r'C:\Users\Hikkimaru\Desktop\ProDviz\Work\Bot_lvl\.json'
    scope = ['https://spreadsheets.google.com/feeds',
             'https://www.googleapis.com/auth/drive']
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        credentials_path, scope)
    client = gspread.authorize(credentials)
    print('Успешно авторизовано.')

    # Создаем новую таблицу
    spreadsheet = client.create(sheet_name)
    print('Новая таблица создана.')

    # Получаем ссылку на новую таблицу
    sheet_url = spreadsheet.url

    # Открываем таблицу по ссылке
    sheet = client.open_by_url(sheet_url).sheet1
    print('Google Sheets открыт.')

    # Получаем текущие баллы из третьего столбца таблицы
    current_scores = sheet.col_values(3)
    # Вычисляем новые баллы, добавляя score к каждому текущему баллу
    new_scores = [str(int(score) + int(s)) for s in current_scores]
    print('Баллы обновлены.')

    # Получаем ответы на вопросы 1 и 2 из списка ответов
    question1_responses = [response[0] for response in responses]
    question2_responses = [response[1] for response in responses]

    # Обновляем таблицу с ответами и баллами
    for i in range(len(responses)):
        # Обновляем ячейку в первом столбце
        sheet.update_cell(i + 2, 1, question1_responses[i])
        # Обновляем ячейку во втором столбце
        sheet.update_cell(i + 2, 2, question2_responses[i])
        # Обновляем ячейку в третьем столбце
        sheet.update_cell(i + 2, 3, new_scores[i])
    print('Ответы успешно добавлены в Google Sheets.')


# Вводим название Google Forms, Google Sheets и количество баллов
form_name = input('Введите название Google Forms: ')
sheet_name = input('Введите название Google Sheets: ')
score = input('Введите количество баллов: ')

print('Получение ответов из Google Forms...')
responses = get_form_responses(form_name)

print('Добавление ответов в Google Sheets...')
add_responses_to_sheet(responses, sheet_name, score)

Я столкнулся с проблемой при использовании библиотеки gspread для доступа к форме на Google Drive. При попытке открыть форму с помощью функции client.open(form_name), возникает ошибка gspread.exceptions.SpreadsheetNotFound. Я уверен, что путь к форме указан правильно и сервисный аккаунт имеет соответствующие права доступа. Что я могу сделать, чтобы решить эту проблему и успешно получить доступ к форме на Google Drive?

до этого работал с API календаря там все было нормально
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Так это либа для работы с таблицами, а вы ей пытаетесь открыть форму. Сразу закидывайте в неё ссылку на вашу таблицу, я уверен что она в любом случае меняться не будет. Даже если вдруг нужна гибкость в виде того что ссылка на таблицу должна браться из формы, то надо тогда уж или искать либу для работы с формами, либо самому через какие нибудь requests дернуть ссылку на таблицу из формы
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 11:14
65000 руб./за проект
19 апр. 2024, в 11:08
5000 руб./за проект
19 апр. 2024, в 10:59
150000 руб./за проект