Exemple #1
0
def postbox(request):
    if request.method == "POST":
        onedrive_data = json.loads(request.body)
        if onedrive_data['name'][-5] == '.':
            file_name, file_format = onedrive_data['name'][:-5], onedrive_data[
                'name'][-4:]
        elif onedrive_data['name'][-4] == '.':
            file_name, file_format = onedrive_data['name'][:-4], onedrive_data[
                'name'][-3:]
        else:
            h = HttpResponse('后缀名不合法')
            h.status = 404
            return h
        if (file_format != 'epub') and (file_format != 'mobi') and (
                file_format != 'azw3') and (file_format !=
                                            'pdf') and (file_format != 'kfx'):
            h = HttpResponse('后缀名不合法')
            h.status = 404
            return h
        if Book.objects.filter(file_name=file_name):  #如果存在这本书
            b = Book.objects.get(file_name=file_name)
            b.save_url(onedrive_data['url'], file_format,
                       onedrive_data['size'])
            b.save()
        else:  #如果不存在这本书
            douban_data = get_book_data(file_name)
            pprint(douban_data)
            b = Book()
            b.date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
            if douban_data:
                b.file_name = file_name
                b.title = douban_data['title']
                if douban_data['subtitle']:
                    b.subtitle = douban_data['subtitle']
                if douban_data['alt_title']:
                    b.english_title = douban_data['alt_title']
                b.save()  #为添加作者准备
                author = douban_data.get('author')
                if author:  #如果作者不为空
                    if len(author) == 1:
                        a_inf = douban_data['author_intro']
                    else:
                        a_inf = douban_data['author_intro'].split('\n')[1::2]
                    al = []
                    if len(a_inf) == len(douban_data['author']):
                        a_inf = a_inf
                    else:
                        a_inf = [
                            '不详' for i in range(len(douban_data['author']))
                        ]
                    for i in range(len(douban_data['author'])):
                        d = {}
                        d['name'] = douban_data['author'][i]
                        d['information'] = a_inf[i]
                        al.append(d)
                    for l in al:
                        a = None
                        if not Author.objects.filter(name=l['name']):  #添加作者
                            a = Author()
                            a.name = l['name']
                            a.information = l['information']
                            a.save()
                            a.book.add(b)
                        else:
                            a = Author.objects.get(name=l['name'])
                            a.book.add(b)
                        b.author.add(a)
                if douban_data.get('price'):
                    b.price = douban_data['price']
                b.cover = 'https://images.weserv.nl/?url=' + douban_data[
                    'images']['small'][8:]
                b.large_cover = 'https://images.weserv.nl/?url=' + douban_data[
                    'images']['large'][8:]
                b.summary = douban_data['summary']
                b.catalog = douban_data['catalog']
                if not Publisher.objects.filter(
                        name=douban_data['publisher']):  #添加出版社
                    p = Publisher(name=douban_data['publisher'])
                    p.save()
                else:
                    p = Publisher.objects.get(name=douban_data['publisher'])
                b.publisher.add(p)
                p.book.add(b)
                b.save()
                b.douban_id = douban_data['id']
                if douban_data['isbn10']:
                    b.isbn10 = douban_data['isbn10']
                if douban_data['isbn13']:
                    b.isbn13 = douban_data['isbn13']
                if douban_data['pages']:
                    b.pages = douban_data['pages']
                if douban_data.get('tags'):
                    b.save()
                    for d_t in douban_data['tags']:
                        t = Tag()
                        t.name = d_t['name']
                        t.title = d_t['title']
                        t.save()
                        t.book.add(b)
                        b.tags.add(t)
                s = douban_data.get('series')
                if s and type(s) == type({}):
                    b.save()
                    s = Series()
                    s.name = douban_data.get('series')['title']
                    s.save()
                    s.book.add(b)
                    b.series.add(s)
                tr = douban_data.get('translator')
                pprint(tr)
                if tr and type(tr) == type([]):
                    b.save()
                    for tr in tr:
                        if not Translator.objects.filter(name=tr):
                            t = Translator()
                            t.name = tr
                            t.save()
                            t.book.add(b)
                            b.translator.add(t)
                        else:
                            b.translator.add(Translator.objects.get(name=tr))
                b.save_url(onedrive_data['url'], file_format,
                           onedrive_data['size'])
            else:
                b.file_name = b.title = file_name
                b.save_url(onedrive_data['url'], file_format,
                           onedrive_data['size'])
        b.save()
        return render(request, 'book/404.html')
    else:
        return render(request, 'book/404.html', status=404)