Шаги внедрения
1. Интерфейс запроса
На веб -сайте есть довольно много интерфейсов такого типа. Автор напрямую обнаружил интерфейс карт Baidu для этого. API под названием - это служба геокодирования в геокодировании API.
Пример запроса: GeoCode запрос здания Baidu в Пекине
http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderOption&output=json&address=百度大厦&city=北京市
Это требует параметра AK, который является строкой, сгенерированной пользователем при создании приложения и должен вызывать при запросе данных.
[Уведомление]
Созданное приложение-тип сервера
Есть два метода проверки, из которых можно выбрать при создании приложения. Вы можете использовать проверку IP Whitelist или использовать SN для проверки. Разница между ними заключается в том, что IP должен установить IP -адрес, когда вы запросите его заранее. Если вы не хотите заранее устанавливать мертвый IP -адрес, вы также можете выбрать проверку SN. Это метод проверки с использованием MD5 в качестве алгоритма шифрования.
Автор выбрал SN для проверки в начале, но назвал Crypto для создания подписей MD5 и продолжал проверять его. Он мог использовать IP -белый список только в качестве проверки.
2. nodejs Query
С интерфейсом для вызова мы можем написать небольшой скрипт для запроса данных. Нам нужны три зависимости, а именно экспресс, супевант и EventProxy
Express - это легкое веб -приложение
Superagent - это библиотека, которая часто используется сканерами, которая может имитировать различные запросы.
EventProxy - параллельный контроллер
* Простой запрос
Во -первых, давайте напишем простой запрос, чтобы определить, можно ли получить географическое местоположение:
app.get ('/one', function (req, res, next) {var sk = 'yoursk' // Создать приложение SK, address = 'beijing'; superagent.get ('http://api.map.baidu.com/geocoder/v2/') .Query ({адрес: address}). sk}) .end (function (err, sres) {if (err) {console.log ('err:', err); return;} res.send (sres.text);})}) Затем откройте браузер для посещения: http://localhost:8888/one
{Статус: 0, Результат: {местоположение: {lng: 116.39564503787867, lat: 39.92998577808024}, точность: 0, уверенность: 10, уровень: "Город"}Когда вы сможете увидеть эту информацию, это означает, что интерфейс успешно. Если статус не 0, обратитесь к таблице статуса кода возврата
Зачем нам открывать сервер, чтобы запросить его? Поскольку приложение, которое мы создали, является сервером, нам нужно построить сервер, чтобы запросить его.
* Партийный запрос
Хорошо, город может быть запрошен. Далее мы будем проводить запросы нескольких городов. Мы используем EventProxy для контроля параллелистики. Вы можете думать об этом как о прилавке. Вы можете приказывать ему прослушать событие и выполнить соответствующую функцию n раз.
Ключевой код заключается в следующем:
app.get ('/many', function (req, res, next) {var sk = 'yoursk', address = ['beijing', 'shenzhen', 'guangzhou', 'panting']; ep.after ('getLocation', адреса. Superagent.get ('http://api.map.baidu.com/geocoder/v2/') .Query ({Address: e}) .Query ({output: 'json'}) .Query ({ak: sk}). })})}) Откройте браузер для доступа: http://localhost:8888/many
[{Адрес: «Пекин», Res: "{" "Статус": 0, "Результат": {"место": {"lng": 116.39564503787867, "lat": 39.9299857808024}, "Точный": 0, «Уверенность»: 10, «Уровень»: «Город». «Shenzhen», Res: "{" status ": 0," result ": {" location ": {" lng ": 114.0259736573215," lat ": 22.546053546205248}," Точный ": 0,« Доверие »: 14,« уровень »:« Город »}},« Адрес »:« Адрес »:« Адрес » City",res: "{"status":0,"result":{"location":{"lng":113.30764967515182,"lat":23.12004910207623},"precise":0,"confidence":12,"level":"city"}}"},{address: "Puning City",res: "{" Статус ": 0," Результат ": {" место ": {" lng ": 116.07816590835329," lat ": 23.28895358314155}," Точный ": 0," уверенность ": 14,": "District"}} "]]"Хорошо, нет проблем с партийным запросом. Затем мы будем использовать Nodejs для чтения файла Excel, брошенного фоновым инженером.
3. Nodejs Read and Write Files
На этот раз нам нужны еще две зависимости, одна-встроенный модуль FS для Nodejs, а один-библиотека Node-xlsx для чтения и написания Excel
Бросьте файл Excel города в корневой каталог и запустите другой сценарий xls2js.js:
var xlsx = require ('node-xlsx'), fs = require ('fs'); var file_path = './query_result.xlsx'; Var file_data = xlsx.parse (file_path);Затем позвоните fs.writefile, чтобы написать извлеченный город на следующий код:
file_data.foreach (function (sheet, index) {var sheatename = sheet.name // name таблицы, лист -дата = лист.data // Данные таблицы, sheethead = sheetData [0] // Первая строка, как правило, является заголовком, но не определенным, листовой тел = sheetData.slice (1) // Real Data, file_path_towrite =. file_data_json, cities_name = []; fs.writefile (file_path_towrite, file_data_json, function (err) {if (err) console.log ('write data while', err); else console.log ('file успешно');})})Откройте файл static/address.json, и вы увидите текст в следующем формате:
{"cities_name": ["Пекин, Пекин", "Пекин, муниципальный район", "Тяньцзинь, Тяньцзинь"]}4. Комплексные шаги 2 и 3, чтобы реализовать интерфейс, который считывает файлы локального города, партии запросов и записывает новые файлы
Хорошо, с этим файлом мы можем прочитать его еще раз, а затем выполнить пакетный запрос:
app.get ('/', function (req, res, next) {var sk = 'yoursk', address = [], file_path = './static/address.json', file_path_towrite = './static/geocoder.json', file_data; fs.readfile (file_path, funct Файл ', err); [e ['location'] ['lng'], e ['location'] ['lat']; })}) address.foreach (function (e, i) {superagent.get ('http://api.map.baidu.com/geocoder/v2/') .query ({адрес: e.split (','). join (')}). 'json'}) .query ({ak: sk}) .end (function (err, sres) {var location, res_json; res_json = json.parse (sres.text); if (res_json.status == 0) {location = res_json.result && res_json.result.location | {"lng": 0, "lat": 0};5. Реализуйте веб -страницу, которая может ввести географическое местоположение для проведения пакетного запроса географического положения.
Это передние вещества, как их написать
6. Резюме
Выше всего содержимое использования Nodejs для реализации пакетного запроса широты и долготы интерфейсов. Я надеюсь, что это будет полезно для всех, кто использует Nodejs.