Telegram-bot на python. 3 Реалізація роботи з GoogleAPI читаю-пишу

Пишу те, що накодив сам.

Важливо: про те, як налаштувати обліковий запис та отримати json-файл для підключення до документів з правами на редагування – то читачам домашнє завдання 🙂

Для роботи створив модуль gstools куди складаю функції, які використовую для читання-запису в таблицю Google.

наприклад читання усієї сторінки:

def read_from_worksheet(work_book_name, worksheet_name):  
    scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']  
    creds = ServiceAccountCredentials.from_json_keyfile_name('rrrrr-rrr-483eee24587fa.json', scope) 
    client = gspread.authorize(creds) 
    worksheet = client.open(work_book_name).worksheet(worksheet_name) 
    return worksheet

додати нові данні (стрічка-row)

def write_to_workbook(row_name, row_data, work_book_name, worksheet_name): 
    # document-specific operation! Be careful if copy it 
    scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive'] 
    creds = ServiceAccountCredentials.from_json_keyfile_name('rrrrr-rrr-483eee24587fa.json', scope) 
    client = gspread.authorize(creds) 
    worksheet1 = client.open(work_book_name).worksheet(worksheet_name) 
    worksheet1.update('A' + str(row_name), [row_data])

Так, є що доробляти. Але воно маленьке та працює, за умови що се прототип – переробляти недоцільно.

Модифікація даних всередині сторінки таблиці. Шукаю в таблиці що треба модифікувати та записую в потрібну комірку необхідні данні (це результат творчості для завдання – тут тільки факт того, що зробив і воно працює):

def find_and_modify_cell_by_other_cell_value(work_book_name, worksheet_name, column_number, cell_value_to_search, 
                                             column_cell_number_to_edit, data_for_enter): 
    scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive'] 
    creds = ServiceAccountCredentials.from_json_keyfile_name('rrrrr-rrr-483eee24587fa.json', scope) 
    client = gspread.authorize(creds) 
    worksheet1 = client.open(work_book_name).worksheet(worksheet_name) 
    sheet = worksheet1.get_all_values() 
    for row_number, row in enumerate(sheet): 
        if cell_value_to_search in row[column_number]: 
            worksheet1.update_cell(row_number+1, column_cell_number_to_edit, data_for_enter) 
            return worksheet_name, row[column_number], data_for_enter

Усі інші функції спираються на вищевказані та працюють IMHO коректно, поскладав у той-же файл, хоча треба було рознести по різних. При записі даних я не перевіряю дані бо перевірка проходить перед формуванням запиту на запис в таблицю. Для прототипу – норм.

В процесі роботи досить часто звертаюсь для оновлення даних з таблиць, тому застосунок інколи довго “висить” коли чекає підтвердження запису (перечитую з таблиці данні після кожного запису – це довго)

Залишити відповідь