В воскресенье я решил повременить и посмотрел api карты google. Какой зверь! Я использовал node.js для отправки запросов с помощью модуля запроса, поэтому технически я все еще изучаю/практикую. Я также использовал модуль FS для хранения копий данных, которые я получил от указанных запросов. Но в любом случае по моему опыту.
Карта Google разделена на несколько разных API. Я едва поцарапал поверхность. Мне удалось пройти через геокод и API мест. Ниже приведена часть моего объекта URL, который я создал для отправки запросов.
var url = { radar:“https://maps.googleapis.com/maps/api/place/radarsearch/json?", geo: “https://maps.googleapis.com/maps/api/geocode/json?" }
Google Places API требует широты и долготы, а также радиуса до места, которое вы хотите найти. Как нам это получить? API геокодирования! Используя API-интерфейс геокодирования, вы можете запрашивать данные на основе местоположения улицы.
Вот пример моих навыков обратного вызова XD (следующая попытка будет с промисами):
//example address https://maps.googleapis.com/maps/api/geocode/xml?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=YOUR_API_KEY //Gets My Street Geo Data request.get(url.geo+header.address+header.key) .on('response', (res) => { //append to a file fs.appendFile('location.txt',JSON.stringify(res), (error) => { console.error(error); }); console.log('complete'); }) .on('error', (error) => { console.error(error); })
Пример данных, полученных геокодом:
{ "results" : [ { "address_components" : [ { "long_name" : "6", "short_name" : "6", "types" : [ "street_number" ] }, { "long_name" : "Deer Path Road", "short_name" : "Deer Path Rd", "types" : [ "route" ] }, { "long_name" : "Lebanon", "short_name" : "Lebanon", "types" : [ "locality", "political" ] }, { "long_name" : "Clinton Township", "short_name" : "Clinton Township", "types" : [ "administrative_area_level_3", "political" ] }, { "long_name" : "Hunterdon County", "short_name" : "Hunterdon County", "types" : [ "administrative_area_level_2", "political" ] }, { "long_name" : "New Jersey", "short_name" : "NJ", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "United States", "short_name" : "US", "types" : [ "country", "political" ] }, { "long_name" : "08833", "short_name" : "08833", "types" : [ "postal_code" ] }, { "long_name" : "4204", "short_name" : "4204", "types" : [ "postal_code_suffix" ] } ], "formatted_address" : "6 Deer Path Rd, Lebanon, NJ 08833, USA", "geometry" : { "bounds" : { "northeast" : { "lat" : 40.6309583, "lng" : -74.80324569999999 }, "southwest" : { "lat" : 40.630735, "lng" : -74.8035089 } }, "location" : { "lat" : 40.6308467, "lng" : -74.80337729999999 }, "location_type" : "ROOFTOP", "viewport" : { "northeast" : { "lat" : 40.6321956302915, "lng" : -74.80202831970848 }, "southwest" : { "lat" : 40.62949766970851, "lng" : -74.80472628029149 } } }, "partial_match" : true, "place_id" : "ChIJa_Op_Z-Nw4kR0lWviRuKO60", "types" : [ "premise" ] }, { "address_components" : [ { "long_name" : "6", "short_name" : "6", "types" : [ "street_number" ] }, { "long_name" : "Deerpath Road", "short_name" : "Deerpath Rd", "types" : [ "route" ] }, { "long_name" : "Califon", "short_name" : "Califon", "types" : [ "locality", "political" ] }, { "long_name" : "Hunterdon County", "short_name" : "Hunterdon County", "types" : [ "administrative_area_level_2", "political" ] }, { "long_name" : "New Jersey", "short_name" : "NJ", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "United States", "short_name" : "US", "types" : [ "country", "political" ] }, { "long_name" : "07830", "short_name" : "07830", "types" : [ "postal_code" ] }, { "long_name" : "4202", "short_name" : "4202", "types" : [ "postal_code_suffix" ] } ], "formatted_address" : "6 Deerpath Rd, Califon, NJ 07830, USA", "geometry" : { "location" : { "lat" : 40.694663, "lng" : -74.861784 }, "location_type" : "ROOFTOP", "viewport" : { "northeast" : { "lat" : 40.69601198029149, "lng" : -74.8604350197085 }, "southwest" : { "lat" : 40.6933140197085, "lng" : -74.86313298029151 } } }, "partial_match" : true, "place_id" : "ChIJG7hh27mOw4kRKjnQzsvys6Q", "types" : [ "street_address" ] } ], "status" : "OK" }
Получив эти данные, вы можете использовать информацию о широте и долготе для получения информации от местных предприятий… Все, от того, как оценивается компания, до ее рабочего времени и даже отзывов.
пример: «Designer Dawg» имеет высокую оценку.. я должен проверить это однажды..
========Requested Business Info========= { "html_attributions" : [], "result" : { "address_components" : [ { "long_name" : "Whitehouse Station", "short_name" : "Whitehouse Station", "types" : [ "neighborhood", "political" ] }, { "long_name" : "Readington Township", "short_name" : "Readington Township", "types" : [ "administrative_area_level_3", "political" ] }, { "long_name" : "Hunterdon County", "short_name" : "Hunterdon County", "types" : [ "administrative_area_level_2", "political" ] }, { "long_name" : "New Jersey", "short_name" : "NJ", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "United States", "short_name" : "US", "types" : [ "country", "political" ] }, { "long_name" : "08889", "short_name" : "08889", "types" : [ "postal_code" ] } ], "adr_address" : "468 rt 22 West, \u003cspan class=\"locality\"\u003eWhitehouse Station\u003c/span\u003e, \u003cspan class=\"region\"\u003eNJ\u003c/span\u003e \u003cspan class=\"postal-code\"\u003e08889\u003c/span\u003e, \u003cspan class=\"country-name\"\u003eUSA\u003c/span\u003e", "formatted_address" : "468 rt 22 West, Whitehouse Station, NJ 08889, USA", "formatted_phone_number" : "(908) 713-0315", "geometry" : { "location" : { "lat" : 40.6327756, "lng" : -74.7819695 }, "viewport" : { "northeast" : { "lat" : 40.63412458029151, "lng" : -74.78062051970851 }, "southwest" : { "lat" : 40.63142661970851, "lng" : -74.78331848029151 } } }, "icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png", "id" : "b26cb9f3007bc23ed891d6cdec6e1c35c06fc022", "international_phone_number" : "+1 908-713-0315", "name" : "Designer Dawgs", "opening_hours" : { "open_now" : false, "periods" : [ { "close" : { "day" : 0, "time" : "1630" }, "open" : { "day" : 0, "time" : "1130" } }, { "close" : { "day" : 1, "time" : "1630" }, "open" : { "day" : 1, "time" : "1130" } }, { "close" : { "day" : 2, "time" : "1630" }, "open" : { "day" : 2, "time" : "1130" } }, { "close" : { "day" : 3, "time" : "1930" }, "open" : { "day" : 3, "time" : "1130" } }, { "close" : { "day" : 4, "time" : "1930" }, "open" : { "day" : 4, "time" : "1130" } }, { "close" : { "day" : 5, "time" : "1930" }, "open" : { "day" : 5, "time" : "1130" } }, { "close" : { "day" : 6, "time" : "1930" }, "open" : { "day" : 6, "time" : "1130" } } ], "weekday_text" : [ "Monday: 11:30 AM – 4:30 PM", "Tuesday: 11:30 AM – 4:30 PM", "Wednesday: 11:30 AM – 7:30 PM", "Thursday: 11:30 AM – 7:30 PM", "Friday: 11:30 AM – 7:30 PM", "Saturday: 11:30 AM – 7:30 PM", "Sunday: 11:30 AM – 4:30 PM" ] }, "place_id" : "ChIJpYUl-36Sw4kR8wCu0uYNWKs", "rating" : 5, "reference" : "CmRSAAAACUc1KwTxaOhWurR-nxAiY0ZllS7U8xhgOlGP5gky8D-ofo4tHYXBB8R7vRlPqjR1gg7NQ-VSz7oct2zIMZ8RKRizUFRuU_CQCMpCrr3Rhy_bf_1bOWQJK-f2HbO9IukZEhDYXPulTBdtCpHowBkDrajGGhQRg41PYKuLOyRQnoBrEyBVZfploA", "reviews" : [ { "author_name" : "Jackson Harris", "author_url" : "https://www.google.com/maps/contrib/109232730794656278684/reviews", "language" : "en", "profile_photo_url" : "https://lh5.googleusercontent.com/-aNBxLET0ywo/AAAAAAAAAAI/AAAAAAAAAC0/QjVBRXdIG_w/s128-c0x00000000-cc-rp-mo/photo.jpg", "rating" : 5, "relative_time_description" : "a month ago", "text" : "", "time" : 1493255146 }, { "author_name" : "Garrett Armbruster", "author_url" : "https://www.google.com/maps/contrib/112649301744217371770/reviews", "language" : "en", "profile_photo_url" : "https://lh3.googleusercontent.com/-NXHSRlqwwgw/AAAAAAAAAAI/AAAAAAAAAGs/JQ9TsqQZpEY/s128-c0x00000000-cc-rp-mo-ba1/photo.jpg", "rating" : 5, "relative_time_description" : "8 months ago", "text" : "", "time" : 1475810809 } ], "scope" : "GOOGLE", "types" : [ "restaurant", "food", "point_of_interest", "establishment" ], "url" : "https://maps.google.com/?cid=12346633663464472819", "utc_offset" : -240, "vicinity" : "468 rt 22 West, Whitehouse Station", "website" : "http://www.designerdawgs.com/" }, "status" : "OK" }
Вот код, который я использовал для получения этих данных… Перезвоните, черт возьми ≥=)
request.get(url.radar+location+header.radius+header.type+header.key) .on('response', (res) => { var resData = ''; res.on('data', (data) => { resData += data; }); res.on('end', () => { fs.appendFile('location.txt', '\n\n=======Request Nearby Businesses==========\n\n' + resData, (error) => { console.error(error); }); results = JSON.parse(resData); for(var i=0; i<results.results.length; i++) { request.get(url.place+'placeid='+results.results[i].place_id+header.key) .on('response', (res) => { var resData = ''; res.on('data', (data) => { resData += data; }); res.on('end', () => { fs.appendFile('location.txt', '\n\n========Requested Business Info=========\n\n' + resData, (error) => { console.error(error); }); }) }) } }); }) .on('error', (error) => { console.error(error); })
Все сказано и сделано. Мне было весело ковыряться в Google API. Нам еще многое предстоит узнать, и я могу представить массу крутых вещей, которые вы могли бы сделать/сделать с этими данными.