Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: YAcosta en Agosto 19, 2015, 03:37:07 pm
-
Quiero tener el nombre del pais en donde se ejecuta el aplicativo, esto con VB6.
La solución que me parece podría ser:
1.- Obtener la ip publica (aun no encuentro un método adecuado pero veo que seria usando una web de esas que sacan cualesmiIp, recorrerla y sacar el ip, ¿no habra una api? seguire buscando)
2.- Comparar con un diccionario la ip para saber a que pais corresponde, ese diccionario lo tendría en mi Bd.
3.- Mostrar el pais.
¿Sabrán de una mejor forma?
Gracias
-
Estimado YAcosta
Aquí algunos ejemplos de cómo invocar unos servicios web, para que te retorne valores reales necesitas de una cuenta.
http://api.hostip.info/country.php
US
http://api.hostip.info/get_html.php?ip=12.215.42.19
Country: UNITED STATES (US)
City: Sugar Grove, IL
IP: 12.215.42.19
http://api.hostip.info/get_html.php?ip=12.215.42.19&position=true
Country: UNITED STATES (US)
City: Sugar Grove, IL
Latitude: 41.7696
Longitude: -88.4588
IP: 12.215.42.19
http://api.hostip.info/get_json.php
{"country_name":"UNITED STATES","country_code":"US","city":"Sugar Grove, IL","ip":"12.215.42.19"}
http://api.hostip.info/?ip=12.215.42.19
[use the URL above for an example - XML too long to paste below]
Saludos desde algún lugar de Lima-Perú
-
hola saludos a los dos muy buena albertomi amigo Yvan y por que no tomas el pais de la configuracion regional de windows aunque seda el caso que luego suele estar mal es muy raro saludos
Option Explicit
Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long
Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" ( _
ByVal Locale As Long, _
ByVal LCType As Long, _
ByVal lpLCData As String, _
ByVal cchData As Long) As Long
Private Const LOCALE_SCOUNTRY As Long = &H6
Private Function Obtener_Simbolo(Valor As Long) As String
Dim Simbolo As String
Dim r1 As Long
Dim r2 As Long
Dim p As Integer
Dim Locale As Long
Locale = GetUserDefaultLCID()
r1 = GetLocaleInfo(Locale, Valor, vbNullString, 0)
Simbolo = String$(r1, 0)
r2 = GetLocaleInfo(Locale, Valor, Simbolo, r1)
p = InStr(Simbolo, Chr$(0))
If p > 0 Then
Obtener_Simbolo = Left$(Simbolo, p - 1)
End If
End Function
Private Sub Form_Load()
MsgBox Obtener_Simbolo(LOCALE_SCOUNTRY), 64, " El país "
End Sub
-
Albertomi.
Gracias por la respuesta, es muy interesante aunque tendría que investigar como usar tu metodo, no soy muy ducho en ello.
aedEric
Tu método me queda bastante practico ademas de que el código esta servido, puede haber un rango de fallo en determinar el pais por lo que comentas pero creo que debe ser un porcentaje de población muy bajo que vale la pena usar este método.
-
Const LOCALE_USER_DEFAULT = &H400
Const LOCALE_SENGCOUNTRY = &H1002 ' English name of country
Const LOCALE_SENGLANGUAGE = &H1001 ' English name of language
Const LOCALE_SNATIVELANGNAME = &H4 ' native name of language
Const LOCALE_SNATIVECTRYNAME = &H8 ' native name of country
Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Private Sub Form_Load()
'KPD-Team 2001
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
MsgBox "You live in " & GetInfo(LOCALE_SENGCOUNTRY) & " (" & GetInfo(LOCALE_SNATIVECTRYNAME) & ")," & vbCrLf & "and you speak " & GetInfo(LOCALE_SENGLANGUAGE) & " (" & GetInfo(LOCALE_SNATIVELANGNAME) & ").", vbInformation
End Sub
Public Function GetInfo(ByVal lInfo As Long) As String
Dim Buffer As String, Ret As String
Buffer = String$(256, 0)
Ret = GetLocaleInfo(LOCALE_USER_DEFAULT, lInfo, Buffer, Len(Buffer))
If Ret > 0 Then
GetInfo = Left$(Buffer, Ret - 1)
Else
GetInfo = ""
End If
End Function
-
Option Explicit
' Add Microsoft Internet Transfer Control
Dim pubIPA As String, pos1 As Long, pos2 As Long, str As String
Private Sub Form_Load()
str = Inet1.OpenURL("http://api.hostip.info/get_html.php?ip=", icString)
'pos1 = InStr(str, "var ip =")
'pos1 = InStr(pos1 + 1, str, "'", vbTextCompare) + 1
'pos2 = InStr(pos1 + 1, str, "'", vbTextCompare)
'pubIPA = Mid$(str, pos1, pos2 - pos1)
'MsgBox pubIPA, vbInformation
MsgBox str
Unload Me
End Sub
Este funciona mejor creo me devuelve mi ip real de internet pero no se por que no me reconoces el nombre de mi pais
-
Estimado YAcosta
En esta URL se dispone de una IP un poco más limpia
http://www.une.com.co/miip/ (http://www.une.com.co/miip/)
Por otro lado, si dispones de un servidor y para que no tengas dependencia de servicios de terceros lo mejor es que implementes tu propio servicio de CUAL ES MI IP. Aquí te dejo el código fuente tanto en ASP como en PHP 5 que como veras es sumamente simple y de mucha utilidad.
En ASP
<%= Request.ServerVariables("REMOTE_ADDR") %>
En PHP5
<?
echo $_SERVER["REMOTE_ADDR"];
?>
Saludos desde algún lugar de Lima - Perú
-
Es lo primero que se me vino a la mente cuando te lei "esta url tiene un IP mas limpia" y efectivamente mejor la alojo en mi host sin depender de nadie.
Aunque ya lo tengo resuelto igual me gustaria mucho saber como hacerlo consultando la ip, voy a crear la pagina, y luego vere como leer esa pagina sin cargarla desde vb6... ese detallito no lo resuelvo.
-
Estimado YAcosta
En esta URL puedes encontrar los distintos rangos de IP asignado a cada país, lo pasas a base de datos y con ello puedes armar tu propio servicio de localización por IP publica
http://www.nirsoft.net/countryip/ (http://www.nirsoft.net/countryip/)
Saludos desde algún lugar de Lima-Perú