calling google Url Shortner API in C#

后端 未结 4 705
孤独总比滥情好
孤独总比滥情好 2021-02-08 10:36

I want to call the google url shortner API from my C# Console Application, the request I try to implement is:

POST https://www.googleapis.com/urlshortener

相关标签:
4条回答
  • 2021-02-08 10:55

    Following is my working code. May be its helpful for you.

    private const string key = "xxxxxInsertGoogleAPIKeyHerexxxxxxxxxx";
    public string urlShorter(string url)
    {
                string finalURL = "";
                string post = "{\"longUrl\": \"" + url + "\"}";
                string shortUrl = url;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.googleapis.com/urlshortener/v1/url?key=" + key);
                try
                {
                    request.ServicePoint.Expect100Continue = false;
                    request.Method = "POST";
                    request.ContentLength = post.Length;
                    request.ContentType = "application/json";
                    request.Headers.Add("Cache-Control", "no-cache");
                    using (Stream requestStream = request.GetRequestStream())
                    {
                        byte[] postBuffer = Encoding.ASCII.GetBytes(post);
                        requestStream.Write(postBuffer, 0, postBuffer.Length);
                    }
                    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    {
                        using (Stream responseStream = response.GetResponseStream())
                        {
                            using (StreamReader responseReader = new StreamReader(responseStream))
                            {
                                string json = responseReader.ReadToEnd();
                                finalURL = Regex.Match(json, @"""id"": ?""(?.+)""").Groups["id"].Value;
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    // if Google's URL Shortener is down...
                    System.Diagnostics.Debug.WriteLine(ex.Message);
                    System.Diagnostics.Debug.WriteLine(ex.StackTrace);
                }
                return finalURL;
    }
    
    0 讨论(0)
  • 2021-02-08 10:58

    How about changing

       var requestContent = new FormUrlEncodedContent(new[] 
            {new KeyValuePair<string, string>("longUrl", s),});
    

    to

       var requestContent = new StringContent("{\"longUrl\": \" + s + \"}");
    
    0 讨论(0)
  • 2021-02-08 11:03

    you can check the code below (made use of System.Net). You should notice that the contenttype must be specfied, and must be "application/json"; and also the string to be send must be in json format.

    using System;
    using System.Net;
    
    using System.IO;
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://www.googleapis.com/urlshortener/v1/url");
                httpWebRequest.ContentType = "application/json";
                httpWebRequest.Method = "POST";
    
                using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
                {
                    string json = "{\"longUrl\":\"http://www.google.com/\"}";
                    Console.WriteLine(json);
                    streamWriter.Write(json);
                }
    
                var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var responseText = streamReader.ReadToEnd();
                    Console.WriteLine(responseText);
                }
    
            }
    
        }
    }
    
    0 讨论(0)
  • Google has a NuGet package for using the Urlshortener API. Details can be found here.

    Based on this example you would implement it as such:

    using System;
    using System.Net;
    using System.Net.Http;
    using Google.Apis.Services;
    using Google.Apis.Urlshortener.v1;
    using Google.Apis.Urlshortener.v1.Data;
    using Google.Apis.Http;
    
    namespace ConsoleTestBed
    {
        class Program
        {
            private const string ApiKey = "YourAPIKey";
    
            static void Main(string[] args)
            {
                var initializer = new BaseClientService.Initializer
                {
                    ApiKey = ApiKey,
                    //HttpClientFactory = new ProxySupportedHttpClientFactory()
                };
                var service = new UrlshortenerService(initializer);
                var longUrl = "http://wwww.google.com/";
                var response = service.Url.Insert(new Url { LongUrl = longUrl }).Execute();
    
                Console.WriteLine($"Short URL: {response.Id}");
                Console.ReadKey();
            }
        }
    }
    

    If you are behind a firewall you may need to use a proxy. Below is an implementation of the ProxySupportedHttpClientFactory, which is commented out in the sample above. Credit for this goes to this blog post.

    class ProxySupportedHttpClientFactory : HttpClientFactory
    {
        private static readonly Uri ProxyAddress 
            = new UriBuilder("http", "YourProxyIP", 80).Uri;
        private static readonly NetworkCredential ProxyCredentials 
            = new NetworkCredential("user", "password", "domain");
    
        protected override HttpMessageHandler CreateHandler(CreateHttpClientArgs args)
        {
            return new WebRequestHandler
            {
                UseProxy = true,
                UseCookies = false,
                Proxy = new WebProxy(ProxyAddress, false, null, ProxyCredentials)
            };
        }
    }
    
    0 讨论(0)
提交回复
热议问题