Étapes de mise en œuvre
1. Interface de requête
Il y a pas mal d'interfaces de ce type sur le site Web. L'auteur a trouvé directement l'interface des cartes Baidu pour le faire. L'API appelée est un service de géocodage dans l'API de géocodage.
Exemple de demande: Geocode Query of Baidu Building à Pékin
http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderOption&output=json&address=百度大厦&city=北京市
Cela nécessite un paramètre AK, qui est une chaîne générée par l'utilisateur lors de la création d'une application et doit être appelée lors de la demande de données.
[Avis]
L'application créée est le type côté serveur
Il existe deux méthodes de vérification à choisir lors de la création d'une application. Vous pouvez choisir d'utiliser la vérification de la liste blanche IP ou d'utiliser SN pour la vérification. La différence entre les deux est que l'IP doit définir l'adresse IP lorsque vous le demandez à l'avance. Si vous ne souhaitez pas définir l'adresse IP morte à l'avance, vous pouvez également choisir la vérification SN. Il s'agit de la méthode de vérification utilisant MD5 comme algorithme de chiffrement.
L'auteur a choisi SN pour la vérification au début, mais a appelé la crypto pour générer des signatures MD5 et a continué à la vérifier. Il ne pouvait qu'utiliser la liste blanche IP comme vérification à la place.
2. Requête Nodejs
Avec une interface pour l'appel, nous pouvons écrire un petit script pour demander des données. Nous avons besoin de trois dépendances, à savoir Express, SuperAgent et EventProxy
Express est une application Web légère
SuperAgent est une bibliothèque qui est souvent utilisée par les Crawlers, qui peuvent simuler diverses demandes.
EventProxy est un contrôleur simultané
* Requête simple
Tout d'abord, écrivons une demande simple pour détecter si l'emplacement géographique peut être obtenu:
app.get ('/ one', function (req, res, next) {var sk = 'yoursk' // crée le sk, l'adress = 'beijing' sk}) .end (function (err, sres) {if (err) {console.log ('err:', err); return;} res.send (sres.text);})}) Ensuite, ouvrez le navigateur pour visiter: http://localhost:8888/one
{Status: 0, Résultat: {Emplacement: {LNG: 116.39564503787867, Lat: 39.92998577808024}, précision: 0, confiance: 10, niveau: "ville"}Lorsque vous pouvez voir ces informations, cela signifie que l'interface réussit. Si le statut n'est pas 0, veuillez vous référer à la table d'état du code de retour
Pourquoi devons-nous ouvrir un serveur pour le demander? Parce que l'application que nous avons créée est un serveur, nous devons créer un serveur pour le demander.
* Requête par lots
D'accord, une ville peut être interrogée. Ensuite, nous effectuerons l'interrogation de plusieurs villes. Nous utilisons EventProxy pour le contrôle de la concurrence. Vous pouvez le considérer comme un compteur. Vous pouvez le commander pour écouter un événement et exécuter la fonction correspondante n fois.
Le code clé est le suivant:
app.get ('/ beaucoup', fonction (req, res, next) {var sk = 'yourkk', adresses = ['beijing', 'shenzhen', 'guangzhou', 'puning']; ep.after ('getLocation', adresses.length, function (locations) {res.ssend (locuments);}) adress. superagent.get ('http://api.map.baidu.com/geocoder/v2/') .Query ({adresse: e}) .Query ({output: 'JSON'}) .Query ({ak: sk}) .end (function (err, sres) {ep.emit ('getLocation', {adresse: e, res: text}) })})}) Ouvrez le navigateur pour accéder: http://localhost:8888/many
[{Adresse: "Beijing", res: "{" Status ": 0," Result ": {" Location ": {" lng ": 116.39564503787867," Lat ": 39.92998577808024}," Precise ": 0," Confidence ":" Niveau ":" City "}}"}, {}, {adress ": 10," Niveau ":" City "}}"}, {}, {}, {}, {}. "Shenzhen", res: "{" status ": 0," résultat ": {" localisation ": {" lng ": 114.0259736573215," lat ": 22.546053546205248}," précis ": 0," confiance ":" niveau ":" City "}}" "", {CREST: " City ", res:" {"status": 0, "result": {"emplacement": {"lng": 113.30764967515182, "lat": 23.12004910207623}, "précis": 0, "confiance": 12, "niveau": "City"}} "}, {adresse:" Puning City ", res:}"}, {Adresse: "Puning City", Res: Res: Res: Res: Res: Res: Res: Res: Res: Res: Res: Res: Res: Res: Res: Res: Res: Res: Res: Res: Res: Res: Res: "{" Status ": 0," Result ": {" Location ": {" LNG ": 116.07816590835329," Lat ": 23.28895358314155}," Precise ": 0," Confidence ": 14," Level ":" District "}}"}]]D'accord, il n'y a aucun problème avec la requête par lots. Ensuite, nous utiliserons NodeJS pour lire le fichier Excel lancé par l'ingénieur d'arrière-plan.
3. Nodejs Lire et écrire des fichiers
Cette fois, nous avons besoin de deux autres dépendances, une est un module FS intégré pour NodeJS, et l'un est la bibliothèque Node-Xlsx pour lire et écrire Excel
Jetez le fichier Excel de la ville au répertoire racine et démarrez un autre script xls2js.js:
var xlsx = require ('node-xlsx'), fs = require ('fs'); var file_path = './Query_result.xlsx'itar file_data = xlsx.parse (file_path);Appelez ensuite Fs.WriteFile pour écrire la ville extraite au code suivant:
File_data.ForEach (fonction (feuille, index) {var sheetname = sheet.name // Nom de la table, sheetData = sheet.data // data de table, sheethead = sheetdata [0] // La première ligne est généralement une en-tête, mais pas une certaine, sheetbody = sheetdata. file_data_json, cities_name = []; fs.writeFile (file_path_towrite, file_data_json, fonction (err) {if (err) console.log ('write data failli', err); else console.log ('write file réussi');})})Ouvrez le fichier statique / adresse.json et vous verrez le texte dans le format suivant:
{"Cities_name": ["Beijing, Beijing", "Pékin, district municipal", "Tianjin, Tianjin"]}4. Étapes complètes 2 et 3 pour réaliser une interface qui lit les fichiers de la ville locale, les lots de requêtes et écrit de nouveaux fichiers
OK, avec ce fichier, nous pouvons le relire et ensuite effectuer une requête par lots:
app.get ('/', function (req, res, next) {var sk = 'ymingk', adresses = [], file_path = './static/address.json', file_path_towrite = './Static/geocoder " Lire le fichier ', ERR); [E ["Location '] [" lng'], e ["emplacement"] ["lat ']];}) fs.writefile (file_path_towrite, json.stringify (file_data), fonction (err) {if (err) console.log (" écriture de données ", err); else console.log (" get les données et écriture avec succès "); })}) adresses.ForEach (function (e, i) {superagent.get ('http://api.map.baidu.com/geocoder/v2/') .query ({adresse: e.split (','). join ('')}) .query ({City: E.Split (',') [1]}). 'json'}) .query ({ak: sk}) .end (function (err, sres) {var emplacement, res_json; res_json = json.parse (sres.text); if (res_json.status == 0) {location = res_json.result && res_json.result.location || '';} else {location = flocation = flocation = flocation = flocation = floate ?5. Implémentez une page Web, qui peut saisir l'emplacement géographique pour effectuer une requête par lots de l'emplacement géographique.
Ce sont les choses frontales, comment les écrire si vous avez l'air bien
6. Résumé
Ce qui précède est tout le contenu de l'utilisation de NodeJS pour implémenter une requête par lots des interfaces de latitude et de longitude. J'espère que cela sera utile à tous ceux qui utilisent Nodejs.