fix some display issues & add scrape url logger

This commit is contained in:
doubaniux 2020-10-06 22:19:42 +02:00
parent 1ecb9d08c7
commit af1eba56b2
11 changed files with 176 additions and 43 deletions

View file

@ -15,6 +15,7 @@
<meta property="og:url" content="{{ request.build_absolute_uri }}">
<meta property="og:image" content="{{ request.scheme }}://{{ request.get_host }}{{ book.cover.url }}">
<meta property="og:site_name" content="NiceDB">
<meta property="og:description" content="{{ book.brief }}">
{% if book.author %}
<meta property="og:book:author" content="{% for author in book.author %}{{ author }}{% if not forloop.last %},{% endif %}{% endfor %}">
{% endif %}

View file

@ -1,5 +1,7 @@
import requests
import functools
import random
import logging
from lxml import html
import re
from boofilsic.settings import LUMINATI_USERNAME, LUMINATI_PASSWORD, DEBUG
@ -30,6 +32,25 @@ TIMEOUT = 10
# luminati account credentials
PORT = 22225
logger = logging.getLogger(__name__)
def log_url(func):
"""
Catch exceptions and log then pass the exceptions.
First postion argument of decorated function must be the url.
"""
@functools.wraps(func)
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
# log the url
logger.error(f"Scrape Failed URL: {args[0]}")
raise e
return wrapper
def download_page(url, regex, headers):
url = regex.findall(url)
@ -85,6 +106,7 @@ def download_image(url):
return raw_img
@log_url
def scrape_douban_book(url):
regex = RE_DOUBAN_BOOK_URL
headers = DEFAULT_REQUEST_HEADERS.copy()
@ -214,6 +236,7 @@ def scrape_douban_book(url):
return data, raw_img
@log_url
def scrape_douban_movie(url):
regex = RE_DOUBAN_MOVIE_URL
headers = DEFAULT_REQUEST_HEADERS.copy()

View file

