J'ai un script python, qui génère des fichiers kml. Maintenant, je veux télécharger ce fichier kml dans le script (pas par main) à la section "mes cartes" de google maps. Est-ce que quelqu'un a un python ou un autre script/code pour le faire?comment puis-je télécharger un fichier kml avec un script sur google maps?
Répondre
Résumé: Vous ne pouvez pas attendre que issue 2590 soit corrigé, ce qui peut prendre un certain temps car Google a closed this issue as WontFix. Il existe des solutions de contournement que vous pouvez essayer d'atteindre le même résultat final, mais en l'état, vous ne pouvez pas simplement télécharger un fichier KML à l'aide de l'API de données Google Maps.
Version longue:
Je
ne pas
n'a pas de code Python pour ce faire, mais le Google Maps Data API vous permet de le faire avec une série de requêtes HTTP. Voir Uploading KML dans la section Protocole HTTP du Developers Guide pour la documentation sur la façon de procéder. Donc, une solution Python possible serait d'utiliser quelque chose comme httplib dans la bibliothèque standard pour faire les requêtes HTTP appropriées pour vous. Après plusieurs modifications et vos commentaires dans les commentaires, voici un script qui prend un nom d'utilisateur et un mot de passe Google via la ligne de commande (attention à l'utilisation!) Pour obtenir la variable authorization_token
en faisant ClientLogin authentication request. Avec un nom d'utilisateur et un mot de passe valides, le jeton d'authentification peut être utilisé dans l'en-tête Authorization
pour l'envoi des données KML à l'API de données Maps.
#!/usr/bin/env python
import httplib
import optparse
import sys
import urllib
class GoogleMaps(object):
source = "daybarr.com-kmluploader-0.1"
def __init__(self, email, passwd):
self.email = email
self.passwd = passwd
self._conn = None
self._auth_token = None
def _get_connection(self):
if not self._auth_token:
conn = httplib.HTTPSConnection("www.google.com")
params = urllib.urlencode({
"accountType": "HOSTED_OR_GOOGLE",
"Email": self.email,
"Passwd": self.passwd,
"service": "local",
"source": self.source,
})
headers = {
"Content-type": "application/x-www-form-urlencoded",
"Accept": "text/plain",
}
conn.request("POST", "/accounts/ClientLogin", params, headers)
response = conn.getresponse()
if response.status != 200:
raise Exception("Failed to login: %s %s" % (
response.status,
response.reason))
body = response.read()
for line in body.splitlines():
if line.startswith("Auth="):
self._auth_token = line[5:]
break
if not self._auth_token:
raise Exception("Cannot find auth token in response %s" % body)
if not self._conn:
self._conn = httplib.HTTPConnection("maps.google.com")
return self._conn
connection = property(_get_connection)
def upload(self, kml_data):
conn = self.connection
headers = {
"GData-Version": "2.0",
"Authorization": 'GoogleLogin auth=%s' % (self._auth_token,),
"Content-Type": "application/vnd.google-earth.kml+xml",
}
conn.request("POST", "/maps/feeds/maps/default/full", kml_data, headers)
response = conn.getresponse()
if response.status != 200:
raise Exception("Failed to upload kml: %s %s" % (
response.status,
response.reason))
return response.read()
if __name__ == "__main__":
parser = optparse.OptionParser()
parser.add_option("-e", "--email", help="Email address for login")
parser.add_option("-p", "--passwd", help="Password for login")
options, args = parser.parse_args()
if not (options.email and options.passwd):
parser.error("email and passwd required")
if args:
kml_file = open(args[0], "r")
else:
kml_file = sys.stdin
maps = GoogleMaps(options.email, options.passwd)
print maps.upload(kml_file.read())
Malheureusement, même en utilisant les informations de connexion valides pour obtenir une autorisation valide jeton et en utilisant un fichier KML valide contenant exactement l'exemple comme indiqué dans la documentation, l'API répond au poste KML avec un 400 Bad Request
. Apparemment, il s'agit d'un problème connu (2590 signalé le 22 juillet 2010). Veuillez donc voter et commenter si vous souhaitez que Google corrige.
En attendant, sans ce bogue fixe, vous pouvez essayer
- Créer la carte sans télécharger KML, puis télécharger KML propose, le cas échéant, comme le suggère comment #9 on the issue de Google, quand ils ont confirmé que le bug existe.
- uploading XML ou uploading CSV au lieu de KML si ces méthodes prennent en charge ce que vous avez besoin pour faire
- jongler avec le format de vos données KML. This post dans le groupe Google pour l'API suggère que cela pourrait aider, mais il semble compliqué.
Bonne chance
- 1. Android: Obtenir un fichier KML non valide de google maps
- 2. Dynamic kml google maps
- 3. Utilisation de KML/KMZ sur google maps
- 4. KML to google maps
- 5. Google Maps Data API - Télécharger le fichier KML/Remplacer le contenu de la carte
- 6. Télécharger un fichier sur google calendar
- 7. google maps exporter les directions au fichier kml - java geogoogle
- 8. Chargement d'un fichier .kml local à l'aide de google maps?
- 9. OpenLayers Google Maps Projection Problème w/KML
- 10. Comment supprimer un marqueur sur Google Maps?
- 11. Blackberry: Passage du fichier KML à Google Maps
- 12. Niveaux de zoom dans les fichiers kml sur google maps
- 13. Télécharger un fichier via un script python
- 14. API de données Google Maps - Téléchargement de KML = BAD REQUEST
- 15. CSS KML Calques Cursor - Google Maps API v3
- 16. Télécharger un fichier avec VBS
- 17. Télécharger un fichier avec reste
- 18. Télécharger un fichier avec php sur un autre serveur php
- 19. script php pour google maps
- 20. Google maps rechercher un emplacement
- 21. Obtenir "<kml: ..." partout, mettre à jour un fichier Kml
- 22. Erreur 403 télécharger un fichier Google Docs avec Python
- 23. Comment préparer un fichier KML pour Android Emulator Control?
- 24. Comment télécharger un fichier avec Catalyst?
- 25. Obtenir des cartes pour accepter un fichier KML généré dynamiquement?
- 26. Comment télécharger un fichier sur 2 Mo
- 27. Télécharger un fichier avec Adobe AIR
- 28. Télécharger un fichier avec JSF?
- 29. jquery télécharger un fichier sur rappel
- 30. Comment afficher un message dans Google Maps?
désolé, mais je reçois un 400 Bad Request demande Bad et je ne sais pas comment débugger. –
@ Jörg Beyer Strange. Vous obtenez normalement un 400 seulement si la demande n'est pas une requête HTTP valide pour une raison quelconque. J'ai mis à jour ma réponse, s'il vous plaît donnez le script un aller, devrait être exécutable tel quel. – Day
Je reçois toujours une "400 Bad Request". Je suis confiant, que l'authentification est OK, parce que je reçois un 401 quand je modifie mon jeton fraîchement généré. –