Python Jumpstart by Building 10 Apps Transcripts
Chapter: App 10: Movie Search App
Lecture: Exploring the search API
Login or
purchase this course
to watch this video and the rest of the course contents.
0:00
Now we know where our data is coming from
0:02
let's write some code and get started on this app.
0:04
We're going to do it in two steps, so let's take this url here
0:07
this movie service.talkpython.fm/api/search/ the name there
0:13
and let's go over here and we're just going to write
0:16
some sort of play around code in the beginning
0:19
and then we'll structure this into a proper program or proper app in a minute.
0:22
So we're going to go and make a request against this
0:25
and let's make it really clear that there is a search term happening here
0:29
so we'll say format search, search equals this, I'll search for a capital
0:34
and we're going to need to make a request against this service,
0:38
well, we've already seen one of the best ways to do that
0:41
is to use the request package, so import request;
0:45
now I don't have request installed in the virtual environment here
0:49
so we'll go ahead and install that,
0:54
you might be using it your system wide Python
0:56
and have it left over from other examples
0:58
or maybe using the same virtual environment
1:00
but here I'm an going to install it separately;
1:02
we're also going to be using named tuples,
1:04
so I'm going to import collections while we're at it,
1:07
so let's start by going and doing a request against this,
1:10
so we'll say the response is request.get url,
1:13
and then let's just print out the status code
1:16
and go ahead and run this, see what we get.
1:19
Status code 200, that's good, so we could
1:23
actually print out the text that we got back
1:26
that looks like the javascripty json text that we're looking for,
1:30
we could use the json module and parse that,
1:33
but it turns out that if we have let's say I have a variable here
1:39
it turns out that request is very commonly used to talk to these javascript apis
1:43
and it can automatically turn this into the python dictionaries
1:46
that we're going to work with, so now I could print out this
1:50
let's say the type of movie data and maybe data, we'll see what we get back
1:56
so if we run this, we get a dictionary, not the strings, but an actual dictionary
2:00
which we can use to start working with this data.
2:04
So notice we have our keyword capital in our hits
2:07
which is an array of these movies,
2:10
so we're already on a good path here,
2:13
we probably should do some kind of check to make sure everything is ok
2:18
and we could say something like if response.status code is not 200,
2:23
do something, but request has a nice little thing here
2:27
we can say response.raise for status
2:30
so this is going to cause an error an exception
2:33
if something went wrong basically if it's not a successful status code, all right
2:38
and we'll talk about how to handle these types of situations in a little bit
2:42
but for now, let's just keep playing around with this.
2:45
So we've got our movie data, and we actually care about our movies
2:49
and that's going to be going to the movie data
2:52
and we want to get out the hits,
2:54
so let's print out our movies here and see what we get.
2:59
Now this time it shouldn't come back as a dictionary,
3:02
notice the square bracket, this should come back as an array, a list;
3:05
so here's a list, and then these are all of the movies,
3:08
now the next thing we want to do is convert them just from these flat dictionaries
3:14
into something that's more useful for application,
3:18
we've already seen that named tuples are really powerful
3:21
and let us work with data better,
3:23
we could go and create classes like we did in the wizard app,
3:26
but I think probably named tuples are good enough
3:29
for what we're trying to do here, so let's go and set that up.
3:32
Let's call this a movie result and we're going to set that to be a collection.named tuple,
3:39
and we need the name right here to be exactly the same so movie results,
3:43
and then the next thing that goes in here is actually
3:47
a list of all of the fields, and you can see we have rating
3:50
we have duration, we have title, we have imdb code
3:53
and it needs to match up, well, it should match up exactly to this,
3:57
to make it as easy as possible, we could of course transform it
4:00
and if we don't want imdb code we just want to say
4:03
imdb or just code or something like that,
4:05
we could change it but we have to account for that later;
4:08
so our plan is to just use the same field names or attribute names here,
4:12
so I've already copied those over, so you don't have to watch me type them in,
4:16
so we have this movie result and let's go instead of printing these out,
4:21
let's actually go and loop over all of this data that we got back
4:26
and build up a list of these movie results,
4:28
so let's rename this to movie list or something like that
4:32
and then we'll define our movies, this is the thing we really are after
4:35
we really want to work with, we're going to add a bunch of these movie results
4:39
converted from the data we got from the web service.
4:42
So we'll say for md in a movie list, all right
4:48
and then we want to come down here
4:50
and we're going to create one of the movie results
4:53
and I'm going to do this in three different ways,
4:56
I'm going to start out in the most sort of verbose least Pythonic way
5:00
and we're going to improve it in the next video in a couple of different ways.
5:04
So we're going to say m is a movie result,
5:08
then we need to set a bunch of stuff,
5:10
we need to set the imdb code is equal to md.get,
5:14
imdb code we're going to come over here
5:18
and we're going to set the title to be the title
5:21
and I'm just going to knock the rest of these out.
5:27
There we go, that was a lot of typing
5:29
so we've got all of these here and some of these are numbers
5:32
so we might want to be a little careful we could say things like the score
5:37
if you don't have it in here in this dictionary get
5:40
instead of giving us none you could give us zero,
5:43
same maybe for the year or the rating, things like that
5:46
but this is not entirely necessary I believe all of them have a year and rating.
5:50
Okay, so now we're just going to say movies.append,
5:54
and give it this m, so now we could do things like this
5:58
we could just print out something about the movies,
6:04
so we can print them out and something like this
6:06
we could say, we could just put the year and the title
6:09
we could also save print found some number of movies for search something like this
6:14
the length of the movies and the search string that we sent in, okay,
6:20
so let's run this one more time
6:22
and we should go find a couple movies for capital
6:25
and then print them out here. Look at that, searching for capital,
6:28
we get Supercapitalist, Capital C and Capitalism A Love Story,
6:31
let's go and search for a runner, oh look at that,
6:35
we found Blade Runner, Kite Runner, Logan's Run,
6:38
let's make it feel a little more real, I had let the user input something here,
6:42
so let it come down here, alright,
6:45
so now we could do blade for Blade Runner or something like that,
6:48
we got Sling Blade, Dragon Blade, Blade Runner,
6:52
we come down here and look for a runner, get these again beautiful
6:56
all right so it looks like this is working,
6:59
we'll see that we can actually improve upon this in a couple of ways,
7:02
make this much more concise and pythonic.