Added manga-py source
14
manga-py-stable_1.x/helpers/1.js
Normal file
@@ -0,0 +1,14 @@
|
||||
function ytc(y) {
|
||||
var x = "", y = y.split(" ");
|
||||
for (var i = 0, n = y.length; i < n; i++) x += String.fromCharCode(y[i]);
|
||||
return x;
|
||||
}
|
||||
|
||||
function kxatz() {
|
||||
for (i = ytaw.length - 1; i >= 0; i--) {
|
||||
ytaw[i] = ytc(ytaw[i]);
|
||||
var obj = $('#imgs .wrap_img:eq(' + i + ') img'), alt = $('#imgs').attr('data-alt');
|
||||
obj.attr('alt', alt + ' - ' + obj.attr('alt'));
|
||||
obj.attr('data-src', ytaw[i]);
|
||||
}
|
||||
}
|
||||
7
manga-py-stable_1.x/helpers/after_script.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if [[ "$allow_deploy" = "true" ]]
|
||||
then
|
||||
coverage xml
|
||||
./cc-test-reporter after-build -t coverage.py --exit-code $TRAVIS_TEST_RESULT || true
|
||||
fi
|
||||
22
manga-py-stable_1.x/helpers/animextremist_com.py
Normal file
@@ -0,0 +1,22 @@
|
||||
from requests import get
|
||||
from os import system, path
|
||||
from lxml.html import document_fromstring
|
||||
|
||||
_path = path.dirname(path.dirname(path.realpath(__file__)))
|
||||
|
||||
all_manga_list = None
|
||||
n = 0
|
||||
base_path = 'http://animextremist.com/mangas-online/'
|
||||
while n < 10:
|
||||
try:
|
||||
all_manga_list = document_fromstring(get(base_path)).cssselect('li > a + a')
|
||||
break
|
||||
except Exception:
|
||||
pass
|
||||
n += 1
|
||||
|
||||
for i in all_manga_list:
|
||||
href = i.get('href')
|
||||
print('Downloading %s' % href)
|
||||
_str = 'cd {}; python3 manga.py --cli -i -u {}'
|
||||
system(_str.format(_path, href))
|
||||
24
manga-py-stable_1.x/helpers/before_deploy.sh
Normal file
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if [[ "$allow_deploy" = "true" ]]
|
||||
then
|
||||
|
||||
if [[ "$TRAVIS_TAG" != "" ]]
|
||||
then
|
||||
echo "Skip build bin package"
|
||||
# echo "Start build bin package"
|
||||
# cp helpers/.builder.py .
|
||||
# cp helpers/.providers_updater.py .
|
||||
# cp helpers/manga.spec .
|
||||
# python .providers_updater.py
|
||||
# pyinstaller manga.spec --log-level CRITICAL -y -F
|
||||
else
|
||||
echo "Make gh-pages"
|
||||
node-sass helpers/gh_pages_content/style.scss helpers/gh_pages_content/style.css --output-style compressed
|
||||
html-minifier helpers/gh_pages_content/index.html --output helpers/gh_pages_content/index.html --html5 --remove-comments --remove-tag-whitespace --collapse-inline-tag-whitespace --remove-attribute-quotes --collapse-whitespace
|
||||
html-minifier helpers/gh_pages_content/improvement.html --output helpers/gh_pages_content/improvement.html --html5 --remove-comments --remove-tag-whitespace --collapse-inline-tag-whitespace --remove-attribute-quotes --collapse-whitespace
|
||||
git add -A
|
||||
git commit -a -m upd
|
||||
fi
|
||||
|
||||
fi
|
||||
13
manga-py-stable_1.x/helpers/before_script.sh
Normal file
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
allow_deploy="false"
|
||||
|
||||
py_version=$(python --version)
|
||||
|
||||
if [[ "${py_version:7:-2}" = "3.5" ]]
|
||||
then
|
||||
allow_deploy="true"
|
||||
fi
|
||||
if [[ "$TRAVIS_TAG" = "" ]]
|
||||
then wget 'https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb' -O /tmp/chrome.deb && sudo dpkg -i /tmp/chrome.deb && sudo apt-get install -y -f --fix-missing
|
||||
fi
|
||||
118
manga-py-stable_1.x/helpers/gh_pages.py
Normal file
@@ -0,0 +1,118 @@
|
||||
from manga_py.providers import providers_list
|
||||
from manga_py.fs import root_path
|
||||
from manga_py.meta import __repo_name__
|
||||
from json import dumps
|
||||
from datetime import datetime
|
||||
|
||||
start_items = [
|
||||
# [ address, (0 - not worked, 1 - worked, 2 - alias), 'Comment']
|
||||
# ['http://bato.to', 0, ' - Batoto will be closing down permanently (Jan 18, 2018)'],
|
||||
['http://bulumanga.com', 0, ' - Closed'],
|
||||
['http://bwahahacomics.ru', 0, ' - Very little content. Possibly, will be done in the future.'],
|
||||
['http://com-x.life', 1, ' - One thread only!!! --no-multi-threads. <i class="v0"></i>'],
|
||||
['http://comic-walker.com', 0, ' - Maybe...'],
|
||||
['http://comico.jp', 1, ' - only public downloading now'],
|
||||
['http://comixology.com', 0, ' - Buy only. Not reading.'],
|
||||
['http://e-hentai.org', 1, '<i class="td"></i>'],
|
||||
['http://eatmanga.me', 1, '<i class="v0"></i>'],
|
||||
['http://dm5.com', 0, '<i class="d"></i>'],
|
||||
['http://gogomanga.co', 1, '<i class="v0"></i>'],
|
||||
['http://heavenmanga.biz', 2, '- See heavenmanga.site'],
|
||||
['http://hentai-chan.me', 1, '- Need fill access file'],
|
||||
['http://heymanga.me', 1, '<i class="v0"></i>'],
|
||||
['http://comic.k-manga.jp', 0, ' - Maybe...'],
|
||||
['http://japscan.com', 2, ' - See japscan.to'],
|
||||
['http://japscan.cc', 2, ' - See japscan.to'],
|
||||
['http://lhscans.com', 1, '- See rawlh.com'],
|
||||
['http://luscious.net', 1, '<i class="td"></i>'],
|
||||
['http://lezhin.com', 0, ' - Maybe...'],
|
||||
['http://manga-zone.org', 0, ' - Will not be implemented'],
|
||||
['http://mangaall.com', 2, '- See mangatrue.com'],
|
||||
['http://mangaforall.com', 1, ''],
|
||||
['http://mangafreak.net', 1, '<i class="v0"></i>, site down now'],
|
||||
['http://mangahead.me', 1, '<i class="v0"></i>, site down now'],
|
||||
['http://mangaleader.com', 1, '<i class="v0"></i> site down now'],
|
||||
['http://mangamove.com', 1, '<i class="v0"></i>, site down now'],
|
||||
['http://manganel.com', 1, '<i class="v0"></i>, site down now'],
|
||||
['http://mangaroot.com', 1, '<i class="v0"></i>, site down now, one thread only!!! --no-multi-threads'],
|
||||
['http://mangatail.com', 2, '- See mangatail.me'],
|
||||
['http://mangatrue.com', 1, ' - Site down now'],
|
||||
['http://mangaz.com', 0, ' - Maybe...'],
|
||||
['http://mg-zip.com', 0, ' - Will not be implemented'],
|
||||
['http://raw-zip.com', 0, ' - Will not be implemented'],
|
||||
['http://rawdevart.com', 1, '<i class="v0"></i>, very little content'],
|
||||
['http://s-manga.net', 0, ' - Maybe'],
|
||||
['http://sunday-webry.com', 0, ' - Not worked decryption images now. In develop.'],
|
||||
['http://tapas.io', 1, '<i class="v0"></i>, only public downloading now'],
|
||||
['http://tsumino.com', 1, '<i class="d"></i>'],
|
||||
['http://zip.raw.im', 0, ' - Will not be implemented'],
|
||||
['http://rawlh.com', 1, '- See lhscan.net'],
|
||||
['http://8muses.com', 0, '- Need decode page.'],
|
||||
['http://mangago.me', 0, '- Need decode page.'],
|
||||
|
||||
['http://digitalteam1.altervista.org', 0, ' - Site down now'],
|
||||
['http://heymanga.me', 0, ' - Site down now'],
|
||||
['http://lector.dangolinenofansub.com', 0, ' - See kumanga.com'],
|
||||
['http://lector.ytnofan.com', 0, ' - Site down now'],
|
||||
['http://leomanga.com', 0, ' - Site down now'],
|
||||
['http://mang.as', 0, ' - Site down now'],
|
||||
['http://santosfansub.com', 0, ' - Site down now'],
|
||||
]
|
||||
|
||||
|
||||
_start_items = [i[0] for i in start_items]
|
||||
|
||||
|
||||
def merge(*providers):
|
||||
for p in providers:
|
||||
yield from providers_list[p]
|
||||
|
||||
|
||||
def clean(providers):
|
||||
_list = {}
|
||||
for i in providers:
|
||||
_ = i.find('/')
|
||||
if not ~_:
|
||||
_ = i.strip('()')
|
||||
else:
|
||||
_ = i[:_].strip('()')
|
||||
_list['http://' + _.replace(r'\.', '.')] = ''
|
||||
return list(_list.keys())
|
||||
|
||||
|
||||
def aggregate(providers):
|
||||
_list = []
|
||||
for i in providers:
|
||||
if i not in _start_items:
|
||||
_list.append([i, 1, ''])
|
||||
return _list
|
||||
|
||||
|
||||
def prepare_html(html):
|
||||
with open(html, 'r') as r:
|
||||
content = r.read()
|
||||
with open(html, 'w') as w:
|
||||
content = content.replace('__repo_name__', __repo_name__)
|
||||
today = datetime.today()
|
||||
content = content.replace('__last_update__', '{}/{:0>2}/{:0>2} {:0>2}-{:0>2}-{:0>2}'.format(
|
||||
today.year, today.month, today.day, today.hour, today.minute, today.second
|
||||
))
|
||||
w.write(content)
|
||||
|
||||
|
||||
def build_providers():
|
||||
items = aggregate(clean(merge(*providers_list))) + start_items
|
||||
items = sorted(items, key=lambda l: l[0])
|
||||
return dumps(items)
|
||||
|
||||
|
||||
def main():
|
||||
path = root_path() + '/helpers/gh_pages_content/'
|
||||
with open(path + 'providers.json', 'w') as w:
|
||||
w.write(build_providers())
|
||||
prepare_html(path + 'index.html')
|
||||
prepare_html(path + 'improvement.html')
|
||||
|
||||
|
||||
# print(len(build_providers()))
|
||||
|
||||
BIN
manga-py-stable_1.x/helpers/gh_pages_content/#463018.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
21
manga-py-stable_1.x/helpers/gh_pages_content/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017 yuru-yuri
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
1
manga-py-stable_1.x/helpers/gh_pages_content/README.md
Normal file
@@ -0,0 +1 @@
|
||||
Go to [README.md](https://github.com/manga-py/manga-py/blob/master/README_RU.md)
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig><msapplication><tile><square70x70logo src="./favicon/ms-icon-70x70.png"/><square150x150logo src="./favicon/ms-icon-150x150.png"/><square310x310logo src="./favicon/ms-icon-310x310.png"/><TileColor>#ffffff</TileColor></tile></msapplication></browserconfig>
|
||||
@@ -0,0 +1,58 @@
|
||||
|
||||
((d) => {
|
||||
d.addEventListener('DOMContentLoaded', () => {
|
||||
/** global: repoUrl */
|
||||
if(typeof repoUrl == 'undefined')
|
||||
{
|
||||
// example: https://api.github.com/repos/manga-py/manga-py/releases/latest
|
||||
// example: https://api.github.com/repos/yuru-yuri/manga-py/releases/latest
|
||||
return;
|
||||
}
|
||||
fetch(repoUrl)
|
||||
.then(r => r.json())
|
||||
.then((r) => {
|
||||
const links = d.querySelector('#download-links');
|
||||
const tar = links.querySelector('.tar');
|
||||
const zip = links.querySelector('.zip');
|
||||
|
||||
tar.setAttribute('href', r.tarball_url);
|
||||
tar.setAttribute('active', 'true');
|
||||
zip.setAttribute('href', r.zipball_url);
|
||||
zip.setAttribute('active', 'true');
|
||||
});
|
||||
const ul = d.querySelector('#supported-list');
|
||||
if(!ul)
|
||||
{
|
||||
return;
|
||||
}
|
||||
fetch('./providers.json')
|
||||
.then(r => r.json())
|
||||
.then((r) => {
|
||||
let html = '', m = 0, done = 0;
|
||||
const sites = [];
|
||||
for(let i in r) {
|
||||
if (!r.hasOwnProperty(i)) continue;
|
||||
m+=1;
|
||||
html += '<li><input id="I' + m + '" type="checkbox" ' +
|
||||
(r[i][1] ? 'checked="" ' : '') +
|
||||
'disabled=""><label for="I' + m + '"></label><span>' +
|
||||
'<a target="_blank" href="' +
|
||||
r[i][0] + '">' +
|
||||
r[i][0] + '</a> ' +
|
||||
r[i][2] + '</span></li>';
|
||||
done += r[i][1] ? 1 : 0;
|
||||
r[i][1] && sites.push(r[i][0]);
|
||||
}
|
||||
ul.innerHTML = ('<!-- ' + r.length + ' ( ' + done + ' ) -->') + html;
|
||||
|
||||
let sitesLen = sites.length;
|
||||
const buttonElement = document.querySelector('#random-site');
|
||||
buttonElement.setAttribute('target', '_blank');
|
||||
buttonElement.addEventListener('click', () => {
|
||||
const idx = parseInt(Math.random() * sitesLen);
|
||||
buttonElement.setAttribute('href', sites[idx]);
|
||||
return true;
|
||||
});
|
||||
});
|
||||
});
|
||||
})(document);
|
||||
BIN
manga-py-stable_1.x/helpers/gh_pages_content/favicon.ico
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 7.9 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 7.9 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
252
manga-py-stable_1.x/helpers/gh_pages_content/improvement.html
Normal file
@@ -0,0 +1,252 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta name="keywords" content="manga,manga downloader,download manga,скачать манга,скачать мангу,манга">
|
||||
<link href="./style.css" media="all" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css?family=Roboto&subset=cyrillic-ext,latin-ext" rel="stylesheet">
|
||||
<title>Universal manga downloader :: Plans for improvement</title>
|
||||
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="./favicon/apple-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="./favicon/apple-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="./favicon/apple-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="./favicon/apple-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="./favicon/apple-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="./favicon/apple-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="./favicon/apple-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="./favicon/apple-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="./favicon/apple-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" sizes="192x192" href="./favicon/android-icon-192x192.png">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="./favicon/favicon-96x96.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="./favicon/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="./favicon/favicon-16x16.png">
|
||||
<link rel="manifest" href="./manifest.json">
|
||||
<meta name="msapplication-TileColor" content="#ffffff">
|
||||
<meta name="msapplication-TileImage" content="./favicon/ms-icon-144x144.png">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
<script>const repoUrl = 'https://api.github.com/repos/__repo_name__/releases/latest';</script>
|
||||
<script src="download_btns.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h1 class="panel">Manga downloader</h1>
|
||||
<h2 class="h2-panel">Plans for improvement</h2>
|
||||
<div id="download-links" class="download-links">
|
||||
<a href="https://github.com/__repo_name__/zipball/master">Download .zip</a>
|
||||
<a href="https://github.com/__repo_name__/tarball/master">Download .tar</a>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="links">
|
||||
<li>
|
||||
<a href="https://github.com/__repo_name__/#universal-assistant-download-manga">Documentation</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="./#resources-list">Resources list</a>
|
||||
</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<div class="content">
|
||||
<div class="content-inner-wrapper">
|
||||
<h4 class="h-ul" data-symbol="1">
|
||||
Implement providers for the following resources:
|
||||
</h4>
|
||||
<ul class="list">
|
||||
<!--<li>
|
||||
http://mangabackup.com
|
||||
</li>
|
||||
<li>
|
||||
http://mimotomi.com/manga
|
||||
</li>
|
||||
http://tits.asianhotties.me
|
||||
</li>
|
||||
<li>
|
||||
http://mangaboom.com
|
||||
</li>
|
||||
<li>
|
||||
http://eyeonmanga.com
|
||||
</li>
|
||||
<li>
|
||||
http://mg-zip.com
|
||||
</li>
|
||||
<li>
|
||||
http://saikoscans.ml
|
||||
</li>
|
||||
<li>
|
||||
http://mangasmash.com
|
||||
</li>
|
||||
<li>
|
||||
http://maigo.us
|
||||
</li>
|
||||
<li>
|
||||
http://www.friendshipscans.com
|
||||
http://www.friendshipscans.com/slide/directory/
|
||||
</li>
|
||||
<li>
|
||||
http://www.friendshipscans.com
|
||||
http://www.friendshipscans.com/slide/directory/
|
||||
</li>-->
|
||||
<li>
|
||||
http://comicride.jp
|
||||
</li>
|
||||
<li>
|
||||
http://exhentai.org
|
||||
</li>
|
||||
<li>
|
||||
http://lhscans.com
|
||||
</li>
|
||||
<li>
|
||||
http://https://imgur.com
|
||||
<!--http://https://imgur.com/a/f9tpg-->
|
||||
</li>
|
||||
<li>
|
||||
http://mangahost.cc
|
||||
</li>
|
||||
<li>
|
||||
http://manga.madokami.al
|
||||
<!-- END DAY -->
|
||||
</li>
|
||||
<li>
|
||||
http://3asq.info
|
||||
</li>
|
||||
<li>
|
||||
http://hamtruyen.com
|
||||
</li>
|
||||
<li>
|
||||
http://nettruyen.com
|
||||
</li>
|
||||
<li>
|
||||
http://truyenchon.com
|
||||
</li>
|
||||
<li>
|
||||
http://manga.mexat.com
|
||||
</li>
|
||||
<li>
|
||||
http://hamtruyen.com
|
||||
</li>
|
||||
<li>
|
||||
http://reader.sworddemon-scans.org/directory/
|
||||
</li>
|
||||
<li>
|
||||
http://sworddemon-scans.org
|
||||
<!--http://sworddemon-scans.org/reader/directory/-->
|
||||
<!--http://sworddemon-scans.org/knts/directory/-->
|
||||
</li>
|
||||
<li>
|
||||
http://choutensei.260mb.net
|
||||
<!--http://choutensei.260mb.net/directory/-->
|
||||
</li>
|
||||
<!--http://gofansub.net/visor/-->
|
||||
<!--<li>
|
||||
http://bmanga.net
|
||||
<!–http://bmanga.net/mangas/–>
|
||||
</li>-->
|
||||
<li>
|
||||
http://yaoimangaonline.com
|
||||
</li>
|
||||
</ul>
|
||||
<h4 class="h-ul" data-symbol="2">Maybe</h4>
|
||||
<ul>
|
||||
<li>
|
||||
http://comic-meteor.jp
|
||||
</li>
|
||||
<li>
|
||||
http://mangaz.com
|
||||
</li>
|
||||
<li>
|
||||
http://comic-polaris.jp
|
||||
</li>
|
||||
<li>
|
||||
http://comic.mag-garden.co.jp
|
||||
</li>
|
||||
<li>
|
||||
http://www.comic-valkyrie.com
|
||||
</li>
|
||||
<li>
|
||||
http://seiga.nicovideo.jp/manga/official/biggangan
|
||||
</li>
|
||||
<li>
|
||||
http://www.alphapolis.co.jp
|
||||
</li>
|
||||
<li>
|
||||
http://urasunday.com/index.html
|
||||
</li>
|
||||
<li>
|
||||
http://comic.naver.com/index.nhn
|
||||
</li>
|
||||
<li>
|
||||
http://comic-walker.com
|
||||
</li>
|
||||
<li>
|
||||
http://lezhin.com
|
||||
</li>
|
||||
<li>
|
||||
http://mangaz.com
|
||||
</li>
|
||||
<li>
|
||||
http://exhentai.org
|
||||
</li>
|
||||
<li>
|
||||
http://gameofscanlation.moe
|
||||
</li>
|
||||
<!--<li>
|
||||
http://kumanga.com
|
||||
</li>-->
|
||||
<li>
|
||||
http://lhtranslation.com
|
||||
</li>
|
||||
<li>
|
||||
http://manga.madokami.al
|
||||
</li>
|
||||
<li>
|
||||
http://corocoro.tv/webmanga/index.html
|
||||
</li>
|
||||
<li>
|
||||
http://s-manga.net
|
||||
</li>
|
||||
<li>
|
||||
http://sunday-webry.com
|
||||
</li>
|
||||
<li>
|
||||
http://lhtranslation.com
|
||||
</li>
|
||||
<li>
|
||||
http://ebookrenta.com
|
||||
</li>
|
||||
<li>
|
||||
http://crunchyroll.com <!-- flash -->
|
||||
</li>
|
||||
<li>
|
||||
http://buenaisla.net - Poor site structure
|
||||
<!--http://buenaisla.net/temas/categoria-manga-->
|
||||
</li>
|
||||
<li>
|
||||
http://nude-moon.me/
|
||||
</li>
|
||||
</ul>
|
||||
<!--mangadex.com-->
|
||||
<!--lhtranslation.net-->
|
||||
<!--https://theporndude.com/ru/hentai-porn-sites - need more sites -->
|
||||
|
||||
<h4 class="h-ul" data-symbol="3">
|
||||
Implement an online resource that allows you to download manga without a PC.
|
||||
<span class="subcontent"> - Questionable</span>
|
||||
</h4>
|
||||
|
||||
<h4 class="h-ul h-ul-two" data-symbol="3.1">
|
||||
Perhaps, to make a project on Heroku to implement the previous paragraph.
|
||||
<span class="subcontent"> - Questionable</span>
|
||||
</h4>
|
||||
|
||||
<h4 class="h-ul" data-symbol="4">
|
||||
Learn more sites with the ability to read manga online
|
||||
</h4>
|
||||
|
||||
</div>
|
||||
<div class="last-update">Latest update: __last_update__</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
85
manga-py-stable_1.x/helpers/gh_pages_content/index.html
Normal file
@@ -0,0 +1,85 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta name="keywords" content="manga,manga downloader,download manga,скачать манга,скачать мангу,манга">
|
||||
<link href="./style.css" media="all" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css?family=Roboto&subset=cyrillic-ext,latin-ext" rel="stylesheet">
|
||||
<title>Universal manga downloader</title>
|
||||
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="./favicon/apple-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="./favicon/apple-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="./favicon/apple-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="./favicon/apple-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="./favicon/apple-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="./favicon/apple-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="./favicon/apple-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="./favicon/apple-icon-152x152.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="./favicon/apple-icon-180x180.png">
|
||||
<link rel="icon" type="image/png" sizes="192x192" href="./favicon/android-icon-192x192.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="./favicon/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="./favicon/favicon-96x96.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="./favicon/favicon-16x16.png">
|
||||
<link rel="manifest" href="./manifest.json">
|
||||
<meta name="msapplication-TileColor" content="#ffffff">
|
||||
<meta name="msapplication-TileImage" content="./favicon/ms-icon-144x144.png">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
<script>const repoUrl = 'https://api.github.com/repos/__repo_name__/releases/latest';</script>
|
||||
<script src="download_btns.js"></script>
|
||||
<style>
|
||||
i.d {color: #4f0800}i.d:after{content: ' - Debug mode'}
|
||||
i.td {color: #4f0800}i.d:after{content: ' - Need test. Debug mode'}
|
||||
i.v0 {color: #005}i.v0:after{content: ' - Version 0.x only'}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="header">
|
||||
<h1 class="panel">Manga downloader</h1>
|
||||
<div id="download-links" class="download-links">
|
||||
<a class="zip" href="https://github.com/__repo_name__/zipball/master">Download .zip</a>
|
||||
<a class="tar" href="https://github.com/__repo_name__/tarball/master">Download .tar</a>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="links">
|
||||
<li>
|
||||
<a href="https://github.com/__repo_name__/#universal-assistant-download-manga">Documentation</a>
|
||||
</li><li>
|
||||
<a href="./improvement.html">Plans for improvement</a>
|
||||
</li><li>
|
||||
<a href="#random" id="random-site">Go to random site</a>
|
||||
</li>
|
||||
</ul>
|
||||
<hr>
|
||||
<div class="resources-list">
|
||||
<a name="resources-list"></a>
|
||||
<ul class="list" id="supported-list"></ul>
|
||||
</div>
|
||||
<div class="questions">
|
||||
<h2 class="panel">Questions</h2>
|
||||
<ul>
|
||||
<li>
|
||||
<div class="quest">How to offer more resources?</div>
|
||||
<div class="answer">
|
||||
Very simple. Write to me at sttv-pc@mail.ru or make a pull-request on
|
||||
<a target="_blank" href="https://github.com/__repo_name__/pulls"> github.com</a>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="quest">How to help?</div>
|
||||
<div class="answer">
|
||||
You can also make a
|
||||
<a target="_blank" href="https://github.com/__repo_name__/pulls">pull-request</a>,
|
||||
or create an
|
||||
<a target="_blank" href="https://github.com/__repo_name__/issues">issue</a>.<br>
|
||||
You can also crawl more
|
||||
sites that have a manga online reading available.
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="last-update">Latest update: __last_update__</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
41
manga-py-stable_1.x/helpers/gh_pages_content/manifest.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"name": "App",
|
||||
"icons": [
|
||||
{
|
||||
"src": ".\/favicon\/android-icon-36x36.png",
|
||||
"sizes": "36x36",
|
||||
"type": "image\/png",
|
||||
"density": "0.75"
|
||||
},
|
||||
{
|
||||
"src": ".\/favicon\/android-icon-48x48.png",
|
||||
"sizes": "48x48",
|
||||
"type": "image\/png",
|
||||
"density": "1.0"
|
||||
},
|
||||
{
|
||||
"src": ".\/favicon\/android-icon-72x72.png",
|
||||
"sizes": "72x72",
|
||||
"type": "image\/png",
|
||||
"density": "1.5"
|
||||
},
|
||||
{
|
||||
"src": ".\/favicon\/android-icon-96x96.png",
|
||||
"sizes": "96x96",
|
||||
"type": "image\/png",
|
||||
"density": "2.0"
|
||||
},
|
||||
{
|
||||
"src": ".\/favicon\/android-icon-144x144.png",
|
||||
"sizes": "144x144",
|
||||
"type": "image\/png",
|
||||
"density": "3.0"
|
||||
},
|
||||
{
|
||||
"src": ".\/favicon\/android-icon-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image\/png",
|
||||
"density": "4.0"
|
||||
}
|
||||
]
|
||||
}
|
||||
1
manga-py-stable_1.x/helpers/gh_pages_content/ok_flag.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 49 41" xmlns="http://www.w3.org/2000/svg"><g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><polyline id="Path" stroke="#4291DB" stroke-width="11" points="3.75653148 18.9804052 22.7537424 33.0899986 44.5883171 3.49546922"></polyline></g></svg>
|
||||
|
After Width: | Height: | Size: 289 B |
BIN
manga-py-stable_1.x/helpers/gh_pages_content/sprite_download.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
355
manga-py-stable_1.x/helpers/gh_pages_content/style.scss
Normal file
@@ -0,0 +1,355 @@
|
||||
/* http://meyerweb.com/eric/tools/css/reset/
|
||||
v2.0 | 20110126
|
||||
License: none (public domain)
|
||||
*/
|
||||
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, u, i, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, embed,
|
||||
figure, figcaption, footer, header, hgroup,
|
||||
menu, nav, output, ruby, section, summary,
|
||||
time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
/* HTML5 display-role reset for older browsers */
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
display: block;
|
||||
}
|
||||
|
||||
body {
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
blockquote, q {
|
||||
quotes: none;
|
||||
}
|
||||
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
background: #fff;
|
||||
font-size: 16px;
|
||||
font-family: 'Roboto', 'Noto', sans-serif;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
display: block;
|
||||
&.panel {
|
||||
border-bottom: 1px solid #eaecef;
|
||||
padding: .5rem .6rem;
|
||||
max-width: 31.875rem;
|
||||
}
|
||||
}
|
||||
.header h2.h2-panel {
|
||||
font-size: 1.9rem;
|
||||
max-width: 100%;
|
||||
padding: .5rem .6rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-weight: bold;
|
||||
font-size: 2.6rem;
|
||||
margin-bottom: .2rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-weight: bold;
|
||||
font-size: 2.2rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-weight: bold;
|
||||
font-size: 1.8rem;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-weight: bold;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-weight: bold;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 1.2rem;
|
||||
color: #776;
|
||||
}
|
||||
|
||||
a[href] {
|
||||
color: #7bc7ff;
|
||||
font-size: 1.1rem;
|
||||
text-decoration: underline;
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
ul.links {
|
||||
& > li {
|
||||
line-height: 3rem;
|
||||
display: inline-flex;
|
||||
margin-bottom: .5rem;
|
||||
margin-right: .5rem;
|
||||
}
|
||||
a {
|
||||
line-height: 1.25;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
vertical-align: middle;
|
||||
user-select: none;
|
||||
border: 1px solid #ccc;
|
||||
padding: .5rem 1rem;
|
||||
font-size: 1rem;
|
||||
border-radius: .25rem;
|
||||
transition: all .2s ease-in-out;
|
||||
color: #292b2c;
|
||||
background-color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
ul, ul > li {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding: 1rem 1rem;
|
||||
background: #f6f8fa;
|
||||
}
|
||||
|
||||
hr {
|
||||
padding-bottom: 0.3em;
|
||||
font-size: 1.5em;
|
||||
border: 0;
|
||||
border-bottom: 1px solid #eaecef;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.questions {
|
||||
font-size: 1.4rem;
|
||||
li {
|
||||
padding-left: 1rem;
|
||||
& + li {
|
||||
padding-top: 1rem;
|
||||
}
|
||||
}
|
||||
.quest {
|
||||
font-weight: bold;
|
||||
padding-bottom: .3rem;
|
||||
}
|
||||
}
|
||||
|
||||
ul.list li {
|
||||
& + li {
|
||||
padding-top: .5rem;
|
||||
}
|
||||
a {
|
||||
color: #63a7d2;
|
||||
line-height: 1.7rem;
|
||||
}
|
||||
$blue: rgba(66, 145, 219, 0.53);
|
||||
$active-blue: rgba(186, 214, 241, 0.53);
|
||||
label {
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
padding-left: 1em;
|
||||
}
|
||||
input[type=checkbox] {
|
||||
display: none;
|
||||
//position: absolute;
|
||||
//width: 1px;
|
||||
//height: 1px;
|
||||
//border: 0 none;
|
||||
//background: transparent;
|
||||
//margin: 0;
|
||||
//margin-top: 5px;
|
||||
& + label {
|
||||
background: #fff no-repeat center left 2px;
|
||||
display: inline-block;
|
||||
width: 1rem;
|
||||
height: 1.25rem;
|
||||
top: -.01rem;
|
||||
position: relative;
|
||||
border-radius: 3px;
|
||||
border: 2px solid $active-blue;
|
||||
//transition: border .3s ease;
|
||||
font-size: 1rem;
|
||||
box-sizing: border-box;
|
||||
margin-right: .4rem;
|
||||
}
|
||||
&:checked {
|
||||
& + label {
|
||||
background-image: url('ok_flag.svg');
|
||||
background-size: 75%;
|
||||
border-color: $blue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.header {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.download-links {
|
||||
position: absolute;
|
||||
top: .5rem;
|
||||
right: 1rem;
|
||||
a {
|
||||
background: url('sprite_download.png');
|
||||
background-position-y: bottom;
|
||||
display: inline-block;
|
||||
width: 90px;
|
||||
height: 70px;
|
||||
text-indent: -5000px;
|
||||
overflow: hidden;
|
||||
opacity: .9;
|
||||
& + a {
|
||||
background-position-x: right;
|
||||
}
|
||||
&[active] {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 100%;
|
||||
margin: auto;
|
||||
background: #f5f7fa;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
// Small devices (landscape phones, 576px and up)
|
||||
@media (max-width: 767px) {
|
||||
.header h1.panel,
|
||||
.header h2 {
|
||||
max-width: 20rem;
|
||||
max-width: calc(100% - 185px);
|
||||
font-size: 2.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 360px) {
|
||||
.header h1.panel {
|
||||
padding-top: 3rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 575px) {
|
||||
.header h1.panel {
|
||||
max-width: 16rem;
|
||||
max-width: calc(100% - 165px);
|
||||
}
|
||||
|
||||
.download-links {
|
||||
right: .1rem;
|
||||
transform: scale(.9);
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 576px) {
|
||||
.container {
|
||||
width: 550px;
|
||||
}
|
||||
}
|
||||
|
||||
// Medium devices (tablets, 768px and up)
|
||||
@media (min-width: 768px) {
|
||||
.container {
|
||||
width: 750px;
|
||||
}
|
||||
}
|
||||
|
||||
// Large devices (desktops, 992px and up)
|
||||
@media (min-width: 992px) {
|
||||
.container {
|
||||
width: 750px;
|
||||
}
|
||||
}
|
||||
|
||||
// Extra large devices (large desktops, 1200px and up)
|
||||
@media (min-width: 1200px) {
|
||||
.container {
|
||||
width: 750px;
|
||||
}
|
||||
}
|
||||
|
||||
// touch devices
|
||||
@media (pointer: coarse) {
|
||||
ul.list li {
|
||||
a {
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
& + li {
|
||||
padding-top: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
h4[data-symbol] {
|
||||
margin-left: 1.3rem;
|
||||
position: relative;
|
||||
&:after {
|
||||
font-weight: 500;
|
||||
font-size: 1.2rem;
|
||||
opacity: .9;
|
||||
font-style: normal;
|
||||
content: attr(data-symbol) ")";
|
||||
position: absolute;
|
||||
left: -1rem;
|
||||
top: 1.05rem;
|
||||
}
|
||||
}
|
||||
|
||||
.h-ul {
|
||||
padding: 1rem 1rem 0;
|
||||
&.h-ul-two {
|
||||
padding: 1rem 1rem 0 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.content-inner-wrapper {
|
||||
padding-left: .4rem;
|
||||
}
|
||||
|
||||
span.subcontent {
|
||||
font-size: 1rem;
|
||||
font-weight: normal;
|
||||
color: #565656;
|
||||
}
|
||||
|
||||
.last-update {
|
||||
text-align: center;
|
||||
font-size: .7rem;
|
||||
color: #ccc;
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
22
manga-py-stable_1.x/helpers/inmanga_com.py
Normal file
@@ -0,0 +1,22 @@
|
||||
from json import loads
|
||||
from requests import get
|
||||
from os import system, path
|
||||
|
||||
_path = path.dirname(path.dirname(path.realpath(__file__)))
|
||||
|
||||
all_manga_list = None
|
||||
n = 0
|
||||
while n < 10:
|
||||
try:
|
||||
all_manga_list = loads(get('http://inmanga.com/OnMangaQuickSearch/Source/QSMangaList.json').text)
|
||||
break
|
||||
except Exception:
|
||||
pass
|
||||
n += 1
|
||||
if not all_manga_list:
|
||||
print('Error! QSMangaList is not correct json?')
|
||||
|
||||
for i in all_manga_list:
|
||||
print('Downloading %s' % i['Name'])
|
||||
_str = 'cd {}; python3 manga.py --cli -i -u http://inmanga.com/ver/manga/{}/{}'
|
||||
system(_str.format(_path, i['Name'], i['Name'], i['Identification']))
|
||||
161
manga-py-stable_1.x/helpers/python/Dockerfile
Normal file
@@ -0,0 +1,161 @@
|
||||
FROM debian:jessie-slim
|
||||
|
||||
# ensure local python is preferred over distribution python
|
||||
ENV PATH /usr/local/bin:$PATH
|
||||
|
||||
# http://bugs.python.org/issue19846
|
||||
# > At the moment, setting "LANG=C" on a Linux system *fundamentally breaks Python 3*, and that's not OK.
|
||||
ENV LANG C.UTF-8
|
||||
|
||||
# runtime dependencies
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
netbase \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ENV GPG_KEY 0D96DF4D4110E5C43FBFB17F2D347EA6AA65421D
|
||||
ENV PYTHON_VERSION 3.6.8
|
||||
|
||||
# if this is called "PIP_VERSION", pip explodes with "ValueError: invalid truth value '<VERSION>'"
|
||||
ENV PYTHON_PIP_VERSION 19.1.1
|
||||
|
||||
ARG HOST_UID=1000
|
||||
ARG HOST_GID=1000
|
||||
ARG HOST_USER=manga
|
||||
ARG HOST_GROUP=manga
|
||||
ARG HOME='/home/manga'
|
||||
|
||||
RUN groupadd -g $HOST_GID $HOST_GROUP \
|
||||
&& groupadd sudonopswd \
|
||||
&& useradd -m -l -g $HOST_GROUP -u $HOST_UID $HOST_USER
|
||||
|
||||
RUN mkdir $HOME -p; \
|
||||
chown $HOST_USER:$HOST_GROUP $HOME
|
||||
|
||||
RUN touch $HOME/.bashrc; \
|
||||
mkdir $HOME/Manga; \
|
||||
chown $HOST_USER:$HOST_GROUP $HOME/.bashrc; \
|
||||
chown $HOST_USER:$HOST_GROUP $HOME/Manga
|
||||
|
||||
RUN set -ex \
|
||||
\
|
||||
&& savedAptMark="$(apt-mark showmanual)" \
|
||||
&& apt-get update && apt-get install -y --no-install-recommends \
|
||||
dpkg-dev \
|
||||
gcc \
|
||||
libbz2-dev \
|
||||
libc6-dev \
|
||||
libexpat1-dev \
|
||||
libffi-dev \
|
||||
libgdbm-dev \
|
||||
liblzma-dev \
|
||||
libncursesw5-dev \
|
||||
libreadline-dev \
|
||||
libsqlite3-dev \
|
||||
libssl-dev \
|
||||
make \
|
||||
tk-dev \
|
||||
build-essential \
|
||||
wget \
|
||||
xz-utils \
|
||||
zlib1g-dev \
|
||||
curl \
|
||||
# python autocomplete utilite
|
||||
python3-argcomplete \
|
||||
# as of Stretch, "gpg" is no longer included by default
|
||||
$(command -v gpg > /dev/null || echo 'gnupg dirmngr') \
|
||||
\
|
||||
&& wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" \
|
||||
&& wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc" \
|
||||
&& export GNUPGHOME="$(mktemp -d)" \
|
||||
&& gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY" \
|
||||
&& gpg --batch --verify python.tar.xz.asc python.tar.xz \
|
||||
&& { command -v gpgconf > /dev/null && gpgconf --kill all || :; } \
|
||||
&& rm -rf "$GNUPGHOME" python.tar.xz.asc \
|
||||
&& mkdir -p /usr/src/python \
|
||||
&& tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz \
|
||||
&& rm python.tar.xz \
|
||||
\
|
||||
&& cd /usr/src/python \
|
||||
&& gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \
|
||||
&& ./configure \
|
||||
--build="$gnuArch" \
|
||||
--enable-loadable-sqlite-extensions \
|
||||
--enable-shared \
|
||||
--with-system-expat \
|
||||
--with-system-ffi \
|
||||
--without-ensurepip \
|
||||
&& make -j "$(nproc)" \
|
||||
&& make install \
|
||||
&& ldconfig \
|
||||
\
|
||||
&& apt-mark auto '.*' > /dev/null \
|
||||
&& apt-mark manual $savedAptMark \
|
||||
&& find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' \
|
||||
| awk '/=>/ { print $(NF-1) }' \
|
||||
| sort -u \
|
||||
| xargs -r dpkg-query --search \
|
||||
| cut -d: -f1 \
|
||||
| sort -u \
|
||||
| xargs -r apt-mark manual; \
|
||||
\
|
||||
wget -O get-pip.py 'https://bootstrap.pypa.io/get-pip.py'; \
|
||||
\
|
||||
python3 get-pip.py \
|
||||
--disable-pip-version-check \
|
||||
--no-cache-dir \
|
||||
"pip==$PYTHON_PIP_VERSION" \
|
||||
; \
|
||||
python3 -mpip --version \
|
||||
\
|
||||
&& python3 --version \
|
||||
# Because it requires gcc
|
||||
&& python3 -mpip install manga-py -U \
|
||||
&& curl -sL https://deb.nodesource.com/setup_12.x | bash - \
|
||||
&& apt-get install -y nodejs \
|
||||
&& apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
\
|
||||
&& find /usr/local -depth \
|
||||
\( \
|
||||
\( -type d -a \( -name test -o -name tests \) \) \
|
||||
-o \
|
||||
\( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \
|
||||
\) -exec rm -rf '{}' + \
|
||||
&& rm -rf /usr/src/python
|
||||
|
||||
# make some useful symlinks that are expected to exist
|
||||
RUN cd /usr/local/bin \
|
||||
&& ln -s idle3 idle \
|
||||
&& ln -s pydoc3 pydoc \
|
||||
&& ln -s python3 python \
|
||||
&& ln -s python3-config python-config
|
||||
|
||||
RUN set -ex; \
|
||||
\
|
||||
savedAptMark="$(apt-mark showmanual)"; \
|
||||
\
|
||||
apt-mark auto '.*' > /dev/null; \
|
||||
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \
|
||||
rm -rf /var/lib/apt/lists/*; \
|
||||
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
|
||||
\
|
||||
find /usr/local -depth \
|
||||
\( \
|
||||
\( -type d -a \( -name test -o -name tests \) \) \
|
||||
-o \
|
||||
\( -type f -a \( -name '*.pyc' -o -name '*.pyo' \) \) \
|
||||
\) -exec rm -rf '{}' +; \
|
||||
rm -f get-pip.py
|
||||
|
||||
USER $HOST_USER
|
||||
WORKDIR $HOME
|
||||
|
||||
RUN echo 'Manga-py version: '; \
|
||||
manga-py --version; \
|
||||
rm -rf /tmp/.P*
|
||||
|
||||
# docker run -it -v /tmp/destination:/home/manga mangadl/manga-py
|
||||
|
||||
CMD ["bash"]
|
||||
|
||||