Економимо місце в БД

Програмно записати дані в таблицю Google Drive

05.05.2015

Від самого початку проектування цього блогу, ключовим питанням для мене було яку базу даних обрати і взагалі де зберігати дані. Поки-що хочеться використовувати тільки безкоштовні варіанти, але кожен з них мав свої якісь обмеження.
Довго думав, як можна не платити за великі об'єми даних і знайшов для себе вихід — Таблиці на Google Drive. Сюди можна завантажувати "будь-яку" кількість даних і навіть проводити аналітику по них. Скрипт для того щоб зробити запис в таблиці займає біля 20 рядків і не потребує піключення жодний API чи бібліотек.

Пошук рішення

Перше, що приходило в голову для зберігання інформації і користувацьких даних — це таки використати базу даних.
Найпростіше реляційна БД: Postgres або MySQL має обмеження на Heroku обсягом у 10 000 рядків. Це звісно найпростіший варіант по підключенню, але в майбутньому будуть проблеми зі зміною структури БД.
Або інший варіант — не реляційна MongoDB з обмеженням в 500 Мб. Трохи складніше в підключенні, важко поки-що порахувати скільки даних буде там зберігатись, проте надає велику гнучкість по структурі даних і надає більше можливостей по агрегації цих даних.
Головна проблема могла би виникнути в момент, коли в мене буде кілька проектів, які будуть потребувати кілька мільйонів записів. Тоді б довелось тримати кілька акаунтів, що не є зручно.

Далі я згадав про те, що можна легко зберігати дані в Google таблицях. Раніше мав досвід роботи з Google Drive API, але це було настільки складно, що цей шлях був відкинутий.
Після цього подумав про те, як працюють Google Forms. Вони б ідеально підійшли для того щоб збирати і зберігати інформацію типу "write-only". В принципі все, що знадобилось це програмно зімітувати відправку форми за допомогою POST запиту зі свого скрипту до серверів Google.

Технічні деталі

Перше, що нам знадобиться - це створити форму. Для цього:

  • Заходимо в Google Drive (якщо у вас нема там аккаунту реєструємось)
  • Зліва клікаємо на кнопку "Створити" >> "Google Форми"
  • І далі ви повинні побачити наступне вікно:
  • Одразу перейменовуємо "Форма без назви" на щось більш значуще
  • В полі "Назва запитання" вказуємо назву поля нашої "реляційної" БД. А "Тип запитання" ставимо "Текст", тому-що всі решта призначені тільки для користувача, а ми будемо вписувати дані програмно. Таких полів зробити стільки скільки вам необхідно
  • Нижче у контейнері "Сторінка підтвердження" змінюємо "Вашу відповідь записано." на щось типу
    ### OK ###
    (див. код)

Тепер ваша форма готова, її можна переглянути натиснувши відповідну кнопку зверху. І лишився мінімум:

  • виписати ID форми (див. підкреслення під адресним рядком)
  • виписати ID кожного поля (для Google Chrome натисніть F12, в меню яке з'явиться натисніть на лупу і направте на необхідне поле для вводу)

Тепер можна переходити до коду (приклад на Python):

  1. import urllib
  2. def submit_form(data):
  3. google_form_url = 'https://docs.google.com/forms/d/{}/formResponse?{}'
  4. google_form_id = '1ZQZejRuKnhwfkGFdInIFlRlZiCek-JkbaAqKtE_OpE0'
  5. mapping_names_to_ids = {
  6. 'test': 'entry.226741144',
  7. }
  8. form_data = []
  9. for key in mapping_names_to_ids:
  10. form_data.append('{}={}'.format(mapping_names_to_ids[key], data.get(key)))
  11. url = google_form_url.format(google_form_id, '&'.join(form_data))
  12. resp = urllib.urlopen(url).read()
  13. if '### OK ###' in resp:
  14. print 'Successfully'
  15. else:
  16. print 'Error!'
  17. submit_form({'test': 'this is test data'})
Все, що треба змінити: це значення змінної
google_form_id
на ID вашої форми і значення словника
mapping_names_to_ids
на ваші назви полів та їх ID. І сміло можна запускати з консолі чи з файлу.
Для того щоб використати це у своїй Django аплікації необхідно замінити змінну
data.get(key)
на
request.POST.get(key)
. І якщо повертати HttpResponse, то у вас одразу з'явиться готова view-шка ;)

В результаті

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

Якщо виникнуть питання, щодо того як запустити чи матимете пропозиції щодо покращення — пишіть...
А я тим часом постараюсь навести приклади агрегації даних через локальний інстанс MongoDB та мінімальної інфографіки по даних, які назбираю у цьому блозі...


Якщо вам сподобалась стаття — поділіться з друзями:  


Коментарі: