Google Form используются повсеместно, с помощью них удобно создавать различные опросы и формы обратной связи. Но их можно использовать не только на сайте самого Google, но и передавать в них данные из любого места. В данном примере я покажу, как использовать Google Form для получения и хранения данных из консольного приложения, написанного на C#.
Для начала работы, создадим саму форму. Для этого необходимо зайти в Google Drive и выбрать Create – Form.
Добавим на форму 3 поля: имя, фамилию и комментарии. Форма будет выглядеть следующим образом.
Теперь рассмотрим внутренности данной формы. Я буду использовать Firebug, но можно использовать и другие инструменты.
Форма отправляет данные методом POST, также можно увидеть точный адрес, по которому уходят данные. Данный адрес нам понадобиться, так как именно на его мы будем отправлять данные из C# приложения.
Теперь посмотрим названия используемых полей.
Для имени:
Имя entry.1338026625, для фамилии и комментариев названия будут entry.1040095911 и entry.1223952277 соответственно.
Теперь перейдём к C# коду:
Для начало объявим и инициализируем переменную типа WebRequest с адресом, на который форма должна отправлять данные.
var request = WebRequest.Create("https://docs.google.com/forms/d/1RUf174i5bUK738rGrbXZunoK1PUknAkZYjv_OWgYmPA/formResponse");
Теперь получим из консоли данные для отправки:
Console.Write("Имя: ");
var firstName = Console.ReadLine();
Console.Write("Фамилия: ");
var lastName = Console.ReadLine();
Console.Write("Комментарий: ");
var comments = Console.ReadLine();
Теперь нужно составить строку для передачи на сервер, она должна иметь следующий формат: “параметр1=значение1&парамерт2=значение2”
var postData = "entry.1338026625=" + firstName + "&entry.1040095911=" + lastName + "&entry.1223952277=" + comments;
Если будут нужно часто формировать подобные строки, то имеет смысл сделать класс, который будет принимать значения вида название-значение (словарь для этого отлично подойдёт) и на выход давать требуемую строку. Но я немного поленюсь и оставлю так.
Так как в передаваемых данных будут встречаться символы, отличные от латиницы (на русском), то для начала стоит преобразовать строку, воспользовавшись методом
HttpUtility.UrlPathEncode
postData = HttpUtility.UrlPathEncode(postData);
Теперь получим разложение строки на байты, в кодировке
ASCII
var data = Encoding.ASCII.GetBytes(postData);
Теперь зададим метод отправки, тип контента и длина передаваемого контента:
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
Передадим массив байтов в поток:
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
Осталось отправить данные и получить ответ о результате.
try
{
var response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Console.WriteLine("Данные успешно отправлены");
}
}
catch (Exception e)
{
Console.WriteLine("Произошла ошибка: {0}", e.Message);
throw;
}
Проверяем работу программы:

Теперь открываем Google Drive и находим документ с именем Test Google Form (Responses). (название формы + (Responses)). Название может отличаться!!!
Целиком программу будет выглядеть следующим образом:
var request = WebRequest.Create("https://docs.google.com/forms/d/1RUf174i5bUK738rGrbXZunoK1PUknAkZYjv_OWgYmPA/formResponse");
Console.Write("Имя: ");
var firstName = Console.ReadLine();
Console.Write("Фамилия: ");
var lastName = Console.ReadLine();
Console.Write("Комментарий: ");
var comments = Console.ReadLine();
var postData = "entry.1338026625=" + firstName + "&entry.1040095911=" + lastName + "&entry.1223952277=" + comments;
postData = HttpUtility.UrlPathEncode(postData);
var data = Encoding.ASCII.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
try
{
var response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Console.WriteLine("Данные успешно отправлены");
}
}
catch (Exception e)
{
Console.WriteLine("Произошла ошибка: {0}", e.Message);
throw;
}
Вот так вот просто организовать запись в Google Form из C#. Надеюсь информацию будет полезной.
Приятного программирования…