Hola gente, hoy vengo a compartir algo interesante, seguramente a muchos les va a servir.
Lo traigo de mi blog OTRAPC
Seguramente muchas veces se preguntaron, al igual que yo, como hacer para obtener nuestra foto de perfil, portada, nombre, o algo de nuestro facebook (o quizás el de algun amigo). Hay varias formas de hacerlo, yo les voy a mostrar una forma fácil de hacerlo, mediante mi querida amiga Graph API de facebook.
En la documentación de desarrolladores de facebook podrán ver mas en detalle todo lo que se puede hacer.
Para obtener la información básica de un usuario mediante esta API solo tenemos que ir al navegador y poner https://graph.facebook.com/
, por ejemplo: https://graph.facebook.com/4 (Mark Zuckerberg)
El navegador nos va a devolver esto:
[color=#000000]
{
"id": "4",
"name": "Mark Zuckerberg",
"first_name": "Mark",
"last_name": "Zuckerberg",
"link": "https://www.facebook.com/zuck",
"username": "zuck",
"gender": "male",
"locale": "en_US"
}
Bien, así funciona... Pero de que nos sirve? Si yo quiero usar eso en mi querido amigo "VB"!
Entonces... Manos a la obra (?
Primero que nada abrimos un proyecto nuevo en vb.net, y le ponemos el nombre que queremos.
Yo me diseñé un form de la siguiente forma, ustedes pueden hacerlo como más les guste
Ahora vamos con el código!
Hace un tiempo publiqué como usar la clase WebClient (System.Net.WebClient) y como hacer un GET con ella, hoy nos va a hacer falta!
Antes de empezar, va a ser necesario que descarguen la siguiente librería JSON .NET, mas abajo explicaré para que nos va a servir.
Tendremos que agregar la referencia de la dll que descargamos del link de arriba, una vez hecho eso, empezamos con nuestro código!
Primero que nada, vamos a escribir los siguientes Imports que nos haran falta (para ordenarnos un poco y no escribir tanto)
Imports Newtonsoft.Json
Imports System.Net
Imports System.Text
En el evento Click del boton que pusimos para realizar la búsqueda vamos a realizar todo.
Primero declaramos nuestras variables:
Dim web As New WebClient, obj As Object
Dim link As String = "https://graph.facebook.com/" & txtID.Text
txtID es el Textbox donde pondremos la ID del usuario que queremos buscar.
Abrimos un Try (No se por qué la carita de emoción jajaja)
Try
obj = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(web.DownloadData(link)))
Catch ex As Exception
MsgBox("Error: " & ex.Message)
End Try
Bien, veamos que es lo que esta pasando ahí! (Si, no es mucho pero vale la pena explicar un poco). Para hacerlo mas facil vamos de adentro para afuera en los parentesis:
web.DownloadData(link)
Esto ya lo explique en otra publicación, nos devuelve un array de bytes con la respuesta del servidor.
Encoding.UTF8.GetString(web.DownloadData(link))
Convertimos de Byte() (La respuesta explicada anteriormente) a String, si lo vemos hasta aca vamos a tener lo mismo que nos devuelve el navegador como explique mas arriba.
JsonConvert.DeserializeObject(Encoding.UTF8.GetString(web.DownloadData(link)))
Acá llegamos a lo interesante! Estamos usando la librería que descargamos anteriormente.
Para qué nos sirve? Como vimos, la respuesta está en formato JSON y se nos haría un poco complicado tratar con estos datos en crudo en vb.net entonces esta librería nos permite adaptar este tipo de datos a uno mas fácil de manejar en .NET, lo que nos devuelve la función DeserializeObject es un objeto que podremos manejar a gusto y placer. Podríamos haber hecho una clase para manejar estos datos, pero no es el fin del post explicar eso, asique nos limitamos a usar un objeto, que en este caso lo declaramos como "obj".
Cómo hacemos para mostrar estos datos? De la siguiente forma:
lblID.Text = obj("id").value
lblName.Text = obj("name").value
lblUsername.Text = obj("username").value
lblIdioma.Text = obj("locale").value
Select Case obj("gender").value
Case "male" : lblSexo.Text = "Hombre"
Case "female" : lblSexo.Text = "Mujer"
End Select
Como podemos ver id, name, username, gender, locale son todos los nombres dentro del objeto json que responde el servidor, y la propiedad .value nos devuelve el valor que contiene el mismo.
Entonces
"name": "Mark Zuckerberg", en nuestro código va a ser obj("name", "Mark Zuckerber" lo vamos a obtener con obj("name".value
Haciendo esto, vamos a llevar todo lo que nos respondío el servidor a labels, textbox, o en donde lo necesitemos en .NET
El ejemplo de como nos quedo en el form:
Aca el código completo:
Imports Newtonsoft.Json
Imports System.Net
Imports System.Text
Public Class frmMain
Private Sub btnActualizarDatos_Click(sender As Object, e As EventArgs) Handles btnActualizarDatos.Click
Dim web As New WebClient, obj As Object
Dim link As String = "https://graph.facebook.com/" & txtID.Text
Try
obj = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(web.DownloadData(link)))
lblID.Text = obj("id").value
lblName.Text = obj("name").value
lblUsername.Text = obj("username").value
Select Case obj("gender").value
Case "male" : lblSexo.Text = "Hombre"
Case "female" : lblSexo.Text = "Mujer"
End Select
lblIdioma.Text = obj("locale").value
Catch ex As Exception
MsgBox("Error: " & ex.Message)
End Try
End Sub
End Class
Saludos a todo, espero que les sirva, cualquier duda me preguntan.
Suerte!

