以前都是写接口给别人读取数据,首次尝试读取豆瓣图书的数据
已经成功,特发此文。
一、本文概要
利用Django写了一个API,然后后端读取通过isbn搜到的豆瓣图书的信息简要,
存入专门建立的一个数据库中,然后再把自己所需要的数据拣出来通过API传给前端。
其实本文只做了一个功能,即把豆瓣图书的信息存到自己的数据库。
二、准备工作
1、豆瓣图书的API
https://api.douban.com/v2/book/isbn/9787506394864?apikey=*****
因为豆瓣的原因,现在的开发者访问都需要一个apikey,因为本人用的是网上随便找的apikey,不是自己的,因此在这隐去(如有需要,可评论)
2、django项目
我这里建立了一个tool项目,以及api的应用。
三、数据库models的建立
我这边选取了书名,作者,出版社,isbn,简介以及图片信息。这里根据自己需求定义即可。
from django.db import models
class Book(models.Model):
title = models.CharField(max_length = 64)
author = models.CharField(max_length= 64)
publisher = models.CharField(max_length= 64, default='')
isbn = models.CharField(max_length= 64, default='')
summary = models.CharField(max_length= 1280, default= '')
image = models.CharField(max_length=320, default='')
四、读取豆瓣图书的数据
我这边用了接口的形式,上一篇文章着重讲了如何写接口,我这边直接贴代码了。如果不用接口也是可以实现读取数据的。在代码里,我做了略微的解析。
我的urls.py的数据
from django.contrib import admin
from django.urls import path
from api import views
urlpatterns = [
path('api/test/', views.TestView.as_view()),
path('admin/', admin.site.urls),
]
接下来是api里面的views的编写
from urllib.request import Request, urlopen
import json
class TestView(APIView):
authentication_classes = []
def get(self, request, *args, **kwargs):
ret = {'code':1000, 'msg':None,'token':None}
try:
isbn = request._request.GET.get('isbn')
# 豆瓣网站获取数据Api
url = 'https://api.douban.com/v2/book/isbn/'+isbn+'?apikey=0b2bdeda43b5688921839c8ecb20399b'
# 包装头部
firefox_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
# 构建请求
request = Request(url, headers=firefox_headers)
html = urlopen(request)
# 获取数据
data = html.read()
# 转换成JSON
data_json = json.loads(data)
# print(data_json)
title = data_json['title']
author = data_json['author'][0]
isbn13 = data_json['isbn13']
publisher = data_json['publisher']
summary = data_json['summary']
images = data_json['images']
#如果只是单纯的想要读取数据,那么只需要到这一步即可,
# 相信你们都能够获取豆瓣api上的数据了
#把数据print出了
print('书名',title)
print('作者',author)
print('ISBN',isbn13)
print('出版社',publisher)
print('简介',summary)
print('图片',images)
# datas = json.dumps(data,ensure_ascii=False)
#转存到自己新建的数据库
models.RecommendBook.objects.create(title= title,author=author,isbn=isbn13,recommendrank=6,
publisher=publisher,summary=summary,image=images)
# obj.title = title
# obj.author = author
# obj.isbn = isbn13
# obj.publisher = publisher
# obj.summary = summary
# obj.image = images
# obj.save()
ret['msg']='创建数据成功'
except Exception as e:
pass
return JsonResponse(ret)