ForyszeP
ForyszeP

Reputation: 163

Python requests for Google Book API. How to create url?

I'm using this API to search through books. I need to create a request with given parameters. When I use requests library and params argument it creates bad URL which gives me wrong response. Let's look at the examples:

import requests
params = {'q': "", 'inauthor': 'keyes', 'intitle': 'algernon'}
r = requests.get('https://www.googleapis.com/books/v1/volumes?', params=params)
print('URL', r.url)

The URL is https://www.googleapis.com/books/v1/volumes?q=&inauthor=keyes&intitle=algernon

Which works but gives a different response than when the link is as Working Wolumes tells.

Should be: https://www.googleapis.com/books/v1/volumes?q=inauthor:keyes+intitle:algernon

Documentation of requests tells only about params and separates them with &. I'm looking for a library or any solution. Hopefully, I don't have to create them using e.g. f-strings

Upvotes: 0

Views: 454

Answers (1)

kup
kup

Reputation: 819

You need to create a parameter to send the url, the way you are doing it now is not what you wanted.

In this code you are saying that you need to send 3 query parameters, but that is not what you wanted. You actually want to send 1 parameter with a value.

import requests
params = {'q': "", 'inauthor': 'keyes', 'intitle': 'algernon'}
r = requests.get('https://www.googleapis.com/books/v1/volumes?', params=params)
print('URL', r.url)

try below code instead which is doing what you require:

import requests
params = {'inauthor': 'keyes', 'intitle': 'algernon'}
new_params = 'q='
new_params += '+'.join('{}:{}'.format(key, value) for key, value in params.items())

print(new_params)

r = requests.get('https://www.googleapis.com/books/v1/volumes?', params=new_params)
print('URL', r.url)

Upvotes: 1

Related Questions