diff --git a/later42/libs/__init__.py b/later42/libs/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/later42/libs/content.py b/later42/libs/content.py
new file mode 100644
index 0000000..5cad6c1
--- /dev/null
+++ b/later42/libs/content.py
@@ -0,0 +1,21 @@
+import requests
+
+from bs4 import BeautifulSoup
+from django.conf import settings
+
+
+def sanitize_img_size(html: str):
+ soup = BeautifulSoup(html, 'html.parser')
+ for img in soup.find_all('img'):
+ img['width'] = '100%'
+ img['height'] = 'auto'
+ return str(soup)
+
+
+def get_content(url: str):
+ url = settings.READABILITY_HOST.rstrip(
+ '/') + '/api/content/v1/parser?url=' + url
+ try:
+ return requests.get(url).json()
+ except KeyError:
+ return None
diff --git a/later42/templates/index.html b/later42/templates/index.html
index 2914732..298fd4b 100644
--- a/later42/templates/index.html
+++ b/later42/templates/index.html
@@ -7,12 +7,12 @@
{% if url.content %}
diff --git a/later42/templates/reader.html b/later42/templates/reader.html
new file mode 100644
index 0000000..55f7d3d
--- /dev/null
+++ b/later42/templates/reader.html
@@ -0,0 +1,35 @@
+{% extends 'base.html' %}
+
+{% block content %}
+
+
+{% if content %}
+
+
+
{{ content.title }}
+
+
+
+
+ {{ content.rich_content|safe }}
+
+{% else %}
+
Что-то пошло не так.
+ Открыть
оригинал ссылки.
+{% endif %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/later42/urls.py b/later42/urls.py
index 2d757fd..eb9de87 100644
--- a/later42/urls.py
+++ b/later42/urls.py
@@ -22,7 +22,7 @@ from django.contrib.auth.views import LoginView
from rest_framework import routers, serializers, viewsets
from later42.forms import CustomLoginForm
-from later42.views import index, profile, api, api_token, signup, about
+from later42.views import index, profile, api, api_token, reader, signup, about
class UserSerializer(serializers.HyperlinkedModelSerializer):
@@ -53,5 +53,5 @@ urlpatterns = [
path('about/', about.get, name='about'),
path('archive/', index.archive, name='archive'),
path('archive/
', index.archive, name='archive_url'),
-
+ path('reader/', reader.get, name='reader'),
]
diff --git a/later42/views/api.py b/later42/views/api.py
index e533332..e039b7c 100644
--- a/later42/views/api.py
+++ b/later42/views/api.py
@@ -1,41 +1,21 @@
-import requests
-
from rest_framework.response import Response
from rest_framework.views import APIView
-from bs4 import BeautifulSoup
+from later42.libs.content import get_content
from later42.models.urls import URL as URLModel
from django.conf import settings
class URL(APIView):
- def get_title(self, url: str):
- try:
- response = requests.get(url)
- soup = BeautifulSoup(response.text, 'html.parser')
- title = soup.find('title').text
- return title
- except AttributeError:
- return None
-
- def get_content(self, url: str):
- url = settings.READABILITY_HOST.rstrip(
- '/') + '/api/content/v1/parser?url=' + url
- try:
- response = requests.get(url).json()
- return response['excerpt']
- except KeyError:
- return None
-
def post(self, request, format=None):
url = request.GET.get('url')
if url:
- title = self.get_title(url)
- if title is None:
- title = url
+ page = get_content(url)
+
+ title = page['title']
content = None
if settings.READABILITY_HOST:
- content = self.get_content(url)
+ content = page['excerpt']
url = URLModel(url=url, user=request.user,
title=title, content=content)
diff --git a/later42/views/reader.py b/later42/views/reader.py
new file mode 100644
index 0000000..6c1cb07
--- /dev/null
+++ b/later42/views/reader.py
@@ -0,0 +1,17 @@
+from multiprocessing import context
+from django.contrib.auth.decorators import login_required
+from django.shortcuts import render, redirect
+from django.core.paginator import Paginator
+from django.conf import settings
+from later42.libs.content import get_content, sanitize_img_size
+from later42.models.urls import URL
+
+
+@login_required
+def get(request, url_id=None):
+ url = URL.objects.get(
+ user=request.user, archived=False, id=url_id)
+ content = get_content(url.url)
+ content['rich_content'] = sanitize_img_size(content['rich_content'])
+ context = {'url': url, 'content': content}
+ return render(request, 'reader.html', context)