Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharpNotesForProfessionals.pdf
Скачиваний:
65
Добавлен:
20.05.2023
Размер:
6.12 Mб
Скачать

Chapter 161: Import Google Contacts

Section 161.1: Requirements

To Import Google(Gmail) contacts in ASP.NET MVC application, first download "Google API setup" This will grant the following references:

using Google.Contacts; using Google.GData.Client;

using Google.GData.Contacts; using Google.GData.Extensions;

Add these to the relevant application.

Section 161.2: Source code in the controller

using Google.Contacts; using Google.GData.Client;

using Google.GData.Contacts; using Google.GData.Extensions; using Newtonsoft.Json;

using System;

using System.Collections.Generic; using System.IO;

using System.Linq; using System.Net; using System.Text; using System.Web; using System.Web.Mvc;

namespace GoogleContactImport.Controllers

{

public class HomeController : Controller

{

public ActionResult Index()

{

return View();

}

public ActionResult Import()

{

string clientId = ""; // here you need to add your google client id

string redirectUrl = "http://localhost:1713/Home/AddGoogleContacts"; // here your redirect action method NOTE: you need to configure same url in google console

Response.Redirect("https://accounts.google.com/o/oauth2/auth?redirect_uri=" + redirectUrl + "&amp&response_type=code&amp&client_id=" + clientId + "&amp&scope=https://www.google.com/m8/feeds/&approval_prompt=force&access_type=offline");

return View();

}

public ActionResult AddGoogleContacts()

{

string code = Request.QueryString["code"]; if (!string.IsNullOrEmpty(code))

{

var contacts = GetAccessToken().ToArray(); if (contacts.Length > 0)

{

GoalKicker.com – C# Notes for Professionals

761

// You will get all contacts here return View("Index",contacts);

}

else

{

return RedirectToAction("Index","Home");

}

}

else

{

return RedirectToAction("Index", "Home");

}

}

public List<GmailContacts> GetAccessToken()

{

string code = Request.QueryString["code"];

string google_client_id = ""; //your google client Id string google_client_sceret = ""; // your google secret key

string google_redirect_url = "http://localhost:1713/MyContact/AddGoogleContacts";

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://accounts.google.com/o/oauth2/token");

webRequest.Method = "POST";

string parameters = "code=" + code + "&client_id=" + google_client_id + "&client_secret=" + google_client_sceret + "&redirect_uri=" + google_redirect_url + "&grant_type=authorization_code";

byte[] byteArray = Encoding.UTF8.GetBytes(parameters); webRequest.ContentType = "application/x-www-form-urlencoded"; webRequest.ContentLength = byteArray.Length;

Stream postStream = webRequest.GetRequestStream();

// Add the post data to the web request postStream.Write(byteArray, 0, byteArray.Length); postStream.Close();

WebResponse response = webRequest.GetResponse(); postStream = response.GetResponseStream(); StreamReader reader = new StreamReader(postStream); string responseFromServer = reader.ReadToEnd(); GooglePlusAccessToken serStatus =

JsonConvert.DeserializeObject<GooglePlusAccessToken>(responseFromServer);

/*End*/

return GetContacts(serStatus);

}

public List<GmailContacts> GetContacts(GooglePlusAccessToken serStatus)

{

string google_client_id = ""; //client id string google_client_sceret = ""; //secret key

/*Get Google Contacts From Access Token and Refresh Token*/ // string refreshToken = serStatus.refresh_token;

string accessToken = serStatus.access_token;

string scopes = "https://www.google.com/m8/feeds/contacts/default/full/"; OAuth2Parameters oAuthparameters = new OAuth2Parameters()

{

ClientId = google_client_id, ClientSecret = google_client_sceret,

RedirectUri = "http://localhost:1713/Home/AddGoogleContacts", Scope = scopes,

AccessToken = accessToken,

// RefreshToken = refreshToken

};

GoalKicker.com – C# Notes for Professionals

762

RequestSettings settings = new RequestSettings("App Name", oAuthparameters); ContactsRequest cr = new ContactsRequest(settings);

ContactsQuery query = new ContactsQuery(ContactsQuery.CreateContactsUri("default")); query.NumberToRetrieve = 5000;

Feed<Contact> ContactList = cr.GetContacts();

List<GmailContacts> olist = new List<GmailContacts>(); foreach (Contact contact in ContactList.Entries)

{

foreach (EMail email in contact.Emails)

{

GmailContacts gc = new GmailContacts(); gc.EmailID = email.Address;

var a = contact.Name.FullName; olist.Add(gc);

}

}

return olist;

}

public class GmailContacts

{

public string EmailID

{

get { return _EmailID; } set { _EmailID = value; }

}

private string _EmailID;

}

public class GooglePlusAccessToken

{

public GooglePlusAccessToken() { }

public string access_token

{

get { return _access_token; } set { _access_token = value; }

}

private string _access_token;

public string token_type

{

get { return _token_type; } set { _token_type = value; }

}

private string _token_type;

public string expires_in

{

get { return _expires_in; } set { _expires_in = value; }

}

private string _expires_in;

}

}

}

GoalKicker.com – C# Notes for Professionals

763

Section 161.3: Source code in the view

The only action method you need to add is to add an action link present below

<a href='@Url.Action("Import", "Home")'>Import Google Contacts</a>

GoalKicker.com – C# Notes for Professionals

764