Imports System.Net Imports System.IO Imports System.Threading Imports System.Web.Script.Serialization 'Reference needed! Class FacebookAPI Private URL As String = "http://graph.facebook.com/" Public Event Completed(ByVal sender As Object, ByVal e As FacebookEventArgs) Public Event [Error](ByVal sender As Object, ByVal ex As Exception) Public Sub FetchData(ByVal ID As String) Try Using WC As New WebClient WC.DownloadStringAsync(New Uri(URL & ID & "?fields=id,username,name,first_name,last_name,gender,picture,cover")) AddHandler WC.DownloadStringCompleted, AddressOf DeserializeData End Using Catch ex As Exception RaiseEvent Error(Me, ex) End Try End Sub Private Sub DeserializeData(sender As Object, e As DownloadStringCompletedEventArgs) Try If e.Cancelled Then Return If e.Error IsNot Nothing Then Return Dim t As New Thread(Sub() Dim args As New FacebookEventArgs For Each node As KeyValuePair(Of String, Object) In New JavaScriptSerializer().Deserialize(Of Dictionary(Of String, Object))(e.Result) Dim str As String = node.Value.ToString Select Case node.Key Case "id" : args.ID = str Case "username" : args.Username = str Case "name" : args.Name = str Case "first_name" : args.FirstName = str Case "last_name" : args.LastName = str Case "gender" : args.Gender = str Case "picture" Dim picJSON As Object = Nothing Dim picURL As Object = Nothing If DirectCast(node.Value, Dictionary(Of String, Object)).TryGetValue("data", picJSON) Then If DirectCast(picJSON, Dictionary(Of String, Object)).TryGetValue("url", picURL) Then args.PictureURL = picURL.ToString args.Picture = ConvertImage(picURL.ToString) End If End If Case "cover" Dim coverDict As Dictionary(Of String, Object) = DirectCast(node.Value, Dictionary(Of String, Object)) If coverDict.ContainsKey("offset_y") Then args.CoverOffset = Integer.Parse(coverDict("offset_y").ToString) If coverDict.ContainsKey("source") Then args.CoverURL = coverDict("source").ToString args.Cover = ConvertImage("https://fbcdn-sphotos-g-a.akamaihd.net/hphotos-ak-ash3/" & args.CoverURL.Substring(55, args.CoverURL.Length - 55).ToString) End If End Select Next RaiseEvent Completed(Me, args) End Sub) t.Start() Catch ex As Exception RaiseEvent Error(Me, ex) End Try End Sub Private Function ConvertImage(ByVal URL As String) As Image Try Using WC As New WebClient() Using MS As New MemoryStream(WC.DownloadData(URL)) Using B As New Bitmap(MS) Return B End Using End Using End Using Catch ex As Exception RaiseEvent Error(Me, ex) Return Nothing End Try End Function Public Class FacebookEventArgs Inherits EventArgs Public ID As String Public Username As String Public Name As String Public FirstName As String Public LastName As String Public Gender As String Public PictureURL As String Public CoverURL As String Public CoverOffset As Integer Public Picture As Image Public Cover As Image End Class End Class