Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Java2Python : Google Maps API / CellID

2 réponses
Avatar
kael
Bonsoir,

Depuis quelques semaines, Google Maps Mobile utilise un système de
géolocalisation appelé "My Location", basé sur le CellID du mobile.

Apparemment, il existe une API cachée qui permet d'utiliser le CellID
(sans installer le logiciel) comme paramètre de requête HTTP POST avec
"http://www.google.com/glm/mmap" comme URL de base.

J'ai trouvé deux morceaux de code [1][2] qui permettent d'utiliser
l'API, mais ils sont écrits en Java. L'équivalent en Python utiliserait
urllib, mais il y a une partie du script que je ne saisis pas. J'ai
essayé d'utiliser le programme Java2Python, mais sans succès.

Est-ce que quelqu'un saurait svp convertir le morceau de script en Python ?

Merci.

[1]
<http://davanum.wordpress.com/2007/12/01/android-much-better-geo-location-from-just-cellidlac/>
[2] <http://www.anddev.org/viewtopic.php?p=777>

--
kael

2 réponses

Avatar
TestMan
Bonsoir,

Depuis quelques semaines, Google Maps Mobile utilise un système de
géolocalisation appelé "My Location", basé sur le CellID du mobile.

Apparemment, il existe une API cachée qui permet d'utiliser le CellID
(sans installer le logiciel) comme paramètre de requête HTTP POST avec
"http://www.google.com/glm/mmap" comme URL de base.

J'ai trouvé deux morceaux de code [1][2] qui permettent d'utiliser
l'API, mais ils sont écrits en Java. L'équivalent en Python utiliserait
urllib, mais il y a une partie du script que je ne saisis pas. J'ai
essayé d'utiliser le programme Java2Python, mais sans succès.

Est-ce que quelqu'un saurait svp convertir le morceau de script en Python ?

Merci.


Bonjour,

Avez-vous testé JPE pour appeler directement votre code Java depuis Python ?

A+
TM
(Envoi croisé supprimé, parce que "c'est pas bien" :P )

Avatar
kael
TestMan wrote:

Depuis quelques semaines, Google Maps Mobile utilise un système de
géolocalisation appelé "My Location", basé sur le CellID du mobile.

Apparemment, il existe une API cachée qui permet d'utiliser le CellID
(sans installer le logiciel) comme paramètre de requête HTTP POST avec
"http://www.google.com/glm/mmap" comme URL de base.

J'ai trouvé deux morceaux de code [1][2] qui permettent d'utiliser
l'API, mais ils sont écrits en Java. L'équivalent en Python utiliserait
urllib, mais il y a une partie du script que je ne saisis pas. J'ai
essayé d'utiliser le programme Java2Python, mais sans succès.

Est-ce que quelqu'un saurait svp convertir le morceau de script en Python ?


Avez-vous testé JPE pour appeler directement votre code Java depuis Python ?


Quelqu'un a publié la version Python du script :

<http://groups.google.com/group/Google-Maps-for-mobile/msg/116f0111962299ca>

#Begin
#!/usr/local/bin/python

import httplib
from struct import *

pd = chr(0)+chr(0x15) # Function Code?
pd += chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0) #Session ID?
pd += chr(0)+chr(0x02)+chr(0x62)+chr(0x72) # Contry Code
pd += chr(0)+chr(0x12)+chr(0x53)+chr(0x6f)+chr(0x6e) # User Agent
pd += chr(0x79)+chr(0x5f)+chr(0x45)+chr(0x72)+chr(0x69) # User Agent
pd += chr(0x63)+chr(0x73)+chr(0x73)+chr(0x6f)+chr(0x6e) # User Agent
pd += chr(0x2d)+chr(0x4b)+chr(0x37)+chr(0x35)+chr(0x30) # User Agent
pd += chr(0)+chr(0x05)+chr(0x31)+chr(0x2e)+chr(0x33)+chr(0x2e)+chr(0x31)
# version
pd += chr(0)+chr(0x03)+chr(0x57)+chr(0x65)+chr(0x62) # "Web"
pd += chr(0x1b) # Op Code?
pd += chr(0)+chr(0)+chr(0x00)+chr(0x00) # MNC
pd += chr(0)+chr(0)+chr(0x00)+chr(0x00) # MCC
pd += chr(0)+chr(0)+chr(0)+chr(0x03) # ??
pd += chr(0)+chr(0) # ??
pd += chr(0)+chr(0)+chr(0x00)+chr(0x00) # CID - replace 0x00 with the
hex value from CID
pd += chr(0)+chr(0)+chr(0x00)+chr(0x00) # LAC - replace 0x00 with the
hex value from LAC
pd += chr(0)+chr(0)+chr(0)+chr(0) # ??
pd += chr(0)+chr(0)+chr(0)+chr(0) # ??
pd += chr(0)+chr(0)+chr(0)+chr(0) # ??
pd += chr(0)+chr(0)+chr(0)+chr(0) # ??

headers = {"Content-type": "application/binary"}
conn = httplib.HTTPConnection("www.google.com")
conn.request("POST", "/glm/mmap", pd, headers)
response = conn.getresponse()
print response.status, response.reason
data = response.read()
print data
print "Lat / Lon"
print unpack('>l',data[7:11])[0]/1000000.0
print unpack('>l',data[11:15])[0]/1000000.0
conn.close()
# End Python 2.5

qui certes me retourne (avec CID : 20442 / LAC : 6015) :

----
Traceback (most recent call last):
File "cellid.py", line 21, in <module>
pd += chr(0)+chr(0)+chr(0x4e4a)+chr(0x4e4a)
ValueError: chr() arg not in range(256)
----

Mais j'avance.

(Envoi croisé supprimé, parce que "c'est pas bien" :P )


Etant donné que je cherchais l'aide d'un programmeur polyglotte, c'était
plutôt pertinent. M'enfin. :P

--
kael