Home > Blockchain >  How to call in the google books API in django?
How to call in the google books API in django?

Time:01-07

The books are being displayed but when i click on the link it does not lead to the google books.co.in webpage where the book is stored, it displays that the page is not found.

my views.py

def books(request):
    if request.method == "POST":
        form=DashboardForm(request.POST)
        text=request.POST['text']
        url="https://www.googleapis.com/books/v1/volumes?q=" text
        r = requests.get(url)
        answer = r.json()
        result_list = []
        for i in range(10):
            result_dict = {
                'title':answer['items'][i]['volumeInfo']['title'],
                'subtitle':answer['items'][i]['volumeInfo'].get('subtitle'),
                'description':answer['items'][i]['volumeInfo'].get('description'),
                'count':answer['items'][i]['volumeInfo'].get('pageCount'),
                'categories':answer['items'][i]['volumeInfo'].get('categories'),
                'rating':answer['items'][i]['volumeInfo'].get('pageRating'),
                'thumbnail':answer['items'][i]['volumeInfo'].get('imageLinks').get('thumbnail'),
                'preview':answer['items'][i]['volumeInfo'].get('previewLinks')
                
            }
            result_list.append(result_dict)
            context={
                'form' : form,
                'results' :result_list
            }
        return render(request,'dashboard/books.html',context)
    else:
        form=DashboardForm() 
    context={'form' : form}
    return render(request,'dashboard/books.html',context)

my books.html template

{% extends 'dashboard/base.html' %} 
{% load static %} 
{% block content %}

<section class='text-center container'>
    <h2><b>SEARCH FOR BOOKS </b></h2>
    <p>Enter the search query to obtain your desired book</p><b></b>
    <form action="" method="post">
        {% csrf_token %}
        {{form}}
        <input  type="submit" value="Submit">
    </form><br>

    {% for result in results %}
    <a href="{{result.preview}}" target="_blank">
        <div >
            <div >   
                <div >
                    <div >
                        <img  src="{{result.thumbnail}}" alt="">

                    </div>
                    <div >
                        <h3 >{{result.title}}</h3>
                        <b>
                            <u>
                                <h5 >{{result.subtitle}}</h5>
                            </u>
                        </b>
                        {% if result.description %}
                            <h6 >{{result.description}}</h6>
                        {% endif %}

                        <b> 

                        {% if result.categories %}    
                            <h6 >Category: 
                                {% for category in result.categories %}
                                    {{category}}
                                {% endfor %}
                            </h6>
                        {% endif %}

                        {% if result.count %}    
                            <h6 >Pages: {{result.count}}</h6>
                        {% endif %}

                        {% if result.rating %}
                            <h6 >Rating:{{result.rating}}</h6>
                        {% endif %}
                        </b>
                    </div>
                </div>
            </div>
        </div>
    </a>
    {% endfor %}
    <br>
</section>

{% endblock content %}

I have installed and imported requests and want to redirect to google books page when i click on the book. enter image description here

CodePudding user response:

The issue seems to be with the value of "preview" in the "result_dict" dictionary. It looks like the "previewLinks" key in the JSON response from the Google Books API does not contain a URL that can be directly accessed.

You can try it like this:

result_dict = {
   ...
   'preview': answer['items'][I]['volumeInfo'].get('previewLinks').get('googlePlay'),
   ...
}

CodePudding user response:

from google.oauth2.credentials import Credentials from googleapiclient.discovery import build

def get_book(book_id):

Create an HTTP client to use with the Google Books API

service = build('books', 'v1', credentials=credentials)

Make a request to the Google Books API to get details about the book

response = service.volumes().get(volumeId=book_id).execute() return response

This code uses the googleapiclient library to build a client for the Google Books API and make a request to the volumes.get method to retrieve details about a book with a given book_id.

  • Related