Заполнение Google Form через C#

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#. Надеюсь информацию будет полезной.

Приятного программирования…

Комментарии (2) -

такой вопрос, как сделать чтобы на гугл форм было именно formfesponce? По другой ссылке он не хочет работать

Всё, заработало, переделал я в visual c# , но есть ошибка в ответах такого содержания: System.Windows.Forms.TextBox, Text: 123
VK для связи: vk.com/infoist

Добавить комментарий