VF is auto now (refacto)
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
a3abcbe28d
commit
c2c3e30879
@ -85,7 +85,7 @@ def latest(page=1):
|
|||||||
for torrent in torrents:
|
for torrent in torrents:
|
||||||
results = results + torrent.data
|
results = results + torrent.data
|
||||||
for result in results:
|
for result in results:
|
||||||
result['self'] = get_instance(result['href'], '')
|
result['self'] = get_instance(result['href'])
|
||||||
results.sort(key=itemgetter('date'), reverse=True)
|
results.sort(key=itemgetter('date'), reverse=True)
|
||||||
|
|
||||||
return render_template('latest.html', search_form=SearchForm(), torrents=results, page=page)
|
return render_template('latest.html', search_form=SearchForm(), torrents=results, page=page)
|
||||||
@ -155,6 +155,8 @@ def admin_edit(link_id=None):
|
|||||||
form = EditForm(request.form)
|
form = EditForm(request.form)
|
||||||
|
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
|
# Instance for VF tag
|
||||||
|
instance = get_instance(form.link.data)
|
||||||
# Folder
|
# Folder
|
||||||
folder = AnimeFolder.query.filter_by(name=form.folder.data).first()
|
folder = AnimeFolder.query.filter_by(name=form.folder.data).first()
|
||||||
folder = folder if folder else AnimeFolder()
|
folder = folder if folder else AnimeFolder()
|
||||||
@ -177,7 +179,7 @@ def admin_edit(link_id=None):
|
|||||||
link.link = form.link.data
|
link.link = form.link.data
|
||||||
link.season = form.season.data
|
link.season = form.season.data
|
||||||
link.comment = form.comment.data
|
link.comment = form.comment.data
|
||||||
link.vf = form.is_vf.data
|
link.vf = instance.is_vf(form.link.data)
|
||||||
db.session.add(link)
|
db.session.add(link)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
remove_garbage(link)
|
remove_garbage(link)
|
||||||
|
@ -20,7 +20,7 @@ async def run_all(*args, **kwargs):
|
|||||||
return list(await gather(*coroutines))
|
return list(await gather(*coroutines))
|
||||||
|
|
||||||
|
|
||||||
def get_instance(url, query):
|
def get_instance(url, query=''):
|
||||||
if 'nyaa.si' in url:
|
if 'nyaa.si' in url:
|
||||||
return Nyaa(query)
|
return Nyaa(query)
|
||||||
elif 'nyaa.net' in url:
|
elif 'nyaa.net' in url:
|
||||||
|
@ -2,7 +2,7 @@ from datetime import datetime, timedelta
|
|||||||
|
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
from .core import ConnectorCore, ConnectorReturn, ConnectorCache, ConnectorLang, curl_content
|
from .core import ConnectorCore, ConnectorReturn, ConnectorCache, curl_content
|
||||||
from ..utils import parse_date, link_exist_in_db
|
from ..utils import parse_date, link_exist_in_db
|
||||||
|
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ class AnimeUltime(ConnectorCore):
|
|||||||
|
|
||||||
if not any(href == d['href'] for d in self.data):
|
if not any(href == d['href'] for d in self.data):
|
||||||
self.data.append({
|
self.data.append({
|
||||||
'lang': ConnectorLang.JP,
|
'vf': self.is_vf(),
|
||||||
'href': href,
|
'href': href,
|
||||||
'name': url.get_text(),
|
'name': url.get_text(),
|
||||||
'type': tds[1].get_text(),
|
'type': tds[1].get_text(),
|
||||||
@ -67,7 +67,7 @@ class AnimeUltime(ConnectorCore):
|
|||||||
href = '%s/file-0-1/%s' % (self.base_url, player[0]['data-serie'])
|
href = '%s/file-0-1/%s' % (self.base_url, player[0]['data-serie'])
|
||||||
|
|
||||||
self.data.append({
|
self.data.append({
|
||||||
'lang': ConnectorLang.JP,
|
'vf': self.is_vf(),
|
||||||
'href': '%s/file-0-1/%s' % (self.base_url, player[0]['data-serie']),
|
'href': '%s/file-0-1/%s' % (self.base_url, player[0]['data-serie']),
|
||||||
'name': name[0].get_text(),
|
'name': name[0].get_text(),
|
||||||
'type': ani_type[0].get_text().replace(':', ''),
|
'type': ani_type[0].get_text().replace(':', ''),
|
||||||
@ -96,7 +96,7 @@ class AnimeUltime(ConnectorCore):
|
|||||||
href = '%s/%s' % (self.base_url, link['href'])
|
href = '%s/%s' % (self.base_url, link['href'])
|
||||||
|
|
||||||
self.data.append({
|
self.data.append({
|
||||||
'lang': ConnectorLang.JP,
|
'vf': self.is_vf(),
|
||||||
'href': '%s/%s' % (self.base_url, link['href']),
|
'href': '%s/%s' % (self.base_url, link['href']),
|
||||||
'name': link.get_text(),
|
'name': link.get_text(),
|
||||||
'type': tds[4].get_text(),
|
'type': tds[4].get_text(),
|
||||||
@ -105,3 +105,7 @@ class AnimeUltime(ConnectorCore):
|
|||||||
})
|
})
|
||||||
|
|
||||||
self.on_error = False
|
self.on_error = False
|
||||||
|
|
||||||
|
@ConnectorCache.cache_data
|
||||||
|
def is_vf(self, url=''):
|
||||||
|
return False
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import re
|
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
@ -80,7 +79,7 @@ def curl_content(url, params=None, ajax=False, debug=True):
|
|||||||
output = ''
|
output = ''
|
||||||
http_code = 500
|
http_code = 500
|
||||||
method = 'post' if (params is not None) else 'get'
|
method = 'post' if (params is not None) else 'get'
|
||||||
instance = get_instance(url, '')
|
instance = get_instance(url)
|
||||||
|
|
||||||
if ajax:
|
if ajax:
|
||||||
headers = {'X-Requested-With': 'XMLHttpRequest'}
|
headers = {'X-Requested-With': 'XMLHttpRequest'}
|
||||||
@ -183,12 +182,9 @@ class ConnectorCore(ABC):
|
|||||||
def get_history(self):
|
def get_history(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@staticmethod
|
@abstractmethod
|
||||||
def get_lang(str_to_test):
|
def is_vf(self, url):
|
||||||
if re.search('(vf|multi|french)', str_to_test, re.IGNORECASE):
|
pass
|
||||||
return ConnectorLang.FR
|
|
||||||
else:
|
|
||||||
return ConnectorLang.JP
|
|
||||||
|
|
||||||
async def run(self):
|
async def run(self):
|
||||||
if self.on_error:
|
if self.on_error:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
from .core import ConnectorCore, ConnectorReturn, ConnectorCache, curl_content
|
from .core import ConnectorCore, ConnectorReturn, ConnectorCache, curl_content
|
||||||
from ..utils import parse_date, link_exist_in_db, check_blacklist_words
|
from ..utils import parse_date, link_exist_in_db, check_blacklist_words, check_if_vf
|
||||||
|
|
||||||
|
|
||||||
class Nyaa(ConnectorCore):
|
class Nyaa(ConnectorCore):
|
||||||
@ -59,7 +59,7 @@ class Nyaa(ConnectorCore):
|
|||||||
href = self.base_url + url['href']
|
href = self.base_url + url['href']
|
||||||
|
|
||||||
self.data.append({
|
self.data.append({
|
||||||
'lang': self.get_lang(url_safe),
|
'vf': check_if_vf(url_safe),
|
||||||
'href': href,
|
'href': href,
|
||||||
'name': url_safe,
|
'name': url_safe,
|
||||||
'comment': str(urls[0]).replace('/view/', self.base_url + '/view/') if has_comment else '',
|
'comment': str(urls[0]).replace('/view/', self.base_url + '/view/') if has_comment else '',
|
||||||
@ -74,3 +74,14 @@ class Nyaa(ConnectorCore):
|
|||||||
|
|
||||||
self.on_error = False
|
self.on_error = False
|
||||||
self.is_more = valid_trs and valid_trs is not len(trs) - 1
|
self.is_more = valid_trs and valid_trs is not len(trs) - 1
|
||||||
|
|
||||||
|
@ConnectorCache.cache_data
|
||||||
|
def is_vf(self, url):
|
||||||
|
response = curl_content(url)
|
||||||
|
|
||||||
|
if response['http_code'] == 200:
|
||||||
|
html = BeautifulSoup(response['output'], 'html.parser')
|
||||||
|
title = html.select('h3.panel-title')
|
||||||
|
return check_if_vf(title[0].get_text())
|
||||||
|
|
||||||
|
return False
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
from .core import ConnectorCore, ConnectorReturn, ConnectorCache, curl_content
|
from .core import ConnectorCore, ConnectorReturn, ConnectorCache, curl_content
|
||||||
from ..utils import parse_date, link_exist_in_db, check_blacklist_words
|
from ..utils import parse_date, link_exist_in_db, check_blacklist_words, check_if_vf
|
||||||
|
|
||||||
|
|
||||||
class Pantsu(ConnectorCore):
|
class Pantsu(ConnectorCore):
|
||||||
@ -51,7 +51,7 @@ class Pantsu(ConnectorCore):
|
|||||||
href = self.base_url + url['href']
|
href = self.base_url + url['href']
|
||||||
|
|
||||||
self.data.append({
|
self.data.append({
|
||||||
'lang': self.get_lang(url_safe),
|
'vf': check_if_vf(url_safe),
|
||||||
'href': href,
|
'href': href,
|
||||||
'name': url_safe,
|
'name': url_safe,
|
||||||
'comment': '',
|
'comment': '',
|
||||||
@ -67,3 +67,15 @@ class Pantsu(ConnectorCore):
|
|||||||
|
|
||||||
self.on_error = False
|
self.on_error = False
|
||||||
self.is_more = valid_trs and valid_trs is not len(trs) - 1
|
self.is_more = valid_trs and valid_trs is not len(trs) - 1
|
||||||
|
|
||||||
|
@ConnectorCache.cache_data
|
||||||
|
def is_vf(self, url):
|
||||||
|
response = curl_content(url)
|
||||||
|
|
||||||
|
if response['http_code'] == 200:
|
||||||
|
html = BeautifulSoup(response['output'], 'html.parser')
|
||||||
|
title = html.select('h1.torrent-hr')
|
||||||
|
print(title, flush=True)
|
||||||
|
return check_if_vf(title[0].get_text())
|
||||||
|
|
||||||
|
return False
|
||||||
|
@ -5,7 +5,7 @@ from urllib.parse import quote
|
|||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
from .core import ConnectorCore, ConnectorReturn, ConnectorCache, curl_content
|
from .core import ConnectorCore, ConnectorReturn, ConnectorCache, curl_content
|
||||||
from ..utils import parse_date, link_exist_in_db, check_blacklist_words
|
from ..utils import parse_date, link_exist_in_db, check_blacklist_words, check_if_vf
|
||||||
|
|
||||||
|
|
||||||
class YggTorrent(ConnectorCore):
|
class YggTorrent(ConnectorCore):
|
||||||
@ -58,7 +58,7 @@ class YggTorrent(ConnectorCore):
|
|||||||
valid_trs = valid_trs + 1
|
valid_trs = valid_trs + 1
|
||||||
|
|
||||||
self.data.append({
|
self.data.append({
|
||||||
'lang': self.get_lang(url_safe),
|
'vf': check_if_vf(url_safe),
|
||||||
'href': url['href'],
|
'href': url['href'],
|
||||||
'name': url_safe,
|
'name': url_safe,
|
||||||
'comment': '<a href="%s#comm" target="_blank"><i class="fa fa-comments-o"></i>%s</a>' %
|
'comment': '<a href="%s#comm" target="_blank"><i class="fa fa-comments-o"></i>%s</a>' %
|
||||||
@ -77,6 +77,17 @@ class YggTorrent(ConnectorCore):
|
|||||||
self.on_error = False
|
self.on_error = False
|
||||||
self.is_more = valid_trs and valid_trs is not len(trs) - 1
|
self.is_more = valid_trs and valid_trs is not len(trs) - 1
|
||||||
|
|
||||||
|
@ConnectorCache.cache_data
|
||||||
|
def is_vf(self, url):
|
||||||
|
response = curl_content(url)
|
||||||
|
|
||||||
|
if response['http_code'] == 200:
|
||||||
|
html = BeautifulSoup(response['output'], 'html.parser')
|
||||||
|
title = html.select('#title h1')
|
||||||
|
return check_if_vf(title[0].get_text())
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
class YggAnimation(YggTorrent):
|
class YggAnimation(YggTorrent):
|
||||||
title = 'YggAnimation'
|
title = 'YggAnimation'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from flask_wtf import FlaskForm
|
from flask_wtf import FlaskForm
|
||||||
from wtforms import BooleanField, HiddenField, StringField
|
from wtforms import HiddenField, StringField
|
||||||
from wtforms.fields.html5 import SearchField, URLField
|
from wtforms.fields.html5 import SearchField, URLField
|
||||||
from wtforms.validators import DataRequired
|
from wtforms.validators import DataRequired
|
||||||
|
|
||||||
@ -23,4 +23,3 @@ class EditForm(FlaskForm):
|
|||||||
season = StringField('season', validators=[DataRequired()])
|
season = StringField('season', validators=[DataRequired()])
|
||||||
comment = StringField('comment')
|
comment = StringField('comment')
|
||||||
keyword = StringField('keyword', validators=[DataRequired()])
|
keyword = StringField('keyword', validators=[DataRequired()])
|
||||||
is_vf = BooleanField('is_vf')
|
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
|
|
||||||
<div class="field is-horizontal">
|
<div class="field is-horizontal">
|
||||||
<div class="field-body">
|
<div class="field-body">
|
||||||
<div class="field column is-4">
|
<div class="field column is-6">
|
||||||
<div class="control is-expanded">
|
<div class="control is-expanded">
|
||||||
{{ action_form.link(value=link.link, class='input', placeholder='Link') }}
|
{{ action_form.link(value=link.link, class='input', placeholder='Link') }}
|
||||||
</div>
|
</div>
|
||||||
@ -69,7 +69,7 @@
|
|||||||
|
|
||||||
<div class="field is-horizontal">
|
<div class="field is-horizontal">
|
||||||
<div class="field-body">
|
<div class="field-body">
|
||||||
<div class="field column is-5">
|
<div class="field column is-6">
|
||||||
<div class="control is-expanded">
|
<div class="control is-expanded">
|
||||||
{{ action_form.comment(value=link.comment, class='input', placeholder='Comment') }}
|
{{ action_form.comment(value=link.comment, class='input', placeholder='Comment') }}
|
||||||
</div>
|
</div>
|
||||||
@ -90,11 +90,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<label class="checkbox">
|
|
||||||
<b>{{ true|flagify }}</b>
|
|
||||||
{{ action_form.is_vf(checked=link.vf) }}
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
<img class="favicon"
|
<img class="favicon"
|
||||||
src="{{ url_for('static', filename='favicons/%s' % torrent.self.favicon) }}" alt="">
|
src="{{ url_for('static', filename='favicons/%s' % torrent.self.favicon) }}" alt="">
|
||||||
<i> </i>
|
<i> </i>
|
||||||
{{ torrent.lang.value }}
|
{{ torrent.vf|flagify }}
|
||||||
<a href="{{ torrent.href }}" target="_blank">
|
<a href="{{ torrent.href }}" target="_blank">
|
||||||
{{ torrent.name|boldify|safe }}
|
{{ torrent.name|boldify|safe }}
|
||||||
</a>
|
</a>
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
{% for torrent in connector.data %}
|
{% for torrent in connector.data %}
|
||||||
<tr class="{{ torrent.class }}">
|
<tr class="{{ torrent.class }}">
|
||||||
<td>
|
<td>
|
||||||
{{ torrent.lang.value }}
|
{{ torrent.vf|flagify }}
|
||||||
<a href="{{ torrent.href }}" target="_blank">
|
<a href="{{ torrent.href }}" target="_blank">
|
||||||
{{ torrent.name|boldify|safe }}
|
{{ torrent.name|boldify|safe }}
|
||||||
</a>
|
</a>
|
||||||
|
@ -45,3 +45,7 @@ def clean_model(obj):
|
|||||||
|
|
||||||
def check_blacklist_words(url):
|
def check_blacklist_words(url):
|
||||||
return any(word.lower() in url.lower() for word in BLACKLIST_WORDS)
|
return any(word.lower() in url.lower() for word in BLACKLIST_WORDS)
|
||||||
|
|
||||||
|
|
||||||
|
def check_if_vf(title):
|
||||||
|
return any(word.lower() in title.lower() for word in ['vf', 'multi', 'french'])
|
||||||
|
Reference in New Issue
Block a user