Get JSON object
(Requires Newtonsoft Nuget package)
Shared Function funGetJSON(sURL As String) As JObject
Dim request As HttpWebRequest
Dim response As HttpWebResponse = Nothing
Dim reader As StreamReader
request = DirectCast(WebRequest.Create(sURL), HttpWebRequest)
response = DirectCast(request.GetResponse(), HttpWebResponse)
reader = New StreamReader(response.GetResponseStream())
Dim rawresp As String = ""
rawresp = reader.ReadToEnd()
'Try
'Console.WriteLine(rawresp)
Dim jsonObject As JObject = JObject.Parse(rawresp)
'Dim jsonArray As JArray = jsonObject(rawresp).ToArray
Return jsonObject
Console.WriteLine(jsonObject("ip").ToString)
'Dim jss As New JavaScriptSerializer()
'Dim sb As StringBuilder = New StringBuilder()
''Serialize user into JSON format
'jss.Serialize(rawresp, sb)
'Dim dict As Dictionary(Of String, String) = jss.Deserialize(Of Dictionary(Of String, String))(sb)
'Return dict
''Catch ex As Exception
''Console.WriteLine(ex.Message.ToString)
'' End Try
'Return Nothing
'textbox2.text = JObject.Parse(rawresp)("id")
End Function
Get specific JSON stanzas for entries and return a Dictionary
Shared Function GetIPinfo(sIP As String, Optional sFilter As String = "ip;continent_name;country_code;country_name;region_code;region_name;city;zip;location.country_flag", Optional bDumpAll As Boolean = False) As Dictionary(Of String, String)
Dim ip As IPAddress
Dim is_valid As Boolean = IPAddress.TryParse(sIP, ip)
Dim dReturn As New Dictionary(Of String, String)
If Not is_valid Then Return Nothing
Dim dict As JObject
dict = funGetJSON("http://api.ipstack.com/" & sIP & "?access_key=f89e5c9e70024d6b959f151c09b4d854")
'Dim lvsubitem As ListViewItem.ListViewSubItem = lvItem.SubItems.Add(dict("country_name"))
If bDumpAll Then
Console.WriteLine(dict)
Return Nothing
End If
Dim jArrayLocation As New JObject
For Each sField As String In Split(sFilter, ";")
If InStr(sField, ".") > 0 Then
jArrayLocation = dict(Split(sField, ".")(0))
dReturn.Add(Split(sField, ".")(1), jArrayLocation(Split(sField, ".")(1)))
Else
dReturn.Add(sField, dict(sField))
End If
Next
'jArrayLocation = dict("location")
'If bDumpAll Then Console.WriteLine(dict)
'
Return dReturn ' dict("country_name")
'If Len(dict("country_code")) > 0 Then
' 'images.Images.Add(dict("country_code"), LoadImage(dict(("country_code"))))
' 'listIPs.Columns(0).DisplayIndex = 2
' 'as,do,in,is,me,to
' 'If dict("country_code") = "AS" Or dict("country_code") = "DO" Or dict("country_code") = "IN" Or dict("country_code") = "IS" Or dict("country_code") = "ME" Or dict("country_code") = "TO" Then
End Function
Example, even with a JSON array
If Len(txtIP.Text) > 0 Then
'if valid_IP(txtIP.text) then
Dim ip As IPAddress
Dim is_valid As Boolean = IPAddress.TryParse(txtIP.Text, ip)
If Not is_valid Then
MsgBox("Invalid IP")
Return
End If
ClearAll()
Dim dict As JObject
dict = funGetJSON("http://api.ipstack.com/" & txtIP.Text & "?access_key=f89e5c9e70024d6b959f151c09b4d854")
Application.DoEvents()
lblContinent.Text = dict("continent_name")
lblCountry.Text = dict("country_name")
lblRegionCode.Text = dict("region_code")
lblRegionName.Text = dict("region_name")
lblCity.Text = dict("city")
lblZip.Text = dict("zip")
lblLatitude.Text = dict("latitude")
lblLongitude.Text = dict("longitude")
Dim jArrayLocation As New JObject
jArrayLocation = dict("location")
lblGeoName.Text = jArrayLocation("geoname_id")
lblCapital.Text = jArrayLocation("capital")
lblIsEU.Text = jArrayLocation("is_eu")
'WebBrowser1.Url = dict("country_flag")
WebBrowser1.Navigate(New Uri(jArrayLocation("country_flag")))
For Each oLanguage As JObject In jArrayLocation("languages")
Dim lvItem As ListViewItem
lvItem = lstlanguages.Items.Add(oLanguage("code"))
lvItem.SubItems.Add(oLanguage("name"))
lvItem.SubItems.Add(oLanguage("native"))
Next
jArrayLocation = dict("time_zone")
lblTimeZone.Text = jArrayLocation("id")
lblTimeZoneCode.Text = jArrayLocation("code")
lblDST.Text = jArrayLocation("is_daylight_saving")
jArrayLocation = dict("connection")
lblAsn.Text = jArrayLocation("asn")
lblISP.Text = jArrayLocation("isp")
'end if
End If
End Sub