[Google+ Portable SDK .NET] Buscar amigos (VI)

En la entrega anterior vimos cómo recuperar los amigos incluidos en los círculos, en esta ocasión vamos a buscar nuevos amigos usando la petición “SEARCH” del recurso “PEOPLE”, realizando una petición GET a la url

https://www.googleapis.com/plus/v1/people/

en la que los posibles parámetros son:

– access_token: token de acceso recuperado en la 3ª entrega.

– maxResult: (opcional) Número de amigos a recuperar por página. Su valor debe estar en el rango 1-50.

– pageToken: (opcional) este campo permite acceder a la siguiente pagina de resultados. Cuando obtenemos la primera página, unos de los campos que recuperamos en el “nextPageToken“, el cual nos permitirá acceder a la siguiente página.

query: especifica la cadena de consulta para la búsqueda.

language: (opcional) especifica el idioma preferido en el que realizar la búsqueda.

– fields: (opcional) permite configurar los campos que queremos recuperar.

etag,items,kind,nextPageToken,selfLink,title,totalItems

Vamos a recordar la hoja de ruta para esta serie de artículos

1. Crear aplicación Google +

2. Obtener código de autorización

3. Obtener Token de acceso

4. Obtener información del perfil

5. Amigos en los círculos

6. Buscar Amigos (actual)

7. Obtener las publicaciones del muro

En el método “BuscarUsuariosAsync” de la clase “smpGooglePlusApi” se ha incluido toda la lógica necesaria para realizar una búsqueda de usuarios Google Plus.

        public async Task<BusquedaUsuarios> BuscarUsuariosAsync(string token,string cadenaBusqueda,string tokenPagina="",int numResultadosPagina=10,string campos="")
        {
            BusquedaUsuarios resultadoBusqueda = new BusquedaUsuarios();
            StringBuilder cadUrl = new StringBuilder();
            if (string.IsNullOrEmpty(token))
                throw new ArgumentException("token");

            if (string.IsNullOrEmpty(cadenaBusqueda))
                throw new ArgumentException("cadenaBusqueda");

            if (numResultadosPagina>50)
                throw new ArgumentException("numResultadosPagina maximo 50");

            HttpClient cliente = new HttpClient();

            cadUrl.AppendFormat("{0}?access_token={1}&query={2}&maxResults={3}", Declaraciones.URL_PEOPLE_SEARCH, token.UrlEncode(), cadenaBusqueda.UrlEncode(), numResultadosPagina.ToString().UrlEncode());

            if (!string.IsNullOrEmpty(tokenPagina))
                cadUrl.AppendFormat("&pageToken={0}", tokenPagina.UrlEncode());

            if (!string.IsNullOrEmpty(campos))
                cadUrl.AppendFormat("&fields={0}", campos.UrlEncode());

            HttpResponseMessage respuestaHttp = await cliente.SendAsync(new HttpRequestMessage(HttpMethod.Get, cadUrl.ToString())).ConfigureAwait(false);
            RespuestaGooglePlus respuestaGooglePlus = await UtilidadesGenerales.ProcesarRespuestaAsync(respuestaHttp);

            if (respuestaGooglePlus.Estado == EstadoGooglePlus.Correcto)
            {
                if (!string.IsNullOrEmpty(respuestaGooglePlus.ContenidoRespuesta))
                {
                    JObject resultado = JObject.Parse(respuestaGooglePlus.ContenidoRespuesta);
                    resultadoBusqueda.nextPageToken = (resultado["nextPageToken"] != null ? resultado["nextPageToken"].ToString() : string.Empty);
                    resultadoBusqueda.etag = (resultado["etag"] != null ? resultado["etag"].ToString() : string.Empty);
                    resultadoBusqueda.title = (resultado["title"] != null ? resultado["title"].ToString() : string.Empty);
                    resultadoBusqueda.kind = (resultado["kind"] != null ? resultado["kind"].ToString() : string.Empty);

                    int totalReg = 0;
                    if (resultado["totalItems"] != null)
                    {
                        if (int.TryParse(resultado["totalItems"].ToString(), out totalReg))
                        {
                            resultadoBusqueda.totalItems = totalReg;
                        }
                    }
                    if (resultado["items"] != null)
                    {
                        JArray arrayResultados = JArray.Parse(resultado["items"].ToString());
                        if (arrayResultados != null)
                        {
                            foreach (JObject item in arrayResultados)
                            {
                                InfoPerfil reg = ParsearPerfilUsuario(item);
                                resultadoBusqueda.items.Add(reg);
                            }
                        }
                    }
                }
            }

            return resultadoBusqueda;
        }

en el cual realizamos las siguiente operaciones:

1. Comprobamos que los valores de entrada son correctos: token, cadena a buscar, numRegistrosPagina…

2. Creamos la url según lo explicado al principio de este artículo.

3. Utilizamos la librería Http Client para hacer una petición HTTP GET a la url anterior.

4. Si la respuesta ha sido correcta, usamos la librería json.net para parsear la cadena JSON (de la respuesta HTTP) a un objeto del tipo  “BusquedaUsuarios“. Si recordamos el código de la entrega anterior, este proceso es igual ya que las entidades recuperadas son del recurso people y serán parseadas a entidades del tipo “InfoPerfil“.

En la siguiente imagen se puede ver la evolución de nuestra demo para WPF.

smpgoogleplus_parte6_buscar_usuarios_demowpf

En el siguiente enlace podéis descargar el código fuente.