5

I am new to Google Calendar API. I created function to add events to the Google calendar using Google Apps Script. This works well. But I want to execute the Google Apps Script from C# application.

How to do that?

Mogsdad
  • 44,709
  • 21
  • 151
  • 275
Jesuraja
  • 3,774
  • 4
  • 24
  • 48

2 Answers2

4

This is now possible thanks to the Execution API, which allows you to publish Google apps script functions for secure authenticated execution from C#.

The .NET Quickstart gives an example of running a Script called getFoldersUnderRoot().

Mogsdad
  • 44,709
  • 21
  • 151
  • 275
0

Here the full server google appscript Public Anyone

public class SheetServer
    {
        public string ScriptUrl { get; private set; }
        public SheetServer(string script)
        {
            this.ScriptUrl = script;
        }
        public async Task<string> GetStringAsync(string scriptUrl = null)
        {
            if (scriptUrl == null)
            {
                scriptUrl = ScriptUrl;
            }
            string jsonString = null;
            using (var httpClient = new System.Net.Http.HttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36");
                var stream = await httpClient.GetStreamAsync(scriptUrl);
                StreamReader reader = new StreamReader(stream);
                jsonString = reader.ReadToEnd();                

            }

            return jsonString;
        }
        public async Task<string> GetStringQueryAsync(string queryName, string queryString, string scriptUrl = null)
        {
            if (scriptUrl == null)
            {
                scriptUrl = ScriptUrl;
            }
            string jsonString = null;
            using (var httpClient = new System.Net.Http.HttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36");
                var query_Url = CreateQueryString(queryName, queryString, scriptUrl);
                var response = await httpClient.GetAsync(query_Url);
                jsonString = await response.Content.ReadAsStringAsync();
            }
            return jsonString;
        }
        public async Task<string> PostJsonAsync(string json, string scriptUrl = null)
        {
            string result = "";
            if (scriptUrl == null)
            {
                scriptUrl = ScriptUrl;
            }
            var data = new StringContent(json, Encoding.UTF8, "application/json");
            using (var httpClient = new System.Net.Http.HttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36");
                var response = await httpClient.PostAsync(scriptUrl, data);
                result = await response.Content.ReadAsStringAsync();
                Debug.WriteLine("---------------------------------------------");
                Debug.WriteLine(result);

            }
            return result;
        }

        public async Task<string> PostParametersAsync(string name, string value, string scriptUrl = null)
        {
            string result = "";
            if (scriptUrl == null)
            {
                scriptUrl = ScriptUrl;
            }
            var values = new List<KeyValuePair<string, string>>()
            {
                new KeyValuePair<string, string>(name, value)
            };
            FormUrlEncodedContent requestContent = new FormUrlEncodedContent(values);
            using (var httpClient = new System.Net.Http.HttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36");
                var response = await httpClient.PostAsync(scriptUrl, requestContent);
                result = await response.Content.ReadAsStringAsync();
                Debug.WriteLine("---------------------------------------------");
                Debug.WriteLine(result);

            }
            return result;
        }
        public async Task<string> PostParametersAsync(List<KeyValuePair<string, string>> values, string scriptUrl = null)
        {
            string result = "";
            if (scriptUrl == null)
            {
                scriptUrl = ScriptUrl;
            }
           
            FormUrlEncodedContent requestContent = new FormUrlEncodedContent(values);
            using (var httpClient = new System.Net.Http.HttpClient())
            {
                httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36");
                var response = await httpClient.PostAsync(scriptUrl, requestContent);
                result = await response.Content.ReadAsStringAsync();
                Debug.WriteLine("---------------------------------------------");
                Debug.WriteLine(result);

            }
            return result;
        }
        
        public async Task<string> PostQueryAsync(string queryName, string queryValue, List<KeyValuePair<string, string>> values,  string scriptUrl = null)
        {
            if (scriptUrl == null)
            {
                scriptUrl = ScriptUrl;
            }
            string result = "";
            using (var httpClient = new System.Net.Http.HttpClient())
            {            
                // Create HttpClient
                httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36");
                httpClient.BaseAddress = new Uri(scriptUrl);
                //query string builder
                string url_query = CreateQueryString(queryName, queryValue, scriptUrl);
                //content
                FormUrlEncodedContent requestContent = new FormUrlEncodedContent(values);
                var response = await httpClient.PostAsync(url_query, requestContent);
                result = await response.Content.ReadAsStringAsync();
                Debug.WriteLine("---------------------------------------------");
                Debug.WriteLine(result);
                
            }
            return result;
        }
        public string CreateQueryString(string queryName, string queryString, string requestUri )
        {
            var builder = new UriBuilder(requestUri);
            builder.Port = -1;
            var query = HttpUtility.ParseQueryString(builder.Query);
            query[queryName] = queryString;
            builder.Query = query.ToString();
            string url_query = builder.ToString();
            return url_query;
        }
    }
  • Remember that Stack Overflow isn't just intended to solve the immediate problem, but also to help future readers find solutions to similar problems, which requires understanding the underlying code. This is especially important for members of our community who are beginners, and not familiar with the syntax. Given that, **can you [edit] your answer to include an explanation of what you're doing** and why you believe it is the best approach? – Jeremy Caney Jun 10 '23 at 00:47