@ -2180,3 +2180,7 @@ select::placeholder {
.ms-parent > .ms-drop > ul > li > label > span {
margin-left: 10px;
}
.ms-parent > .ms-drop > ul > li > label > input {
width: unset;
}

View file

@ -32,5 +32,9 @@
&:hover, &:focus
color: black
.ms-parent > .ms-drop > ul > li > label > span
margin-left: 10px
.ms-parent > .ms-drop > ul > li > label
& > span
margin-left: 10px
& > input
width: unset

View file

@ -0,0 +1,18 @@
from django import template
from django.template.defaultfilters import stringfilter
register = template.Library()
@register.filter(is_safe=True)
@stringfilter
def strip_protocol(value):
""" Strip the `https://.../` part of urls"""
if value.startswith("https://"):
value = value.replace("https://", '')
elif value.startswith("http://"):
value = value.replace("http://", '')
if value.endswith('/'):
value = value[0:-1]
return value

View file

@ -51,10 +51,24 @@
{% endif %}
</a></h5>
<div>{% if movie.director %}{% trans '导演:' %}
{% for director in movie.director %}
<span>{{ director }}</span>{% if not forloop.last %} / {% endif %}
{% endfor %}
{% endif %}</div>
{% for director in movie.director %}
<span {% if forloop.counter > 5 %}style="display: none;" {% endif %}>
<span class="director">{{ director }}</span>
{% if not forloop.last %} / {% endif %}
</span>
{% endfor %}
{% if movie.director|length > 5 %}
<a href="javascript:void(0);" id="directorMore">{% trans '更多' %}</a>
<script>
$("#directorMore").click(function (e) {
$("span.director:not(:visible)").each(function (e) {
$(this).parent().removeAttr('style');
});
$(this).remove();
})
</script>
{% endif %}
{% endif %}</div>
<div>{% if movie.genre %}{% trans '类型:' %}
{% for genre in movie.get_genre_display %}
<span>{{ genre }}</span>{% if not forloop.last %} / {% endif %}

View file

@ -6,6 +6,7 @@
{% load mastodon %}
{% load oauth_token %}
{% load truncate %}
{% load strip_protocol %}
<!DOCTYPE html>
<html lang="en">
@ -88,35 +89,61 @@
</div>
<div>{% if movie.director %}{% trans '导演:' %}
{% for director in movie.director %}
<span>{{ director }}</span>{% if not forloop.last %} / {% endif %}
<span {% if forloop.counter > 5 %}style="display: none;" {% endif %}>
<span class="director">{{ director }}</span>
{% if not forloop.last %} / {% endif %}
</span>
{% endfor %}
{% endif %}</div>
<div>{% if movie.playwright %}{% trans '编剧:' %}
{% for playwright in movie.playwright %}
<span>{{ playwright }}</span>{% if not forloop.last %} / {% endif %}
{% endfor %}
{% endif %}</div>
<div>{% if movie.actor %}{% trans '主演:' %}
{% for actor in movie.actor %}
<span {% if forloop.counter > 5 %}style="display: none;"{% endif %}>
<span class="actor">{{ actor }}</span>
{% if not forloop.last %} / {% endif %}
</span>
{% if forloop.counter <= 5 %}
{% endif %}
{% endfor %}
{% if movie.actor|length > 5 %}
<a href="javascript:void(0);" id="actorMore">{% trans '更多' %}</a>
{% if movie.director|length > 5 %}
<a href="javascript:void(0);" id="directorMore">{% trans '更多' %}</a>
<script>
$("#actorMore").click(function(e) {
$("span.actor:not(:visible)").each(function(e){
$("#directorMore").click(function (e) {
$("span.director:not(:visible)").each(function (e) {
$(this).parent().removeAttr('style');
});
$(this).remove();
})
</script>
{% endif %}
{% endif %}
{% endif %}</div>
<div>{% if movie.playwright %}{% trans '编剧:' %}
{% for playwright in movie.playwright %}
<span {% if forloop.counter > 5 %}style="display: none;" {% endif %}>
<span class="playwright">{{ playwright }}</span>
{% if not forloop.last %} / {% endif %}
</span>
{% endfor %}
{% if movie.playwright|length > 5 %}
<a href="javascript:void(0);" id="playwrightMore">{% trans '更多' %}</a>
<script>
$("#playwrightMore").click(function (e) {
$("span.playwright:not(:visible)").each(function (e) {
$(this).parent().removeAttr('style');
});
$(this).remove();
})
</script>
{% endif %}
{% endif %}</div>
<div>{% if movie.actor %}{% trans '主演:' %}
{% for actor in movie.actor %}
<span {% if forloop.counter > 5 %}style="display: none;"{% endif %}>
<span class="actor">{{ actor }}</span>
{% if not forloop.last %} / {% endif %}
</span>
{% endfor %}
{% if movie.actor|length > 5 %}
<a href="javascript:void(0);" id="actorMore">{% trans '更多' %}</a>
<script>
$("#actorMore").click(function(e) {
$("span.actor:not(:visible)").each(function(e){
$(this).parent().removeAttr('style');
});
$(this).remove();
})
</script>
{% endif %}
{% endif %}</div>
<div>{% if movie.genre %}{% trans '类型:' %}
@ -156,7 +183,7 @@
{% endfor %}
{% endif %}</div>
<div>{% if movie.site %}{% trans '网站:' %}
<a href="{{ movie.site }}" target="_blank">{{ movie.site }}</a>
<a href="{{ movie.site }}" target="_blank">{{ movie.site|strip_protocol }}</a>
{% endif %}</div>
{% if movie.other_info %}
{% for k, v in movie.other_info.items %}

View file

@ -120,10 +120,24 @@
</a></h5>
<div>{% if movie.director %}{% trans '导演:' %}
{% for director in movie.director %}
<span>{{ director }}</span>{% if not forloop.last %} / {% endif %}
{% endfor %}
{% endif %}</div>
{% for director in movie.director %}
<span {% if forloop.counter > 5 %}style="display: none;" {% endif %}>
<span class="director">{{ director }}</span>
{% if not forloop.last %} / {% endif %}
</span>
{% endfor %}
{% if movie.director|length > 5 %}
<a href="javascript:void(0);" id="directorMore">{% trans '更多' %}</a>
<script>
$("#directorMore").click(function (e) {
$("span.director:not(:visible)").each(function (e) {
$(this).parent().removeAttr('style');
});
$(this).remove();
})
</script>
{% endif %}
{% endif %}</div>
<div>{% if movie.genre %}{% trans '类型:' %}
{% for genre in movie.get_genre_display %}
<span>{{ genre }}</span>{% if not forloop.last %} / {% endif %}

View file

@ -99,10 +99,24 @@
</a></h5>
<div>{% if movie.director %}{% trans '导演:' %}
{% for director in movie.director %}
<span>{{ director }}</span>{% if not forloop.last %} / {% endif %}
{% endfor %}
{% endif %}</div>
{% for director in movie.director %}
<span {% if forloop.counter > 5 %}style="display: none;" {% endif %}>
<span class="director">{{ director }}</span>
{% if not forloop.last %} / {% endif %}
</span>
{% endfor %}
{% if movie.director|length > 5 %}
<a href="javascript:void(0);" id="directorMore">{% trans '更多' %}</a>
<script>
$("#directorMore").click(function (e) {
$("span.director:not(:visible)").each(function (e) {
$(this).parent().removeAttr('style');
});
$(this).remove();
})
</script>
{% endif %}
{% endif %}</div>
<div>{% if movie.genre %}{% trans '类型:' %}
{% for genre in movie.get_genre_display %}
<span>{{ genre }}</span>{% if not forloop.last %} / {% endif %}

View file

@ -106,10 +106,24 @@
</a></h5>
<div>{% if movie.director %}{% trans '导演:' %}
{% for director in movie.director %}
<span>{{ director }}</span>{% if not forloop.last %} / {% endif %}
{% endfor %}
{% endif %}</div>
{% for director in movie.director %}
<span {% if forloop.counter > 5 %}style="display: none;" {% endif %}>
<span class="director">{{ director }}</span>
{% if not forloop.last %} / {% endif %}
</span>
{% endfor %}
{% if movie.director|length > 5 %}
<a href="javascript:void(0);" id="directorMore">{% trans '更多' %}</a>
<script>
$("#directorMore").click(function (e) {
$("span.director:not(:visible)").each(function (e) {
$(this).parent().removeAttr('style');
});
$(this).remove();
})
</script>
{% endif %}
{% endif %}</div>
<div>{% if movie.genre %}{% trans '类型:' %}
{% for genre in movie.get_genre_display %}
<span>{{ genre }}</span>{% if not forloop.last %} / {% endif %}

View file

@ -18,7 +18,7 @@
<img src="{% static 'img/logo.svg' %}" class="logo" alt="boofilsic logo">
<div id="loginButton">
<p>欢迎来到里瓣书影音(其实现在只有书)!</p>
<p>欢迎来到里瓣书影音(其实现在只有书汗电影</p>
<p>
里瓣书影音继承了长毛象的用户关系比如您在里瓣屏蔽了某人那您将不会在书影音的公共区域看到TA的痕迹。
这里仍是一片处女地,丰富的内容需要大家共同创造!
@ -26,7 +26,7 @@
BTW欧盟惯例本站使用了Cookie请理解
</p>
<p>
此外里瓣书影音现处于“公开阿尔法测试”阶段,您的数据存在丢失的可能
此外里瓣书影音现处于“公开阿尔法测试”阶段,您的数据存在丢失的可能
<form action="{% url 'users:register' %}" method="post">
{% csrf_token %}