Pour l'essentiel, j'ai utilisé Python-requests et la fonction de recherche de Django via l'API de Google Books avec un seul q paramètre (comme indiqué dans le lien ci-dessous)
https://developers.google.com/books/docs/v1/using#WorkingVolumes
et après avoir soumis le formulaire, j'obtiens la liste des dicts en json comme je le veux avec ce seul paramètre, et j'obtiens dans les données json où apparaît le mot clé "Hobbit" et l'URL ressemble à ceci
http://127.0.0.1:8000/api?books=hobbit
mais lorsque j'essaie d'ajouter des mots-clés spéciaux fournis par l'API de Google Livres, comme.., intitle, inauthor, inpublisher, subject etc.
et en essayant de le rechercher, j'obtiens une URL
http://127.0.0.1:8000/api?books=hobbit & Intitulé \=& dans l'auteur \=& en éditeur \=& isbn \=& lccn \=& oclc \=
qui ne renvoie que les données d'un seul q car l'URL correcte pour les mots-clés spéciaux dans l'API de Google Livres ressemble à ceci
https://www.googleapis.com/books/v1/volumes?q=flowers + dans l'auteur : keyes + sujet : un sujet
Donc, comme vous le voyez, l'URL correct a obtenu des signes
+ contre & et : contre \=
donc l'URL correcte que je veux obtenir ressemblerait à ceci
http://127.0.0.1:8000/api?books=hobbit + Intitulé :quelque chose+ dans l'auteur :quelque chose+ en éditeur :quelque chose+ isbn :quelque chose+ lccn :quelque chose+ oclc :quelque chose
Ma question est la suivante : comment modifier cette structure pour qu'elle soit correcte, comme l'exige l'API de Google Books ?
J'ai essayé de trouver cela dans la documentation de python-requests mais il n'y a rien à ce sujet.
vues.py
def api(request):
books = {
'intitle': 'intitle',
'inauthor': 'inauthor',
'inpublisher': 'inpublisher',
'subject': 'subject',
'isbn': 'isbn',
'lccn': 'lccn',
'oclc': 'oclc'
}
if 'books' in request.GET:
books = request.GET['books']
url = 'https://www.googleapis.com/books/v1/volumes?q=%s' % books
response = requests.get(url)
books = response.json()
print(type(books))
with open("data_file.json", "w") as write_file:
json.dump(books, write_file)
return render(request, 'books/api.html', {'books': books})