2.2 Geolocation Web API - Working with Data and APIs in JavaScript

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
Welcome to the second video in the Data Selfie App Project. Thank you, Joey Lee, for this sample project. I'm excited to keep building this with you who are watching this right now. So one of the things, one of the reasons for this project, one of the things I'm excited to demonstrate to you is what is this whole thing about client side and server side programming. If you watched the first video, all I did really was make two files, Index.js, the JavaScript node code to run on the server, and Index.html, the web page that the server is hosting up to run on the client. And this is one of the most confusing things when you're first learning to program and thinking about client side versus server side, when do I want to do one or what goes on where. So let's take a minute to dissect that a little bit here. We have the file Index.js. This is the server. Only functionality on the server right now is as follows, host static files. The goal here is to build additional functionality, what other kinds of things does the server need to do? Save information to our database, for example, retrieve information from the database and pass it to the client, also. But for right now, all it does is host static files and the static file it happens to host is Index.html living on the server. What happens, the client connects to the server and says, we'd like to request to view your website, your web application. And so with that request, Index.html gets sent to the client. Then it gets rendered in the client's browser. If this Index.html happens to have JavaScript files with it or references to other JavaScript files. And, of course, there could be other media and other things going along as well, that JavaScript is sent as raw text and get executed here. So the big difference, even though we might have JavaScript in two places, we have JavaScript in Index.js, we have JavaScript in index.html, this JavaScript that's running on the server is never seen by the client. It has no ability to access this code, it can make a request. This is a program that's running, the code is in it. This is an important distinction because at some point, when we start connecting to APIs, as we might need to do some authentication. So that's another thing that we want to do here on the server. We said earlier save to database. That's the thing that we can't do on the client. The server has to take care of that. Here's another thing. Some APIs could authenticate from here, like the JavaScript code could go here, execute and connect to the API. But then, whatever is in here is visible to the user. You could do view source and see the JavaScript, you could see the API keys there. So this is an important point. We may in most cases want to do authentication here on the server. So we're keeping track of a list of things we want to do in the server and keeping track, we don't really have a list of things we want to do in the client. In this particular video right now, I don't want to add any of this functionality to the server. I'm going to do that later. What I want to do right now is add functionality to the client. So I'm adding JavaScript to Index.html. Something that I can only do on the client is geolocate. Geolocate. Right? The client is somewhere in the world. There could be many of them. That's another thing. There's only one server, I'm writing the server, there's only one Index.html file. But that file can be sent to many different clients. Those clients could geolocate themselves and then send that data back to the server. It's particularly confusing because when you're practicing this and developing this, remember I've got the server and the client running here locally on my laptop, so they're both in one place. Towards the end of this video series, I'm going to show you how to take the server and deploy it to the cloud, so to speak, or a server that's somewhere else that many clients could ultimately connect to. So I'm just repeating a lot of the same stuff over and over again. So all we're going to do in this first step is figure out how to geolocate where the client is, show the client their latitude and longitude on their browser page, and then we'll be ready for the next step, which I'll do in the subsequent video to send that information on the server and have the server save it to a database. One of the things that is available to you if you're writing JavaScript for client side browsers is the web API navigator. So this interface, this Navigator interface has information about the user agent, the identity, the specific user itself. Things like the user's language or at least their language setting in the browser, their battery about a battery left, yes. There's a navigator and API functions for battery, and geolocation is one of them. So you can check out the Mozilla web docs for all the different things you can access via the navigator object. The one I want to look at here is just geolocation. So here I am on the geolocation API page, which I can access with that navigator object. One thing that's really key here is this little note. This feature is available only in secure contexts HTTPS. So this is quite true of several things. For example, if your website is not hosted in a secure context you may not be able to get access to a user's webcam. That's another feature that we're going to add here. And so this is something you really need to be conscientious about. For us right now developing locally on this laptop the permissions are much more loose. We're allowed to access geolocation, allowed to access the camera on local host because we haven't actually deployed anything to a real web server where there's users besides ourselves just playing around with it. But this is definitely something going to want to watch out for when you get to that deployment stage. The other thing to really be aware of is not all-- not every browser that anybody might be using on any operating system with any version is going to have support for geolocation. So the first thing you would always want to do in your code is test to see if geolocation is even a thing that's available. Luckily for us, the code for how to do that is right here on the documentation page. So I would consider retyping it, but it'll be easy to just copy-paste. So I'm going to take that, I'm going to go back to the Index.html file. I'm going to add to the body a script tag so that I can put this code in here. And I'm going to say console.log gelocation available, and then console.log geolocation not available. So at a minimum here, when I load the page, I should see one or the other of those messages. And geolocation is available. Fantastic. So if geolocation is available, then I can choose to take the next step and geolocate. The way that I do that is by calling to getCurrentPosition function. And the getCurrentPosition function requires me to pass in a callback function that is executed when the position is ready to be retrieved. That's a bit of a mouthful, but we can copy-paste the code that's here on the documentation page and then unpack that a little bit. So let's go to our code. If it's available, I want to put this here, so let's look at this. Navigator.geoloc ation.getCurrentPosition. That's really the function I'm calling. I can take all of this out. This is what we're calling right here. The issue is, we need to give it a callback, right? This is going to happen asynchronously. So only when it's ready to grab that latitude-longitude, this function will get called. I don't need this do something here. This is a nice little-- it's implying the documentation is implying now you do something with that. All I wanted it to do to see that this works is actually console log this out. So I'm going to say console log, position coordinates latitude, and console log position coordinates longitude. Get the current position. When it's ready, call this callback passive position and console log in. I am trying to do this series about building these projects using updated ES6 syntax. There's a variety of different versions of JavaScript. Yes, this is actually from quite a while ago. I have a bunch of videos about different versions of JavaScript, but what I mean here specifically is I want to use the arrow syntax. So what I can actually do is eliminate this function key word and just say position arrow into these two lines of code. So this is a nice way of writing saying, let's get the current position when it's ready, console log it. And in fact, I'm just going to say console-- I'm going to simplify this even further. Just going to say console.log position.coordinates, OK? Because I want to look at the full object to see what's in there. Oh, I want to look at position. I want to look at everything. So let's do that. Let's see what happens. So I'm going to go back here and hit refresh. Now look at this. This is really important. Localhost 3000, that's the URL present for my website, it's just localhost, I'm just developing locally. If you had deployed this somewhere and your website was DataSelfieApp.com, it would say DataSelfieApp.com wants to, what? Know your location. So, of course, of course, of course this is something that the user has to opt into, right? You can't just secretly behind the scenes log users location without them saying yes, this is OK. So not only does the website have to be secure, so that information is transferred securely, but it also has to be explicitly allowed by the user. This might be different if you were doing geolocation within an app itself because maybe the user by purchasing the app or maybe the user by downloading the app and through system settings has already oft opted into that app using location, but just on a website itself the user is going to say allow. So I'm going to say allow. And then-- [CHUCKLES] Boy, that took a while. Took a while. So you could see that for it to figure out, for it to do the location, that takes a while. How is it doing the location? This is this laptop. It didn't have a GPS in it. Let's look and see what's in here, first of all. So we have coordinates, we have timestamp. Coordinates have accuracy, altitude, possible heading, latitude, longitude, speed. So there's a lot of extra information here that you might get if you were doing this on mobile. So that would be excellent. We'll pause this video, try to make this run in a mobile browser, then see what else you get there. And what I'm looking for, of course, is just the latitude and longitude. Now, just out of curiosity, let's see where I am and see how accurate it got. Looks like it got it exactly right. So this is not where the International Space Station is, but this is exactly the code from my International Space Station example. I just hard-coded in the latitude and longitude that I got from geolocating myself, and then there I am, right here in New York City on Broadway between Washington Place and Wimberley Place at the Tisch School of the Arts. That's exactly where I am. So it works. Most likely, my guess, my assumption, is that it's able to locate me by the IP address where I'm connected to the NYU Wi-Fi and the NYU Wi-Fi, that IP address, is registered to this particular address at Tisch School of the Arts. But if I'm opening this on a mobile device, I would most likely get that latitute and longitude the GPS itself. A good exercise could then be to add the Leaflet.js code right here and actually have the browser geolocate and then show the user where it thinks they are. But I'm going to do something much simpler because really what I want to do is get to sending that data to the server. This is the heart of this particular module of this series, which is how to communicate data that's extracted in the client, send it to the server, and save it to the database. So in many ways we're done, but let's at least add that latitude and longitude to the web page itself so we can see it in the Dom. Let's add a couple of Dom elements. For example, I'll just say latitude, I'll make a span, latitude, and that'll be empty. And then I'll add a break and say the same exact thing, but longitude. Let me also add the degree symbol, which I can do by just saying & deg semicolon, and the same exact thing down here. & deg semicolon. So now if I refresh the page here, there we go. Latitude and longitude are blank. It's got the position there, let's pull out the latitude, position.coodinates.latitude and then I can say document.getElementByID. The ID is latitude, and then I can say text content equals that latitude, and I can do the same thing with the longitude. I'm having serious case of deja-vu here because we did a lot of this kind of idea in the previous video. And then I can put that here. And now we are ready to go. Now I can refresh the page and there we go. We see the latitude and longitude right there in the browser itself. There you have it. Now we're done with step two. We have data that we have acquired from the navigator geolocation API on the client. We have a server that is hosting the code that is being sent to the client to run. The next step is for that information once it's retrieved on the client to be sent back to the server and saved in a database. And the way that's going to happen is through a POST request. In previous videos, I have covered the Fetch function extensively and looking at how to do a get request, how to retrieve data using Fetch. It makes sense, Fetch kind of implies fetch, retrieve, get. But it so happens that the fetch function can also be used to send data by making it instead of a Get a POST. I can fetch a POST, I can POST a Fetch. Who knows what the lingo means, but I can send data from the client to the server. That'll be the next step. Then after that, we'll save the status of the database that gets sent, and more and more and more. Before you move on to the next video, I might suggest just playing around with the client code, add the map with Leaflet, think about maybe a more elegant interaction, maybe there should be a button the user presses to retrieve the current latitude and longitude, try it on a mobile device. There's a bunch of things you could try. Let me know how that goes in the comments, and I'll see you in the next step. Thanks for watching. [MUSIC PLAYING]
Info
Channel: The Coding Train
Views: 141,205
Rating: undefined out of 5
Keywords: geolocation api, web development, navigator.geolocation, geolocation javascript, javascript, js, data, api, geolocation, github, git
Id: 3ls013DBcww
Channel Id: undefined
Length: 15min 4sec (904 seconds)
Published: Fri May 31 2019
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.