parent
be22e9c072
commit
38a13dfeae
347
.idea/workspace.xml
generated
347
.idea/workspace.xml
generated
@ -2,7 +2,26 @@
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="52845b00-4ab8-4409-b4b9-d104838212e1" name="Default" comment="">
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/Changelog.md" afterPath="$PROJECT_DIR$/Changelog.md" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/ReadMe.md" afterPath="$PROJECT_DIR$/ReadMe.md" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/docs/Changelog.md" afterPath="$PROJECT_DIR$/docs/Changelog.md" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/docs/index.md" afterPath="$PROJECT_DIR$/docs/index.md" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/MANIFEST" afterPath="$PROJECT_DIR$/MANIFEST" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/comic_dl/__init__.py" afterPath="$PROJECT_DIR$/comic_dl/__init__.py" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/comic_dl/downloader/cookies_required.py" afterPath="$PROJECT_DIR$/comic_dl/downloader/cookies_required.py" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/comic_dl/downloader/universal.py" afterPath="$PROJECT_DIR$/comic_dl/downloader/universal.py" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/comic_dl/sites/batoto.py" afterPath="$PROJECT_DIR$/comic_dl/sites/batoto.py" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/comic_dl/sites/comic_naver.py" afterPath="$PROJECT_DIR$/comic_dl/sites/comic_naver.py" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/comic_dl/sites/gomanga.py" afterPath="$PROJECT_DIR$/comic_dl/sites/gomanga.py" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/comic_dl/sites/kisscomicus.py" afterPath="$PROJECT_DIR$/comic_dl/sites/kisscomicus.py" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/comic_dl/sites/kissmanga.py" afterPath="$PROJECT_DIR$/comic_dl/sites/kissmanga.py" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/comic_dl/sites/mangafox.py" afterPath="$PROJECT_DIR$/comic_dl/sites/mangafox.py" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/comic_dl/sites/readcomic.py" afterPath="$PROJECT_DIR$/comic_dl/sites/readcomic.py" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/comic_dl/sites/yomanga.py" afterPath="$PROJECT_DIR$/comic_dl/sites/yomanga.py" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/comic_dl/version.py" afterPath="$PROJECT_DIR$/comic_dl/version.py" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/setup.cfg" afterPath="$PROJECT_DIR$/setup.cfg" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/setup.py" afterPath="$PROJECT_DIR$/setup.py" />
|
||||
</list>
|
||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||
<option name="TRACKING_ENABLED" value="true" />
|
||||
@ -13,7 +32,7 @@
|
||||
</component>
|
||||
<component name="CoverageDataManager">
|
||||
<SUITE FILE_PATH="coverage/comic-dl$readcomic.coverage" NAME="readcomic Coverage Results" MODIFIED="1483330843656" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/comic_dl/sites" />
|
||||
<SUITE FILE_PATH="coverage/comic-dl$comic_dl.coverage" NAME="comic_dl Coverage Results" MODIFIED="1484207738752" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/comic_dl" />
|
||||
<SUITE FILE_PATH="coverage/comic-dl$comic_dl.coverage" NAME="comic_dl Coverage Results" MODIFIED="1487213669271" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/comic_dl" />
|
||||
<SUITE FILE_PATH="coverage/comic-dl$comic_naver.coverage" NAME="comic_naver Coverage Results" MODIFIED="1483326807533" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/comic_dl/sites" />
|
||||
</component>
|
||||
<component name="CreatePatchCommitExecutor">
|
||||
@ -25,8 +44,8 @@
|
||||
<file leaf-file-name="comic_dl.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/comic_dl.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="221">
|
||||
<caret line="13" column="40" lean-forward="false" selection-start-line="13" selection-start-column="40" selection-end-line="13" selection-end-column="40" />
|
||||
<state relative-caret-position="323">
|
||||
<caret line="27" column="74" lean-forward="false" selection-start-line="27" selection-start-column="74" selection-end-line="27" selection-end-column="74" />
|
||||
<folding>
|
||||
<element signature="e#47#85#0" expanded="true" />
|
||||
</folding>
|
||||
@ -34,6 +53,30 @@
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="cookies_required.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/downloader/cookies_required.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1224">
|
||||
<caret line="72" column="19" lean-forward="false" selection-start-line="72" selection-start-column="19" selection-end-line="72" selection-end-column="19" />
|
||||
<folding>
|
||||
<element signature="e#496#534#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="universal.py" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/downloader/universal.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="641">
|
||||
<caret line="40" column="12" lean-forward="false" selection-start-line="40" selection-start-column="12" selection-end-line="40" selection-end-column="12" />
|
||||
<folding>
|
||||
<element signature="e#432#470#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="honcho.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/honcho.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
@ -44,38 +87,11 @@
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="readcomic.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/sites/readcomic.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="408">
|
||||
<caret line="88" column="19" lean-forward="false" selection-start-line="88" selection-start-column="19" selection-end-line="88" selection-end-column="19" />
|
||||
<folding>
|
||||
<element signature="e#47#86#0" expanded="true" />
|
||||
<element signature="e#384#1537#0" expanded="false" />
|
||||
<element signature="e#1586#2954#0" expanded="false" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="kisscomicus.py" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/sites/kisscomicus.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="317">
|
||||
<caret line="68" column="26" lean-forward="true" selection-start-line="68" selection-start-column="26" selection-end-line="68" selection-end-column="26" />
|
||||
<folding>
|
||||
<element signature="e#47#62#0" expanded="true" />
|
||||
<element signature="e#291#2333#0" expanded="false" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="version.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/version.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="102">
|
||||
<caret line="6" column="24" lean-forward="false" selection-start-line="6" selection-start-column="24" selection-end-line="6" selection-end-column="24" />
|
||||
<caret line="6" column="25" lean-forward="false" selection-start-line="6" selection-start-column="25" selection-end-line="6" selection-end-column="25" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
@ -90,16 +106,41 @@
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="FindInProjectRecents">
|
||||
<findStrings>
|
||||
<find>Image L</find>
|
||||
<find>Complete</find>
|
||||
<find>sys</find>
|
||||
<find>logging</find>
|
||||
<find>re.</find>
|
||||
<find>reques</find>
|
||||
<find>I took</find>
|
||||
<find>cfscrape.</find>
|
||||
<find>sys.</find>
|
||||
<find>requests.</find>
|
||||
<find>shutil.</find>
|
||||
<find>logging.</find>
|
||||
<find>os.</find>
|
||||
</findStrings>
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="IdeDocumentHistory">
|
||||
<option name="CHANGED_PATHS">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/comic_dl/sites/readcomic.py" />
|
||||
<option value="$PROJECT_DIR$/comic_dl/honcho.py" />
|
||||
<option value="$PROJECT_DIR$/comic_dl/sites/kisscomicus.py" />
|
||||
<option value="$PROJECT_DIR$/comic_dl/version.py" />
|
||||
<option value="$PROJECT_DIR$/comic_dl/sites/comic_naver.py" />
|
||||
<option value="$PROJECT_DIR$/comic_dl/sites/kissmanga.py" />
|
||||
<option value="$PROJECT_DIR$/comic_dl/sites/gomanga.py" />
|
||||
<option value="$PROJECT_DIR$/comic_dl/sites/yomanga.py" />
|
||||
<option value="$PROJECT_DIR$/comic_dl/sites/mangafox.py" />
|
||||
<option value="$PROJECT_DIR$/comic_dl/sites/readcomic.py" />
|
||||
<option value="$PROJECT_DIR$/comic_dl/sites/kisscomicus.py" />
|
||||
<option value="$PROJECT_DIR$/comic_dl/sites/batoto.py" />
|
||||
<option value="$PROJECT_DIR$/comic_dl/downloader/cookies_required.py" />
|
||||
<option value="$PROJECT_DIR$/comic_dl/downloader/universal.py" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
@ -130,8 +171,6 @@
|
||||
<foldersAlwaysOnTop value="true" />
|
||||
</navigator>
|
||||
<panes>
|
||||
<pane id="Scope" />
|
||||
<pane id="Scratches" />
|
||||
<pane id="ProjectPane">
|
||||
<subPane>
|
||||
<PATH>
|
||||
@ -196,11 +235,15 @@
|
||||
</PATH>
|
||||
</subPane>
|
||||
</pane>
|
||||
<pane id="Scratches" />
|
||||
<pane id="Scope" />
|
||||
</panes>
|
||||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||
<property name="js.eslint.eslintPackage" value="" />
|
||||
<property name="nodejs_interpreter_path" value="C:/Program Files/nodejs/node" />
|
||||
<property name="js-jscs-nodeInterpreter" value="C:\Program Files\nodejs\node.exe" />
|
||||
</component>
|
||||
<component name="RunManager" selected="Python.comic_dl">
|
||||
<configuration default="false" name="comic_naver" type="PythonConfigurationType" factoryName="Python" temporary="true">
|
||||
@ -227,15 +270,15 @@
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="SDK_HOME" value="C:\Pythons\Python3.5\python.exe" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/comic_dl" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="IS_MODULE_SDK" value="false" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<module name="comic-dl" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
|
||||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/comic_dl/comic_dl.py" />
|
||||
<option name="PARAMETERS" value="-i "http://kisscomic.us/comics/sons-of-anarchy-redwood-original.html"" />
|
||||
<option name="PARAMETERS" value="-i "http://bato.to/comic/_/comics/12-beast-r8357" --verbose -u AnimeRG -p 8cbb6ceb8d9079d" />
|
||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||
<method />
|
||||
</configuration>
|
||||
@ -498,16 +541,17 @@
|
||||
<servers />
|
||||
</component>
|
||||
<component name="ToolWindowManager">
|
||||
<frame x="-8" y="-8" width="1936" height="1056" extended-state="6" />
|
||||
<frame x="-8" y="-8" width="1936" height="1056" extended-state="7" />
|
||||
<editor active="true" />
|
||||
<layout>
|
||||
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.25799572" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
|
||||
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.26332623" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
|
||||
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32900432" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.32900432" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32900432" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
|
||||
@ -517,7 +561,6 @@
|
||||
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
|
||||
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
</layout>
|
||||
</component>
|
||||
@ -534,6 +577,94 @@
|
||||
<watches-manager />
|
||||
</component>
|
||||
<component name="editorHistoryManager">
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/comic_dl.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="85">
|
||||
<caret line="13" column="14" lean-forward="false" selection-start-line="13" selection-start-column="14" selection-end-line="13" selection-end-column="14" />
|
||||
<folding>
|
||||
<element signature="e#47#85#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/honcho.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="306">
|
||||
<caret line="22" column="22" lean-forward="false" selection-start-line="22" selection-start-column="11" selection-end-line="22" selection-end-column="22" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/sites/readcomic.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1326">
|
||||
<caret line="88" column="0" lean-forward="false" selection-start-line="88" selection-start-column="0" selection-end-line="88" selection-end-column="0" />
|
||||
<folding>
|
||||
<element signature="e#47#86#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/sites/kisscomicus.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/version.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="102">
|
||||
<caret line="6" column="24" lean-forward="false" selection-start-line="6" selection-start-column="24" selection-end-line="6" selection-end-column="24" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/comic_dl.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="85">
|
||||
<caret line="13" column="14" lean-forward="false" selection-start-line="13" selection-start-column="14" selection-end-line="13" selection-end-column="14" />
|
||||
<folding>
|
||||
<element signature="e#47#85#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/honcho.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="374">
|
||||
<caret line="22" column="22" lean-forward="false" selection-start-line="22" selection-start-column="11" selection-end-line="22" selection-end-column="22" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/sites/readcomic.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1496">
|
||||
<caret line="88" column="0" lean-forward="true" selection-start-line="88" selection-start-column="0" selection-end-line="88" selection-end-column="0" />
|
||||
<folding>
|
||||
<element signature="e#47#86#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/sites/kisscomicus.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/version.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="102">
|
||||
<caret line="6" column="24" lean-forward="false" selection-start-line="6" selection-start-column="24" selection-end-line="6" selection-end-column="24" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/comic_dl.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="221">
|
||||
@ -558,8 +689,6 @@
|
||||
<caret line="37" column="30" lean-forward="false" selection-start-line="37" selection-start-column="30" selection-end-line="37" selection-end-column="30" />
|
||||
<folding>
|
||||
<element signature="e#47#86#0" expanded="true" />
|
||||
<element signature="e#384#1537#0" expanded="false" />
|
||||
<element signature="e#1586#2954#0" expanded="false" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
@ -568,10 +697,7 @@
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="0">
|
||||
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
<folding>
|
||||
<element signature="e#47#62#0" expanded="true" />
|
||||
<element signature="e#291#2333#0" expanded="false" />
|
||||
</folding>
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
@ -593,27 +719,11 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/sites/comic_naver.py">
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/version.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="395">
|
||||
<caret line="52" column="39" lean-forward="false" selection-start-line="51" selection-start-column="8" selection-end-line="52" selection-end-column="39" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/downloader/universal.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="303">
|
||||
<caret line="34" column="52" lean-forward="false" selection-start-line="34" selection-start-column="37" selection-end-line="34" selection-end-column="52" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/comic_dl.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="221">
|
||||
<caret line="13" column="40" lean-forward="false" selection-start-line="13" selection-start-column="40" selection-end-line="13" selection-end-column="40" />
|
||||
<folding>
|
||||
<element signature="e#47#85#0" expanded="true" />
|
||||
</folding>
|
||||
<state relative-caret-position="102">
|
||||
<caret line="6" column="25" lean-forward="false" selection-start-line="6" selection-start-column="25" selection-end-line="6" selection-end-column="25" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
@ -625,33 +735,104 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/sites/readcomic.py">
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/sites/gomanga.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="408">
|
||||
<caret line="88" column="19" lean-forward="false" selection-start-line="88" selection-start-column="19" selection-end-line="88" selection-end-column="19" />
|
||||
<state relative-caret-position="170">
|
||||
<caret line="10" column="29" lean-forward="false" selection-start-line="10" selection-start-column="29" selection-end-line="10" selection-end-column="29" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/sites/comic_naver.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="170">
|
||||
<caret line="10" column="0" lean-forward="false" selection-start-line="10" selection-start-column="0" selection-end-line="10" selection-end-column="36" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/sites/mangafox.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="235">
|
||||
<caret line="69" column="21" lean-forward="false" selection-start-line="69" selection-start-column="15" selection-end-line="69" selection-end-column="21" />
|
||||
<folding>
|
||||
<element signature="e#47#86#0" expanded="true" />
|
||||
<element signature="e#384#1537#0" expanded="false" />
|
||||
<element signature="e#1586#2954#0" expanded="false" />
|
||||
<element signature="e#47#85#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/version.py">
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/sites/yomanga.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="102">
|
||||
<caret line="6" column="24" lean-forward="false" selection-start-line="6" selection-start-column="24" selection-end-line="6" selection-end-column="24" />
|
||||
<folding />
|
||||
<state relative-caret-position="306">
|
||||
<caret line="18" column="15" lean-forward="false" selection-start-line="18" selection-start-column="15" selection-end-line="18" selection-end-column="15" />
|
||||
<folding>
|
||||
<element signature="e#47#85#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/sites/kisscomicus.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="317">
|
||||
<caret line="68" column="26" lean-forward="true" selection-start-line="68" selection-start-column="26" selection-end-line="68" selection-end-column="26" />
|
||||
<state relative-caret-position="119">
|
||||
<caret line="7" column="36" lean-forward="false" selection-start-line="7" selection-start-column="36" selection-end-line="7" selection-end-column="36" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/sites/readcomic.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="255">
|
||||
<caret line="15" column="0" lean-forward="false" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="0" />
|
||||
<folding>
|
||||
<element signature="e#47#62#0" expanded="true" />
|
||||
<element signature="e#291#2333#0" expanded="false" />
|
||||
<element signature="e#47#86#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/sites/kissmanga.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="85">
|
||||
<caret line="5" column="37" lean-forward="false" selection-start-line="5" selection-start-column="37" selection-end-line="5" selection-end-column="37" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/sites/batoto.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="323">
|
||||
<caret line="19" column="28" lean-forward="true" selection-start-line="19" selection-start-column="28" selection-end-line="19" selection-end-column="28" />
|
||||
<folding>
|
||||
<element signature="e#47#85#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/comic_dl.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="323">
|
||||
<caret line="27" column="74" lean-forward="false" selection-start-line="27" selection-start-column="74" selection-end-line="27" selection-end-column="74" />
|
||||
<folding>
|
||||
<element signature="e#47#85#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/downloader/cookies_required.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="1224">
|
||||
<caret line="72" column="19" lean-forward="false" selection-start-line="72" selection-start-column="19" selection-end-line="72" selection-end-column="19" />
|
||||
<folding>
|
||||
<element signature="e#496#534#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/comic_dl/downloader/universal.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="641">
|
||||
<caret line="40" column="12" lean-forward="false" selection-start-line="40" selection-start-column="12" selection-end-line="40" selection-end-column="12" />
|
||||
<folding>
|
||||
<element signature="e#432#470#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
|
@ -15,4 +15,6 @@
|
||||
- Added a YouTube Tutorial for the script [2016.12.30]
|
||||
- Site support for readcomiconlin.to [2017.01.02]
|
||||
- Added `Verbose Logging` [2017.01.22]
|
||||
- Fixed chapter count error in Kissmanga [2017.01.22]
|
||||
- Fixed chapter count error in Kissmanga [2017.01.22]
|
||||
- Fixed #4 [2017.02.16]
|
||||
- Optimized Imports [2017.02.16]
|
||||
|
14
MANIFEST
14
MANIFEST
@ -2,6 +2,18 @@
|
||||
setup.cfg
|
||||
setup.py
|
||||
comic_dl\__init__.py
|
||||
comic_dl\comic-dl.py
|
||||
comic_dl\comic_dl.py
|
||||
comic_dl\honcho.py
|
||||
comic_dl\version.py
|
||||
comic_dl\downloader\__init__.py
|
||||
comic_dl\downloader\cookies_required.py
|
||||
comic_dl\downloader\universal.py
|
||||
comic_dl\sites\__init__.py
|
||||
comic_dl\sites\batoto.py
|
||||
comic_dl\sites\comic_naver.py
|
||||
comic_dl\sites\gomanga.py
|
||||
comic_dl\sites\kisscomicus.py
|
||||
comic_dl\sites\kissmanga.py
|
||||
comic_dl\sites\mangafox.py
|
||||
comic_dl\sites\readcomic.py
|
||||
comic_dl\sites\yomanga.py
|
||||
|
@ -188,7 +188,7 @@ You can check the changelog [**`HERE`**](https://github.com/Xonshiz/comic-dl/blo
|
||||
If your're planning to open an issue for the script or ask for a new feature or anything that requires opening an Issue, then please do keep these things in mind.
|
||||
|
||||
### Reporting Issues
|
||||
If you're going to report an issue, then please run the script again with the "-v or --verbose" argument. It should generate a file in the same directory, with the name "Error Log.log". Copy that log file's data and post it on a [Gist](https://gist.github.com/) and share that gist's link while reporting the issue here.
|
||||
If you're going to report an issue, then please run the script again with the "-v or --verbose" argument. It should generate a file in the same directory, with the name "Error Log.log". Copy that log file's data and post it on a [Gist](https://gist.github.com/) and share that gist's link while reporting the issue here. Make sure you **EDIT OUT YOUR USERNAME AND PASSWORD**, if supplied within the command.
|
||||
|
||||
If you don't include the verbose log, there are chances it'll take time to fix the issue(s) you're having.
|
||||
|
||||
|
@ -0,0 +1,2 @@
|
||||
import sites
|
||||
import downloader
|
@ -13,36 +13,36 @@ This module uses `requests` library to achieve the handling of cookies.
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import print_function
|
||||
import os
|
||||
import requests
|
||||
import shutil
|
||||
from os import path
|
||||
from requests import get
|
||||
from shutil import move,copyfileobj
|
||||
from downloader.universal import main as FileDownloader
|
||||
import logging
|
||||
from logging import debug, basicConfig, DEBUG
|
||||
|
||||
def main(File_Name_Final,Directory_path,tasty_cookies,ddl_image, logger):
|
||||
if logger == "True":
|
||||
logging.basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=logging.DEBUG)
|
||||
basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=DEBUG)
|
||||
File_Check_Path = str(Directory_path)+'/'+str(File_Name_Final)
|
||||
logging.debug("File Check Path : %s" % File_Check_Path)
|
||||
debug("File Check Path : %s" % File_Check_Path)
|
||||
|
||||
if os.path.isfile(File_Check_Path):
|
||||
if path.isfile(File_Check_Path):
|
||||
print('[Comic-dl] File Exist! Skipping ',File_Name_Final,'\n')
|
||||
pass
|
||||
|
||||
if not os.path.isfile(File_Check_Path):
|
||||
if not path.isfile(File_Check_Path):
|
||||
print('[Comic-dl] Downloading : ',File_Name_Final)
|
||||
|
||||
response = requests.get(ddl_image, stream=True,cookies=tasty_cookies)
|
||||
response = get(ddl_image, stream=True,cookies=tasty_cookies)
|
||||
try:
|
||||
with open(File_Name_Final, 'wb') as out_file:
|
||||
shutil.copyfileobj(response.raw, out_file)
|
||||
File_Path = os.path.normpath(File_Name_Final)
|
||||
copyfileobj(response.raw, out_file)
|
||||
File_Path = path.normpath(File_Name_Final)
|
||||
except Exception as e:
|
||||
logging.debug("File download error : %s" % e)
|
||||
debug("File download error : %s" % e)
|
||||
print("Couldn't download file from : ",ddl_image)
|
||||
pass
|
||||
try:
|
||||
shutil.move(File_Path,Directory_path)
|
||||
move(File_Path,Directory_path)
|
||||
except Exception as e:
|
||||
print(e,'\n')
|
||||
pass
|
||||
@ -50,27 +50,27 @@ def main(File_Name_Final,Directory_path,tasty_cookies,ddl_image, logger):
|
||||
|
||||
def with_referer(File_Name_Final,Directory_path,tasty_cookies,ddl_image,referer, logger):
|
||||
File_Check_Path = str(Directory_path)+'/'+str(File_Name_Final)
|
||||
logging.debug("File Check Path : %s" % File_Check_Path)
|
||||
logging.debug("Referrer Received : %s" % referer)
|
||||
debug("File Check Path : %s" % File_Check_Path)
|
||||
debug("Referrer Received : %s" % referer)
|
||||
|
||||
if os.path.isfile(File_Check_Path):
|
||||
if path.isfile(File_Check_Path):
|
||||
print('[Comic-dl] File Exist! Skipping ',File_Name_Final,'\n')
|
||||
pass
|
||||
|
||||
if not os.path.isfile(File_Check_Path):
|
||||
if not path.isfile(File_Check_Path):
|
||||
print('[Comic-dl] Downloading : ',File_Name_Final)
|
||||
headers = {'Referer': referer}
|
||||
response = requests.get(ddl_image, stream=True,cookies=tasty_cookies,headers=headers)
|
||||
response = get(ddl_image, stream=True,cookies=tasty_cookies,headers=headers)
|
||||
try:
|
||||
with open(File_Name_Final, 'wb') as out_file:
|
||||
shutil.copyfileobj(response.raw, out_file)
|
||||
File_Path = os.path.normpath(File_Name_Final)
|
||||
copyfileobj(response.raw, out_file)
|
||||
File_Path = path.normpath(File_Name_Final)
|
||||
except Exception as e:
|
||||
logging.debug("File download error : %s" % e)
|
||||
debug("File download error : %s" % e)
|
||||
print("Couldn't download file from : ",ddl_image)
|
||||
pass
|
||||
try:
|
||||
shutil.move(File_Path,Directory_path)
|
||||
move(File_Path,Directory_path)
|
||||
except Exception as e:
|
||||
print(e,'\n')
|
||||
pass
|
||||
|
@ -11,40 +11,37 @@ ddl_image is the direct link to the image itself.
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import print_function
|
||||
import os
|
||||
# import urllib
|
||||
import shutil
|
||||
from os import path, remove
|
||||
from shutil import move
|
||||
import urllib
|
||||
#from urllib import URLError
|
||||
# import sys
|
||||
import logging
|
||||
from logging import debug, basicConfig, DEBUG
|
||||
|
||||
def main(File_Name_Final,Directory_path,ddl_image, logger):
|
||||
if logger == "True":
|
||||
logging.basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=logging.DEBUG)
|
||||
basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=DEBUG)
|
||||
File_Check_Path = str(Directory_path)+'/'+str(File_Name_Final)
|
||||
logging.debug("File Check Path : %s" % File_Check_Path)
|
||||
debug("File Check Path : %s" % File_Check_Path)
|
||||
|
||||
if os.path.isfile(File_Check_Path):
|
||||
if path.isfile(File_Check_Path):
|
||||
print('[Comic-dl] File Exist! Skipping ',File_Name_Final,'\n')
|
||||
pass
|
||||
|
||||
if not os.path.isfile(File_Check_Path):
|
||||
if not path.isfile(File_Check_Path):
|
||||
print('[Comic-dl] Downloading : ',File_Name_Final)
|
||||
urllib.request.URLopener.version = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'
|
||||
try:
|
||||
urllib.request.urlretrieve(ddl_image, File_Name_Final)
|
||||
except Exception as e:
|
||||
logging.debug("Error in retrieving image : %s" % e)
|
||||
debug("Error in retrieving image : %s" % e)
|
||||
#filename, headers = urllib.urlretrieve(ddl_image,File_Name_Final)
|
||||
#print "File Name : ",filename
|
||||
#print "Headers : ",headers
|
||||
File_Path = os.path.normpath(File_Name_Final)
|
||||
File_Path = path.normpath(File_Name_Final)
|
||||
try:
|
||||
shutil.move(File_Path,Directory_path)
|
||||
move(File_Path,Directory_path)
|
||||
except Exception as e:
|
||||
print(e,'\n')
|
||||
os.remove(File_Path)
|
||||
remove(File_Path)
|
||||
pass
|
||||
|
||||
|
||||
|
@ -3,10 +3,9 @@
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import print_function
|
||||
import re
|
||||
import os
|
||||
import sys
|
||||
from more_itertools import unique_everseen
|
||||
from re import search,sub,compile, findall
|
||||
from os import path,makedirs
|
||||
from sys import exit
|
||||
from bs4 import BeautifulSoup
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
|
||||
@ -15,7 +14,7 @@ from selenium.webdriver.support import expected_conditions as EC
|
||||
from selenium.webdriver.common.by import By
|
||||
from downloader.universal import main as FileDownloader
|
||||
from six.moves import range
|
||||
import logging
|
||||
from logging import debug, basicConfig, DEBUG
|
||||
|
||||
|
||||
"""Bato serves the chapters in 2 ways :
|
||||
@ -68,7 +67,7 @@ def single_chapter(driver, url, current_directory, User_Name, User_Password, log
|
||||
if str(User_Name) not in ["N"] or str(User_Password) not in ["N"]:
|
||||
if str(User_Name) in ["N"] or str(User_Password) in ["N"]:
|
||||
print("Username or Password cannot be empty.")
|
||||
sys.exit()
|
||||
exit()
|
||||
print("Authenticating Your Username and Password ...")
|
||||
|
||||
batoto_login(driver, User_Name, User_Password, logger)
|
||||
@ -92,10 +91,10 @@ def single_chapter(driver, url, current_directory, User_Name, User_Password, log
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logging.debug("Error in loading page : %s\nTrying to move on." % e)
|
||||
debug("Error in loading page : %s\nTrying to move on." % e)
|
||||
pass
|
||||
page_title = str(driver.title)
|
||||
logging.debug("Page Title : %s" % page_title)
|
||||
debug("Page Title : %s" % page_title)
|
||||
|
||||
"""Batoto doesn't provide shit in the source code of the web page. Hence, we'll be using the outer HTML
|
||||
to scrap all the info we need.
|
||||
@ -115,44 +114,44 @@ def single_chapter(driver, url, current_directory, User_Name, User_Password, log
|
||||
"ERROR [10030]: The thing you're looking for is unavailable. It may be due to:"]:
|
||||
print("You cannot access this page. You'll need to log in to download this page.")
|
||||
driver.quit()
|
||||
sys.exit()
|
||||
exit()
|
||||
|
||||
else:
|
||||
pass
|
||||
|
||||
except Exception as e:
|
||||
logging.debug("Error in access check : %s" % e)
|
||||
debug("Error in access check : %s" % e)
|
||||
pass
|
||||
|
||||
try:
|
||||
# Getting the Series Name from the <title></title> tags of the web
|
||||
# page.
|
||||
Series_Name = str(
|
||||
re.search(
|
||||
search(
|
||||
'^(.*)\ \-',
|
||||
page_title).group(1)).strip().replace(
|
||||
'_',
|
||||
' ').title()
|
||||
except Exception as e:
|
||||
logging.debug("Error in Series Name : %s" % e)
|
||||
debug("Error in Series Name : %s" % e)
|
||||
Series_Name = "Unkown Series"
|
||||
|
||||
try:
|
||||
# Getting the Series Name from the <title></title> tags of the web
|
||||
# page.
|
||||
volume_number = int(
|
||||
str(re.search('vol (\d+)', page_title).group(1)).strip())
|
||||
str(search('vol (\d+)', page_title).group(1)).strip())
|
||||
except Exception as e:
|
||||
logging.debug("Error in Volume Number : %s" % e)
|
||||
debug("Error in Volume Number : %s" % e)
|
||||
volume_number = '0'
|
||||
|
||||
try:
|
||||
# Getting the Series Name from the <title></title> tags of the web
|
||||
# page.
|
||||
chapter_number = int(
|
||||
str(re.search('ch (\d+)', page_title).group(1)).strip())
|
||||
str(search('ch (\d+)', page_title).group(1)).strip())
|
||||
except Exception as e:
|
||||
logging.debug("Error in Chapter Number : %s" % e)
|
||||
debug("Error in Chapter Number : %s" % e)
|
||||
chapter_number = '0'
|
||||
|
||||
try:
|
||||
@ -161,7 +160,7 @@ def single_chapter(driver, url, current_directory, User_Name, User_Password, log
|
||||
'//*[@id="reader"]/div[1]/ul/li[3]/select').text).replace("/", " ").strip()
|
||||
|
||||
except Exception as e:
|
||||
logging.debug("Error in Group Name : %s\nMoving forward..." % e)
|
||||
debug("Error in Group Name : %s\nMoving forward..." % e)
|
||||
# Some entries on batoto don't have a name. So, if we get to any such
|
||||
# occassion, let's be prepared.
|
||||
Group_Name_Finder = str('No Group')
|
||||
@ -172,7 +171,7 @@ def single_chapter(driver, url, current_directory, User_Name, User_Password, log
|
||||
page_list = driver.find_element_by_id('page_select')
|
||||
|
||||
except Exception as e:
|
||||
logging.debug("Error in Page Select : %s" % e)
|
||||
debug("Error in Page Select : %s" % e)
|
||||
|
||||
# If we cannot find the 'page_select' element, it means that this
|
||||
# chapter is showing all the images in one page.
|
||||
@ -188,12 +187,12 @@ def single_chapter(driver, url, current_directory, User_Name, User_Password, log
|
||||
'/' + "Chapter " + str(chapter_number) + " [" + str(Group_Name_Finder) + " ]"
|
||||
|
||||
# Fix for "Special Characters" in The series name
|
||||
File_Directory = re.sub(
|
||||
File_Directory = sub(
|
||||
'[^A-Za-z0-9\-\.\'\#\/ \[\]]+',
|
||||
'',
|
||||
Raw_File_Directory)
|
||||
|
||||
Directory_path = os.path.normpath(File_Directory)
|
||||
Directory_path = path.normpath(File_Directory)
|
||||
|
||||
print('\n')
|
||||
print('{:^80}'.format('%s - %s') % (Series_Name, chapter_number))
|
||||
@ -208,24 +207,24 @@ def single_chapter(driver, url, current_directory, User_Name, User_Password, log
|
||||
Look at the last number for the image. Manipulate that and we have what we need.
|
||||
"""
|
||||
items_list = page_list.find_elements_by_tag_name("option")
|
||||
logging.debug("Items List : %s" % items_list)
|
||||
debug("Items List : %s" % items_list)
|
||||
|
||||
for item in items_list:
|
||||
list_of_pages = item.text
|
||||
logging.debug("List of Pages : %s" % list_of_pages)
|
||||
debug("List of Pages : %s" % list_of_pages)
|
||||
|
||||
lst_pag = str(list_of_pages)
|
||||
|
||||
Last_Page_number = int(
|
||||
str(re.search('(\d+)', lst_pag).group(1)).strip())
|
||||
logging.debug("Last Page Number : %s" % Last_Page_number)
|
||||
str(search('(\d+)', lst_pag).group(1)).strip())
|
||||
debug("Last Page Number : %s" % Last_Page_number)
|
||||
|
||||
img_link = driver.find_element_by_id('comic_page').get_attribute('src')
|
||||
logging.debug("Image Link : %s" % img_link)
|
||||
debug("Image Link : %s" % img_link)
|
||||
|
||||
for i in range(1, Last_Page_number + 1):
|
||||
if not os.path.exists(File_Directory):
|
||||
os.makedirs(File_Directory)
|
||||
if not path.exists(File_Directory):
|
||||
makedirs(File_Directory)
|
||||
if len(str(i)) == 1:
|
||||
|
||||
ddl_image = str(img_link).replace(
|
||||
@ -237,7 +236,7 @@ def single_chapter(driver, url, current_directory, User_Name, User_Password, log
|
||||
'img000001', 'img0000%s') % (i)
|
||||
|
||||
File_Name_Final = str(
|
||||
i).strip() + "." + str(re.search('\d\.(.*?)$', ddl_image).group(1)).strip()
|
||||
i).strip() + "." + str(search('\d\.(.*?)$', ddl_image).group(1)).strip()
|
||||
FileDownloader(File_Name_Final, Directory_path, ddl_image, logger)
|
||||
|
||||
print('\n')
|
||||
@ -254,18 +253,18 @@ def single_chapter(driver, url, current_directory, User_Name, User_Password, log
|
||||
Image_Links = soup.findAll('div', {'style': 'text-align:center;'})
|
||||
|
||||
for link in Image_Links:
|
||||
if not os.path.exists(File_Directory):
|
||||
os.makedirs(File_Directory)
|
||||
if not path.exists(File_Directory):
|
||||
makedirs(File_Directory)
|
||||
x = link.findAll('img')
|
||||
for a in x:
|
||||
ddl_image = a['src']
|
||||
logging.debug("Image Download Link : %s" % ddl_image)
|
||||
debug("Image Download Link : %s" % ddl_image)
|
||||
|
||||
File_Name_Final = str(
|
||||
re.search(
|
||||
search(
|
||||
'img0000(\d+)\.([jpg]|[png])',
|
||||
ddl_image).group(1)).strip() + "." + str(
|
||||
re.search(
|
||||
search(
|
||||
'\d\.(.*?)$',
|
||||
ddl_image).group(1)).strip()
|
||||
FileDownloader(File_Name_Final, Directory_path, ddl_image, logger)
|
||||
@ -286,7 +285,7 @@ def whole_series(driver, url, current_directory, User_Name, User_Password, logge
|
||||
if str(User_Name) not in ["N"] or str(User_Password) not in ["N"]:
|
||||
if str(User_Name) in ["N"] or str(User_Password) in ["N"]:
|
||||
print("Username or Password cannot be empty.")
|
||||
sys.exit()
|
||||
exit()
|
||||
print("Authenticating Your Username and Password ...")
|
||||
|
||||
batoto_login(driver, User_Name, User_Password, logger)
|
||||
@ -305,7 +304,7 @@ def whole_series(driver, url, current_directory, User_Name, User_Password, logge
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logging.debug("Error in loading the page : %s\nMoving ahead..." % e)
|
||||
debug("Error in loading the page : %s\nMoving ahead..." % e)
|
||||
pass
|
||||
elem = driver.find_element_by_xpath("//*")
|
||||
Page_Source = elem.get_attribute("outerHTML").encode('utf-8')
|
||||
@ -319,13 +318,13 @@ def whole_series(driver, url, current_directory, User_Name, User_Password, logge
|
||||
soup = BeautifulSoup(Page_Source, "html.parser")
|
||||
all_links = soup.findAll(
|
||||
'tr', {'class': 'row lang_English chapter_row'})
|
||||
logging.debug("Image Links : %s" % all_links)
|
||||
debug("Image Links : %s" % all_links)
|
||||
|
||||
for link in all_links:
|
||||
x = link.findAll('a')
|
||||
for a in x:
|
||||
ddl_image = a['href']
|
||||
logging.debug("Second Image Link : %s" % ddl_image)
|
||||
debug("Second Image Link : %s" % ddl_image)
|
||||
if "reader" in ddl_image:
|
||||
|
||||
link_list.append(ddl_image)
|
||||
@ -352,7 +351,7 @@ def whole_series(driver, url, current_directory, User_Name, User_Password, logge
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logging.debug("Error in loading the page : %s\nMoving ahead." % e)
|
||||
debug("Error in loading the page : %s\nMoving ahead." % e)
|
||||
pass
|
||||
elem = driver.find_element_by_xpath("//*")
|
||||
Page_Source = elem.get_attribute("outerHTML").encode('utf-8')
|
||||
@ -369,7 +368,7 @@ def whole_series(driver, url, current_directory, User_Name, User_Password, logge
|
||||
ddl_image = a['href']
|
||||
if "reader" in ddl_image:
|
||||
link_list.append(ddl_image)
|
||||
logging.debug("%s added in the bag!" % ddl_image)
|
||||
debug("%s added in the bag!" % ddl_image)
|
||||
|
||||
print("Total Chapters To Download : ", len(link_list))
|
||||
#print(link_list)
|
||||
@ -396,17 +395,17 @@ def batoto_login(driver, User_Name, User_Password, logger):
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logging.debug("Error in loading page : %s\nSaving screenshot and moving..." % e)
|
||||
debug("Error in loading page : %s\nSaving screenshot and moving..." % e)
|
||||
# driver.save_screenshot('Single_exception.png')
|
||||
pass
|
||||
LoggedOut_Title = driver.title
|
||||
logging.debug("Logged out Title : %s" % LoggedOut_Title)
|
||||
debug("Logged out Title : %s" % LoggedOut_Title)
|
||||
driver.find_element_by_id('ips_username').send_keys(User_Name)
|
||||
driver.find_element_by_id('ips_password').send_keys(User_Password)
|
||||
|
||||
driver.find_element_by_xpath('//*[@id="login"]/fieldset[2]/input').click()
|
||||
LoggedIn_Title = driver.title
|
||||
logging.debug("Logged In Title : %s" % LoggedIn_Title)
|
||||
debug("Logged In Title : %s" % LoggedIn_Title)
|
||||
|
||||
"""A little check to see whether we've logged in or not. Comparing the titles of the before and after logging
|
||||
pages.
|
||||
@ -415,21 +414,21 @@ def batoto_login(driver, User_Name, User_Password, logger):
|
||||
if str(LoggedIn_Title).strip() == str(LoggedOut_Title).strip():
|
||||
print("Couldn't log you in. Please check your credentials.")
|
||||
driver.quit()
|
||||
sys.exit()
|
||||
exit()
|
||||
|
||||
|
||||
def batoto_Url_Check(input_url, current_directory, User_Name, User_Password, logger):
|
||||
if logger == "True":
|
||||
logging.basicConfig(format='[Comic-dl]%(levelname)s: %(message)s', filename="Error Log.log", level=logging.DEBUG)
|
||||
basicConfig(format='[Comic-dl]%(levelname)s: %(message)s', filename="Error Log.log", level=DEBUG)
|
||||
|
||||
batoto_single_regex = re.compile(
|
||||
batoto_single_regex = compile(
|
||||
'https?://(?P<host>bato.to)/reader\#(?P<extra_characters>[\d\w-]+)?(\/|.)')
|
||||
batoto_whole_regex = re.compile(
|
||||
batoto_whole_regex = compile(
|
||||
'^https?://(?P<host>bato.to)/comic/\_/comics/(?P<comic>[\d\w-]+)?(\/|.)$')
|
||||
#print "Inside"
|
||||
lines = input_url.split('\n')
|
||||
for line in lines:
|
||||
found = re.search(batoto_single_regex, line)
|
||||
found = search(batoto_single_regex, line)
|
||||
if found:
|
||||
match = found.groupdict()
|
||||
if match['extra_characters']:
|
||||
@ -445,7 +444,7 @@ def batoto_Url_Check(input_url, current_directory, User_Name, User_Password, log
|
||||
else:
|
||||
pass
|
||||
|
||||
found = re.search(batoto_whole_regex, line)
|
||||
found = search(batoto_whole_regex, line)
|
||||
if found:
|
||||
match = found.groupdict()
|
||||
if match['comic']:
|
||||
|
@ -4,48 +4,49 @@
|
||||
from __future__ import unicode_literals
|
||||
from __future__ import absolute_import
|
||||
from __future__ import print_function
|
||||
import re
|
||||
import sys
|
||||
import os
|
||||
import requests
|
||||
from re import search,sub,compile, findall
|
||||
from os import path,makedirs
|
||||
from sys import exit
|
||||
from logging import debug, basicConfig, DEBUG
|
||||
from requests import Session,cookies
|
||||
from downloader.cookies_required import with_referer as FileDownloader
|
||||
from six.moves import range
|
||||
from six.moves import input
|
||||
import logging
|
||||
|
||||
|
||||
def single_chapter(url,current_directory, logger):
|
||||
|
||||
s = requests.Session()
|
||||
s = Session()
|
||||
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'}
|
||||
req = s.get(url,headers=headers)
|
||||
cookies = req.cookies
|
||||
page_source_1 = str(req.text.encode('utf-8'))
|
||||
|
||||
try:
|
||||
#Korean_Name = re.search(r'<h2>(.*?)<span class="wrt_nm">',str(page_source)).group(1)
|
||||
Series_Name = re.search(r'titleId=(\d+)',url).group(1)
|
||||
#Korean_Name = search(r'<h2>(.*?)<span class="wrt_nm">',str(page_source)).group(1)
|
||||
Series_Name = search(r'titleId=(\d+)',url).group(1)
|
||||
except Exception as e:
|
||||
logging.debug("Error in Series Name : %s" % e)
|
||||
debug("Error in Series Name : %s" % e)
|
||||
Series_Name = "Unknown"
|
||||
|
||||
try:
|
||||
#chapter_number = int(re.search(r'\<span\ class\=\"total\"\>(.\d+)\<\/span\>',page_source_1).group(1))
|
||||
chapter_number = re.search(r'&no=(\d+)',url).group(1)
|
||||
#chapter_number = int(search(r'\<span\ class\=\"total\"\>(.\d+)\<\/span\>',page_source_1).group(1))
|
||||
chapter_number = search(r'&no=(\d+)',url).group(1)
|
||||
except Exception as e:
|
||||
# print(e)
|
||||
logging.debug("Error in Chapter Number : %s" % e)
|
||||
debug("Error in Chapter Number : %s" % e)
|
||||
chapter_number = 0
|
||||
|
||||
img_regex = r'http://imgcomic.naver.net/webtoon/\d+/\d+/.+?\.(?:jpg|png|gif|bmp|JPG|PNG|GIF|BMP)'
|
||||
|
||||
img_links = list(re.findall(img_regex,page_source_1))
|
||||
logging.debug("Image Links : %s" % img_links)
|
||||
img_links = list(findall(img_regex,page_source_1))
|
||||
debug("Image Links : %s" % img_links)
|
||||
|
||||
Raw_File_Directory = str(Series_Name) +'/'+"Chapter "+str(chapter_number)
|
||||
|
||||
File_Directory = re.sub('[^A-Za-z0-9\-\.\'\#\/ ]+', '', Raw_File_Directory) # Fix for "Special Characters" in The series name
|
||||
File_Directory = sub('[^A-Za-z0-9\-\.\'\#\/ ]+', '', Raw_File_Directory) # Fix for "Special Characters" in The series name
|
||||
|
||||
Directory_path = os.path.normpath(File_Directory)
|
||||
Directory_path = path.normpath(File_Directory)
|
||||
|
||||
print('\n')
|
||||
print('{:^80}'.format('=====================================================================\n'))
|
||||
@ -53,8 +54,8 @@ def single_chapter(url,current_directory, logger):
|
||||
print('{:^80}'.format('=====================================================================\n'))
|
||||
|
||||
for x,items in enumerate(img_links):
|
||||
if not os.path.exists(File_Directory):
|
||||
os.makedirs(File_Directory)
|
||||
if not path.exists(File_Directory):
|
||||
makedirs(File_Directory)
|
||||
FileDownloader(str(x+1)+str(items[-4:]),Directory_path,cookies,items,url, logger)
|
||||
|
||||
print('\n')
|
||||
@ -67,41 +68,41 @@ def whole_series(url, current_directory, logger):
|
||||
|
||||
|
||||
|
||||
s = requests.Session()
|
||||
s = Session()
|
||||
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'}
|
||||
req = s.get(url,headers=headers)
|
||||
cookies = req.cookies
|
||||
page_source_1 = req.text.encode('utf-8')
|
||||
|
||||
titleId = re.search(r'titleId=(\d+)',url).group(1)
|
||||
titleId = search(r'titleId=(\d+)',url).group(1)
|
||||
|
||||
try:
|
||||
first_link = int(re.search(r'\/webtoon\/detail\.nhn\?titleId\=%s\&no\=(\d+)\&weekday\=tue' %(titleId),page_source_1).group(1))
|
||||
first_link = int(search(r'\/webtoon\/detail\.nhn\?titleId\=%s\&no\=(\d+)\&weekday\=tue' %(titleId),page_source_1).group(1))
|
||||
except Exception as e:
|
||||
first_link = eval(input("Please Enter the Last chapter of the series : "))
|
||||
if not first_link:
|
||||
print("You failed to enter the last chapter count. Script will exit now.")
|
||||
sys.exit()
|
||||
exit()
|
||||
|
||||
for x in range(1,int(first_link)):
|
||||
Chapter_Url = "http://comic.naver.com/webtoon/detail.nhn?titleId=%s&no=%s" %(titleId,x)
|
||||
logging.debug("Chapter URL : %s" % Chapter_Url)
|
||||
debug("Chapter URL : %s" % Chapter_Url)
|
||||
single_chapter(Chapter_Url,current_directory, logger)
|
||||
|
||||
|
||||
|
||||
def comic_naver_Url_Check(input_url, current_directory, logger):
|
||||
if logger == "True":
|
||||
logging.basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=logging.DEBUG)
|
||||
basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=DEBUG)
|
||||
|
||||
comic_naver_single_regex = re.compile(
|
||||
comic_naver_single_regex = compile(
|
||||
'https?://(?P<host>comic.naver.com)/webtoon/(?P<detail>detail.nhn)\?titleId\=(?P<extra_characters>[\d]+)?(\/|.)')
|
||||
comic_naver_whole_regex = re.compile(
|
||||
comic_naver_whole_regex = compile(
|
||||
'https?://(?P<host>comic.naver.com)/webtoon/(?P<list>list.nhn)\?titleId\=(?P<extra_characters>[\d]+)?(\/|.)')
|
||||
|
||||
lines = input_url.split('\n')
|
||||
for line in lines:
|
||||
found = re.search(comic_naver_single_regex, line)
|
||||
found = search(comic_naver_single_regex, line)
|
||||
if found:
|
||||
match = found.groupdict()
|
||||
if match['detail']:
|
||||
@ -111,7 +112,7 @@ def comic_naver_Url_Check(input_url, current_directory, logger):
|
||||
else:
|
||||
pass
|
||||
|
||||
found = re.search(comic_naver_whole_regex, line)
|
||||
found = search(comic_naver_whole_regex, line)
|
||||
if found:
|
||||
match = found.groupdict()
|
||||
if match['list']:
|
||||
|
@ -3,55 +3,55 @@
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import print_function
|
||||
import requests
|
||||
import re
|
||||
import os
|
||||
import sys
|
||||
from requests import Session,cookies
|
||||
from more_itertools import unique_everseen
|
||||
from re import search,sub,compile, findall
|
||||
from os import path,makedirs
|
||||
from sys import exit
|
||||
from bs4 import BeautifulSoup
|
||||
from downloader.cookies_required import main as FileDownloader
|
||||
import logging
|
||||
from logging import debug, basicConfig, DEBUG
|
||||
|
||||
def single_chapter(url,current_directory, logger):
|
||||
|
||||
if not url:
|
||||
print("Couldn't get the URL. Please report it on Github Repository.")
|
||||
sys.exit(0)
|
||||
exit(0)
|
||||
|
||||
headers = {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'
|
||||
|
||||
}
|
||||
|
||||
s = requests.Session()
|
||||
s = Session()
|
||||
response = s.get(url, headers=headers)
|
||||
tasty_cookies = response.cookies
|
||||
|
||||
Page_source = str(response.text.encode('utf-8'))
|
||||
|
||||
Series_Name = str(re.search('\/read\/(.*?)/', url).group(1)).strip().replace('_',' ').title() # Getting the Series Name from the URL itself for naming the folder/dicrectories.
|
||||
Series_Name = str(search('\/read\/(.*?)/', url).group(1)).strip().replace('_',' ').title() # Getting the Series Name from the URL itself for naming the folder/dicrectories.
|
||||
|
||||
|
||||
try:
|
||||
chapter_number = int(str(re.search('0\/(.*?)/', url).group(1)).strip().replace('0','').replace('/','')) # Getting the chapter count from the URL itself for naming the folder/dicrectories in integer.
|
||||
chapter_number = int(str(search('0\/(.*?)/', url).group(1)).strip().replace('0','').replace('/','')) # Getting the chapter count from the URL itself for naming the folder/dicrectories in integer.
|
||||
except Exception as e:
|
||||
logging.debug("Error in Chapter Number : %s" % e)
|
||||
debug("Error in Chapter Number : %s" % e)
|
||||
chapter_number = 0 # Name the chapter 0 if nothing INTEGER type comes up
|
||||
|
||||
|
||||
Raw_File_Directory = str(Series_Name)+'/'+"Chapter "+str(chapter_number)
|
||||
|
||||
File_Directory = re.sub('[^A-Za-z0-9\-\.\'\#\/ ]+', '', Raw_File_Directory) # Fix for "Special Characters" in The series name
|
||||
File_Directory = sub('[^A-Za-z0-9\-\.\'\#\/ ]+', '', Raw_File_Directory) # Fix for "Special Characters" in The series name
|
||||
|
||||
Directory_path = os.path.normpath(File_Directory)
|
||||
Directory_path = path.normpath(File_Directory)
|
||||
|
||||
|
||||
|
||||
ddl_image_list = re.findall('comics(.*?)\"', Page_source)
|
||||
ddl_image_list = findall('comics(.*?)\"', Page_source)
|
||||
|
||||
|
||||
ddl_list = list(unique_everseen(ddl_image_list))
|
||||
logging.debug("Image Links : %s" % ddl_list)
|
||||
debug("Image Links : %s" % ddl_list)
|
||||
|
||||
|
||||
print('\n')
|
||||
@ -60,12 +60,12 @@ def single_chapter(url,current_directory, logger):
|
||||
|
||||
for i in ddl_list:
|
||||
|
||||
if not os.path.exists(File_Directory):
|
||||
os.makedirs(File_Directory)
|
||||
if not path.exists(File_Directory):
|
||||
makedirs(File_Directory)
|
||||
ddl_image = "http://gomanga.co/reader/content/comics"+str(i).replace('"','').replace('\\','')
|
||||
logging.debug("Image Link : %s" % ddl_image)
|
||||
debug("Image Link : %s" % ddl_image)
|
||||
|
||||
File_Name_Final = str(re.findall('\/(\d+)\.[jpg]|[png]', i)).replace("[","").replace("]","").replace("'","").replace(",","").strip()+"."+str(re.findall('\d\.(.*?)$', str(i))).replace(",","").replace("[","").replace("]","").replace("'","").strip()
|
||||
File_Name_Final = str(findall('\/(\d+)\.[jpg]|[png]', i)).replace("[","").replace("]","").replace("'","").replace(",","").strip()+"."+str(findall('\d\.(.*?)$', str(i))).replace(",","").replace("[","").replace("]","").replace("'","").strip()
|
||||
FileDownloader(File_Name_Final,Directory_path,tasty_cookies,ddl_image, logger)
|
||||
|
||||
print('\n')
|
||||
@ -80,13 +80,13 @@ def whole_series(url,current_directory, logger):
|
||||
|
||||
}
|
||||
|
||||
s = requests.Session()
|
||||
s = Session()
|
||||
response = s.get(url, headers=headers)
|
||||
tasty_cookies = response.cookies
|
||||
|
||||
Page_source = str(response.text.encode('utf-8'))
|
||||
|
||||
Series_Name = str(re.search('\/series\/(.*?)/', url).group(1)).strip().replace('_',' ').title() # Getting the Series Name from the URL itself for naming the folder/dicrectories.
|
||||
Series_Name = str(search('\/series\/(.*?)/', url).group(1)).strip().replace('_',' ').title() # Getting the Series Name from the URL itself for naming the folder/dicrectories.
|
||||
|
||||
soup = BeautifulSoup(Page_source, 'html.parser')
|
||||
|
||||
@ -96,19 +96,19 @@ def whole_series(url,current_directory, logger):
|
||||
x = link.findAll('a')
|
||||
for a in x:
|
||||
url = a['href']
|
||||
logging.debug("Final URL : %s" % url)
|
||||
debug("Final URL : %s" % url)
|
||||
single_chapter(url,current_directory, logger)
|
||||
|
||||
def gomanga_Url_Check(input_url,current_directory, logger):
|
||||
if logger == "True":
|
||||
logging.basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=logging.DEBUG)
|
||||
basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=DEBUG)
|
||||
|
||||
gomanga_single_regex = re.compile('https?://(?P<host>gomanga.co)/reader/read/(?P<comic_single>[\d\w-]+)/en/(?P<volume>\d+)?/(?P<Chapter>\d+)?()|(/page/(?P<PageNumber>\d+)?)')
|
||||
gomanga_whole_regex = re.compile('^https?://(?P<host>gomanga.co)/reader/(?P<series>series)?/(?P<comic>[\d\w-]+)?(\/|.)$')
|
||||
gomanga_single_regex = compile('https?://(?P<host>gomanga.co)/reader/read/(?P<comic_single>[\d\w-]+)/en/(?P<volume>\d+)?/(?P<Chapter>\d+)?()|(/page/(?P<PageNumber>\d+)?)')
|
||||
gomanga_whole_regex = compile('^https?://(?P<host>gomanga.co)/reader/(?P<series>series)?/(?P<comic>[\d\w-]+)?(\/|.)$')
|
||||
|
||||
lines = input_url.split('\n')
|
||||
for line in lines:
|
||||
found = re.search(gomanga_single_regex, line)
|
||||
found = search(gomanga_single_regex, line)
|
||||
if found:
|
||||
match = found.groupdict()
|
||||
if match['Chapter']:
|
||||
@ -119,7 +119,7 @@ def gomanga_Url_Check(input_url,current_directory, logger):
|
||||
|
||||
|
||||
|
||||
found = re.search(gomanga_whole_regex, line)
|
||||
found = search(gomanga_whole_regex, line)
|
||||
if found:
|
||||
match = found.groupdict()
|
||||
if match['comic']:
|
||||
|
@ -1,19 +1,19 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import cfscrape
|
||||
import re
|
||||
from re import search,sub,compile, findall
|
||||
from os import path,makedirs
|
||||
from bs4 import BeautifulSoup
|
||||
import os
|
||||
from cfscrape import create_scraper
|
||||
from logging import debug, basicConfig, DEBUG
|
||||
# from downloader.universal import main as FileDownloader
|
||||
from downloader.cookies_required import main as FileDownloader
|
||||
import requests
|
||||
import logging
|
||||
from requests import session
|
||||
|
||||
def single_chapter(url, directory, logger):
|
||||
|
||||
sess = requests.session()
|
||||
sess = cfscrape.create_scraper(sess)
|
||||
sess = session()
|
||||
sess = create_scraper(sess)
|
||||
s = sess.get(url)
|
||||
cookies = sess.cookies
|
||||
connection = s.text.encode('utf-8')
|
||||
@ -31,10 +31,10 @@ def single_chapter(url, directory, logger):
|
||||
|
||||
Raw_File_Directory = str(Series_Name) + '/' + "Chapter " + str(chapter_number)
|
||||
|
||||
File_Directory = re.sub('[^A-Za-z0-9\-\.\'\#\/ ]+', '',
|
||||
File_Directory = sub('[^A-Za-z0-9\-\.\'\#\/ ]+', '',
|
||||
Raw_File_Directory) # Fix for "Special Characters" in The series name
|
||||
|
||||
Directory_path = os.path.normpath(File_Directory)
|
||||
Directory_path = path.normpath(File_Directory)
|
||||
|
||||
print('\n')
|
||||
print('{:^80}'.format('=====================================================================\n'))
|
||||
@ -43,16 +43,16 @@ def single_chapter(url, directory, logger):
|
||||
|
||||
# soup = BeautifulSoup(connection, "html.parser")
|
||||
linkFinder = soup.findAll('ul', {'class': 'list-image'})
|
||||
logging.debug("Image Links : %s" % linkFinder)
|
||||
debug("Image Links : %s" % linkFinder)
|
||||
|
||||
# print("Link Finder :s %s" % linkFinder)
|
||||
for link in linkFinder:
|
||||
x = link.findAll('img')
|
||||
for a in x:
|
||||
if not os.path.exists(File_Directory):
|
||||
os.makedirs(File_Directory)
|
||||
if not path.exists(File_Directory):
|
||||
makedirs(File_Directory)
|
||||
ddlLink = a['src']
|
||||
logging.debug("Final URL : %s" % ddlLink)
|
||||
debug("Final URL : %s" % ddlLink)
|
||||
fileName = str(ddlLink).split("/")[-1].strip()
|
||||
# print("Link : %s\nFile Name : %s" % (ddlLink, fileName))
|
||||
FileDownloader(File_Name_Final=fileName, Directory_path=File_Directory, tasty_cookies=cookies, ddl_image=ddlLink, logger=logger)
|
||||
@ -62,7 +62,7 @@ def single_chapter(url, directory, logger):
|
||||
|
||||
def whole_series(url, directory, logger):
|
||||
|
||||
scraper = cfscrape.create_scraper()
|
||||
scraper = create_scraper()
|
||||
connection = scraper.get(url).content
|
||||
|
||||
soup = BeautifulSoup(connection, "html.parser")
|
||||
@ -73,7 +73,7 @@ def whole_series(url, directory, logger):
|
||||
for a in x:
|
||||
# print(a['href'])
|
||||
url = "http://kisscomic.us" + a['href']
|
||||
logging.debug("Chapter URL : %s" % url)
|
||||
debug("Chapter URL : %s" % url)
|
||||
single_chapter(url, directory, logger)
|
||||
print("Finished Downloading")
|
||||
|
||||
@ -81,13 +81,13 @@ def whole_series(url, directory, logger):
|
||||
|
||||
def kissmcomicus_Url_Check(input_url, current_directory, logger):
|
||||
if logger == "True":
|
||||
logging.basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=logging.DEBUG)
|
||||
kissmcomicus_single_regex = re.compile('https?://(?P<host>[^/]+)/chapters/(?P<comic>[\d\w-]+)(?:/Issue-)?')
|
||||
kissmcomicus_whole_regex = re.compile('https?://(?P<host>[^/]+)/comics/(?P<comic_name>[\d\w-]+)?')
|
||||
basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=DEBUG)
|
||||
kissmcomicus_single_regex = compile('https?://(?P<host>[^/]+)/chapters/(?P<comic>[\d\w-]+)(?:/Issue-)?')
|
||||
kissmcomicus_whole_regex = compile('https?://(?P<host>[^/]+)/comics/(?P<comic_name>[\d\w-]+)?')
|
||||
|
||||
lines = input_url.split('\n')
|
||||
for line in lines:
|
||||
found = re.search(kissmcomicus_single_regex, line)
|
||||
found = search(kissmcomicus_single_regex, line)
|
||||
if found:
|
||||
match = found.groupdict()
|
||||
if match['comic']:
|
||||
@ -96,7 +96,7 @@ def kissmcomicus_Url_Check(input_url, current_directory, logger):
|
||||
else:
|
||||
pass
|
||||
|
||||
found = re.search(kissmcomicus_whole_regex, line)
|
||||
found = search(kissmcomicus_whole_regex, line)
|
||||
if found:
|
||||
match = found.groupdict()
|
||||
if match['comic_name']:
|
||||
|
@ -1,18 +1,21 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import re
|
||||
import os
|
||||
import sys
|
||||
from __future__ import unicode_literals
|
||||
from __future__ import absolute_import
|
||||
from __future__ import print_function
|
||||
from re import search,sub,compile, findall
|
||||
from os import path,makedirs
|
||||
from sys import exit
|
||||
from bs4 import BeautifulSoup
|
||||
from downloader.universal import main as FileDownloader
|
||||
import cfscrape
|
||||
import logging
|
||||
from cfscrape import create_scraper
|
||||
from logging import debug, basicConfig, DEBUG
|
||||
|
||||
|
||||
def single_chapter(url, current_directory, logger):
|
||||
|
||||
scraper = cfscrape.create_scraper()
|
||||
scraper = create_scraper()
|
||||
|
||||
Page_Source = scraper.get(str(url)).content
|
||||
|
||||
@ -21,37 +24,38 @@ def single_chapter(url, current_directory, logger):
|
||||
meta = formatted.findAll('title')
|
||||
|
||||
meta_data = list(str(meta).split('\n'))
|
||||
# print(meta_data)
|
||||
|
||||
|
||||
try:
|
||||
Series_Name = str(meta_data[2])
|
||||
except Exception as e:
|
||||
# print (e)
|
||||
logging.debug("Error in Series Name : %s" % e)
|
||||
debug("Error in Series Name : %s" % e)
|
||||
Series_Name = "Unkown Series"
|
||||
|
||||
try:
|
||||
# Getting the Volume Number from the page source.
|
||||
volume_number = int(
|
||||
str(re.search('Vol\.(.*)\ Ch', Page_Source).group(1)).strip())
|
||||
str(search('Vol\.(.*)\ Ch', Page_Source).group(1)).strip())
|
||||
except Exception as e:
|
||||
logging.debug("Error in Volume Number : %s" % e)
|
||||
debug("Error in Volume Number : %s" % e)
|
||||
volume_number = '0'
|
||||
|
||||
try:
|
||||
chapter_number = str(meta_data[3])
|
||||
|
||||
except Exception as e:
|
||||
logging.debug("Error in Chapter Number : %s\nTrying Something else." % e)
|
||||
debug("Error in Chapter Number : %s\nTrying Something else." % e)
|
||||
try:
|
||||
# Getting the Volume Number from the page source.
|
||||
chapter_number = str(re.search('Ch\.(.*)\:', str(Page_Source)).group(1)).strip()
|
||||
chapter_number = str(search('Ch\.(.*)\:', str(Page_Source)).group(1)).strip()
|
||||
except Exception as e:
|
||||
logging.debug("Error in Chapter Number : %s" % e)
|
||||
debug("Error in Chapter Number : %s" % e)
|
||||
chapter_number = str('0')
|
||||
|
||||
all_links = re.findall('lstImages.push\(\"(.*)\"\)\;', str(formatted))
|
||||
logging.debug("Image Links : %s" % all_links)
|
||||
all_links = findall('lstImages.push\(\"(.*)\"\)\;', str(formatted))
|
||||
debug("Image Links : %s" % all_links)
|
||||
|
||||
if volume_number == '0':
|
||||
# Some series don't seem to have volumes mentioned. Let's assume
|
||||
@ -59,34 +63,41 @@ def single_chapter(url, current_directory, logger):
|
||||
Raw_File_Directory = str(Series_Name) + '/' + \
|
||||
"Chapter " + str(chapter_number)
|
||||
else:
|
||||
logging.debug("Found the Volume. Making a directory.")
|
||||
debug("Found the Volume. Making a directory.")
|
||||
Raw_File_Directory = str(Series_Name) + '/' + "Volume " + \
|
||||
str(volume_number) + '/' + "Chapter " + str(chapter_number)
|
||||
|
||||
# Fix for "Special Characters" in The series name
|
||||
File_Directory = re.sub(
|
||||
File_Directory = sub(
|
||||
'[^A-Za-z0-9\-\.\'\#\/ \[\]]+',
|
||||
'',
|
||||
Raw_File_Directory)
|
||||
|
||||
Directory_path = os.path.normpath(File_Directory)
|
||||
Directory_path = path.normpath(File_Directory)
|
||||
|
||||
print ('\n')
|
||||
print('{:^80}'.format('%s - %s') % (Series_Name, chapter_number))
|
||||
print('{:^80}'.format('=====================================================================\n'))
|
||||
|
||||
for elements in all_links:
|
||||
if not os.path.exists(File_Directory):
|
||||
os.makedirs(File_Directory)
|
||||
ddl_image = str(elements).strip()
|
||||
sane_url = str(elements).replace("%3a",":").replace("%2f","/").replace("&imgmax=30000","").replace("https://images1-focus-opensocial.googleusercontent.com/gadgets/proxy?container=focus&gadget=a&no_expand=1&resize_h=0&rewriteMime=image%2F*&url=","")
|
||||
# print(sane_url)
|
||||
if not path.exists(File_Directory):
|
||||
makedirs(File_Directory)
|
||||
ddl_image = str(sane_url).strip()
|
||||
|
||||
try:
|
||||
File_Name_Final = str(re.search(
|
||||
File_Name_Final = str(search(
|
||||
's0/(.*)\.([png]|[jpg])', ddl_image).group(1)).strip() + "." + str(ddl_image[-3:])
|
||||
except Exception as e:
|
||||
logging.debug("Error in File Name : %s" % e)
|
||||
File_Name_Final = str(re.search(
|
||||
'title\=(.*)\_(\d+)\.([png]|[jpg])', ddl_image).group(1)).strip() + "." + str(ddl_image[-3:])
|
||||
debug("Error in File Name : %s" % e)
|
||||
try:
|
||||
File_Name_Final = str(search(
|
||||
'title\=(.*)\_(\d+)\.([png]|[jpg])', ddl_image).group(1)).strip() + "." + str(ddl_image[-3:])
|
||||
except Exception as e:
|
||||
debug("Error inside Error : %s" % e)
|
||||
File_Name_Final = str(ddl_image[-6:])
|
||||
# print(File_Name_Final)
|
||||
FileDownloader(File_Name_Final, Directory_path, ddl_image, logger)
|
||||
|
||||
print('\n')
|
||||
@ -95,7 +106,7 @@ def single_chapter(url, current_directory, logger):
|
||||
|
||||
def whole_series(url, current_directory, logger):
|
||||
|
||||
scraper = cfscrape.create_scraper()
|
||||
scraper = create_scraper()
|
||||
|
||||
Page_Source = scraper.get(str(url)).content
|
||||
|
||||
@ -103,7 +114,7 @@ def whole_series(url, current_directory, logger):
|
||||
|
||||
soup = BeautifulSoup(Page_Source, "html.parser")
|
||||
all_links = soup.findAll('table', {'class': 'listing'})
|
||||
logging.debug("Chapter Links : %s" % all_links)
|
||||
debug("Chapter Links : %s" % all_links)
|
||||
|
||||
for link in all_links:
|
||||
x = link.findAll('a')
|
||||
@ -113,41 +124,46 @@ def whole_series(url, current_directory, logger):
|
||||
if "Manga" in ddl_image:
|
||||
final_url = "http://kissmanga.com" + ddl_image
|
||||
link_list.append(final_url)
|
||||
logging.debug("%s added in the bag!" % final_url)
|
||||
debug("%s added in the bag!" % final_url)
|
||||
|
||||
if int(len(link_list)) == '0':
|
||||
print("Sorry, I couldn't bypass KissManga's Hooman check. Please try again in a few minutes.")
|
||||
sys.exit()
|
||||
exit()
|
||||
|
||||
print("Total Chapters To Download : ", len(link_list))
|
||||
|
||||
for item in link_list:
|
||||
url = str(item)
|
||||
logging.debug("Chapter Links : %s" % url)
|
||||
debug("Chapter Links : %s" % url)
|
||||
single_chapter(url, current_directory, logger)
|
||||
|
||||
|
||||
def kissmanga_Url_Check(input_url, current_directory, logger):
|
||||
if logger == "True":
|
||||
logging.basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=logging.DEBUG)
|
||||
basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=DEBUG)
|
||||
|
||||
kissmanga_single_regex = re.compile(
|
||||
'https?://(?P<host>kissmanga.com)/Manga/(?P<Series_Name>[\d\w-]+)?/((?P<Volume>[Vol\-\d]+)|(.*)(?P<Chapter>[Ch\-\d]+))\-(?P<Chap_Name>[\d\w-]+)\?(?P<id>[\=\d\w-]+)')
|
||||
kissmanga_whole_regex = re.compile(
|
||||
kissmanga_single_regex = compile(
|
||||
'https?://(?P<host>kissmanga.com)/Manga/(?P<Series_Name>[\d\w-]+)?/((?P<Volume>[Vol\-\d]+)|(.*)(?P<Chapter>[Ch\d\w-]+))\-(?P<Chap_Name>[\d\w-]+)\?(?P<id>[\=\d\w-]+)')
|
||||
kissmanga_whole_regex = compile(
|
||||
'^https?://(?P<host>kissmanga.com)/Manga/(?P<comic>[\d\w\-]+)?(\/|.)$')
|
||||
|
||||
lines = input_url.split('\n')
|
||||
# print(lines)
|
||||
for line in lines:
|
||||
found = re.search(kissmanga_single_regex, line)
|
||||
found = search(kissmanga_single_regex, line)
|
||||
# print(found)
|
||||
if found:
|
||||
match = found.groupdict()
|
||||
if match['Chap_Name']:
|
||||
url = str(input_url)
|
||||
# print("Here inside!")
|
||||
single_chapter(url, current_directory, logger)
|
||||
# print("Passed it")
|
||||
else:
|
||||
pass
|
||||
|
||||
found = re.search(kissmanga_whole_regex, line)
|
||||
found = search(kissmanga_whole_regex, line)
|
||||
# print(found)
|
||||
if found:
|
||||
match = found.groupdict()
|
||||
if match['comic']:
|
||||
|
@ -3,12 +3,10 @@
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import print_function
|
||||
import requests
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import shutil
|
||||
from bs4 import BeautifulSoup
|
||||
from requests import get
|
||||
from re import search,sub,compile, findall
|
||||
from os import path,makedirs
|
||||
from sys import exit
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
|
||||
from selenium.webdriver.support.ui import WebDriverWait
|
||||
@ -16,7 +14,7 @@ from selenium.webdriver.support import expected_conditions as EC
|
||||
from selenium.webdriver.common.by import By
|
||||
from downloader.universal import main as FileDownloader
|
||||
from six.moves import range
|
||||
import logging
|
||||
from logging import debug, basicConfig, DEBUG
|
||||
|
||||
|
||||
def create_driver():
|
||||
@ -31,21 +29,21 @@ def create_driver():
|
||||
def single_chapter(driver,url,current_directory, logger):
|
||||
|
||||
try:
|
||||
Series_Name = str(re.search('manga\/(.*?)/v', url).group(1)).strip().replace('_',' ').title() # Getting the Series Name from the URL itself for naming the folder/dicrectories.
|
||||
Series_Name = str(search('manga\/(.*?)/v', url).group(1)).strip().replace('_',' ').title() # Getting the Series Name from the URL itself for naming the folder/dicrectories.
|
||||
except Exception as e:
|
||||
logging.debug("Error in Series Name : %s\nTrying something else." % e)
|
||||
Series_Name = str(re.search('manga\/(.*?)/c', url).group(1)).strip().replace('_',' ').title() # Getting the Series Name from the URL itself for naming the folder/dicrectories.
|
||||
debug("Error in Series Name : %s\nTrying something else." % e)
|
||||
Series_Name = str(search('manga\/(.*?)/c', url).group(1)).strip().replace('_',' ').title() # Getting the Series Name from the URL itself for naming the folder/dicrectories.
|
||||
|
||||
try:
|
||||
volume_number = "Volume " + str(re.search('v(.*?)/c', url).group(1)).strip() # Getting the volume count from the URL itself for naming the folder/dicrectories.
|
||||
volume_number = "Volume " + str(search('v(.*?)/c', url).group(1)).strip() # Getting the volume count from the URL itself for naming the folder/dicrectories.
|
||||
except Exception as e:
|
||||
logging.debug("Error in Volume Number : %s" % e)
|
||||
debug("Error in Volume Number : %s" % e)
|
||||
volume_number = "Volume 01"
|
||||
|
||||
try:
|
||||
chapter_number = int(str(re.search('\/c(.*?)/\d', url).group(1)).strip()) # Getting the chapter count from the URL itself for naming the folder/dicrectories in integer.
|
||||
chapter_number = int(str(search('\/c(.*?)/\d', url).group(1)).strip()) # Getting the chapter count from the URL itself for naming the folder/dicrectories in integer.
|
||||
except Exception as e:
|
||||
logging.debug("Error in Chapter Number : %s\nTrying something else." % e)
|
||||
debug("Error in Chapter Number : %s\nTrying something else." % e)
|
||||
chapter_number = 0 # Getting the chapter count from the URL itself for naming the folder/dicrectories in float.
|
||||
|
||||
if volume_number == '0':
|
||||
@ -53,9 +51,9 @@ def single_chapter(driver,url,current_directory, logger):
|
||||
else:
|
||||
Raw_File_Directory = str(Series_Name)+'/'+str(volume_number)+'/'+"Chapter "+str(chapter_number)
|
||||
|
||||
File_Directory = re.sub('[^A-Za-z0-9\-\.\'\#\/ \[\]]+', '', Raw_File_Directory) # Fix for "Special Characters" in The series name
|
||||
File_Directory = sub('[^A-Za-z0-9\-\.\'\#\/ \[\]]+', '', Raw_File_Directory) # Fix for "Special Characters" in The series name
|
||||
|
||||
Directory_path = os.path.normpath(File_Directory)
|
||||
Directory_path = path.normpath(File_Directory)
|
||||
|
||||
driver.get(url)
|
||||
|
||||
@ -65,7 +63,7 @@ def single_chapter(driver,url,current_directory, logger):
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logging.debug("Error in loading the webpage : %s\nScreenshot saved." % e)
|
||||
debug("Error in loading the webpage : %s\nScreenshot saved." % e)
|
||||
driver.save_screenshot("error.png")
|
||||
print("Couldn't load the element. I'll try to move ahead in any case.")
|
||||
print('\n')
|
||||
@ -75,27 +73,27 @@ def single_chapter(driver,url,current_directory, logger):
|
||||
elem = driver.find_element_by_xpath("//*")
|
||||
Page_Source = str(elem.get_attribute("outerHTML").encode('utf-8'))
|
||||
|
||||
First_chapter_link = str(re.search('http://(.*?)/(.*?)/manga/(.*?)/(.*?)/compressed/(.*?)\.jpg', Page_Source).group(0)).strip() # Fix if they change the CDN all of a sudden.
|
||||
First_chapter_link = str(search('http://(.*?)/(.*?)/manga/(.*?)/(.*?)/compressed/(.*?)\.jpg', Page_Source).group(0)).strip() # Fix if they change the CDN all of a sudden.
|
||||
|
||||
current_chapter_count = int(str(re.search('current_page\=(.*?)\;', Page_Source).group(1)).strip()) # Getting the last chapter number from the URL itself for naming the folder/dicrectories.
|
||||
current_chapter_count = int(str(search('current_page\=(.*?)\;', Page_Source).group(1)).strip()) # Getting the last chapter number from the URL itself for naming the folder/dicrectories.
|
||||
|
||||
last_chapter_count = int(str(re.search('total_pages\=(.*?)\;', Page_Source).group(1)).strip()) # Getting the last chapter number from the URL itself for naming the folder/dicrectories.
|
||||
last_chapter_count = int(str(search('total_pages\=(.*?)\;', Page_Source).group(1)).strip()) # Getting the last chapter number from the URL itself for naming the folder/dicrectories.
|
||||
|
||||
print('\n')
|
||||
print('{:^80}'.format('%s - %s')%(Series_Name,chapter_number))
|
||||
print('{:^80}'.format('=====================================================================\n'))
|
||||
|
||||
if not os.path.exists(File_Directory):
|
||||
os.makedirs(File_Directory)
|
||||
if not path.exists(File_Directory):
|
||||
makedirs(File_Directory)
|
||||
|
||||
for x in range(current_chapter_count,last_chapter_count+1):
|
||||
|
||||
driver.refresh()
|
||||
File_Name_Final = str(x)+'.jpg'
|
||||
link_container = driver.find_element_by_xpath('//*[@id="image"]')
|
||||
logging.debug("Link Container : %s" % link_container)
|
||||
debug("Link Container : %s" % link_container)
|
||||
ddl_image = str(link_container.get_attribute('src'))
|
||||
logging.debug("Image Link : %s" % ddl_image)
|
||||
debug("Image Link : %s" % ddl_image)
|
||||
FileDownloader(File_Name_Final,Directory_path,ddl_image, logger)
|
||||
driver.find_element_by_xpath('//*[@id="top_bar"]/div/a[2]').click()
|
||||
|
||||
@ -109,7 +107,7 @@ def whole_series(url,current_directory, logger):
|
||||
print("Couldn't get the URL. Please report it on Github Repository.")
|
||||
|
||||
try:
|
||||
Series_Name = str(re.search('manga\/(.*?)/', url).group(1)).strip() # Getting the Series Name from the URL itself for naming the folder/dicrectories.
|
||||
Series_Name = str(search('manga\/(.*?)/', url).group(1)).strip() # Getting the Series Name from the URL itself for naming the folder/dicrectories.
|
||||
except Exception as e:
|
||||
print('Check if the URL is correct or not. Report on Github.')
|
||||
|
||||
@ -119,17 +117,17 @@ def whole_series(url,current_directory, logger):
|
||||
|
||||
}
|
||||
|
||||
response = requests.get(url, headers=headers)
|
||||
response = get(url, headers=headers)
|
||||
Page_source = str(response.text.encode('utf-8'))
|
||||
|
||||
try:
|
||||
chapter_link_format = "http://mangafox.me/manga/"+str(Series_Name)+"/v"
|
||||
links = re.findall('{0}(.*?)html'.format(chapter_link_format),Page_source)
|
||||
links = findall('{0}(.*?)html'.format(chapter_link_format),Page_source)
|
||||
|
||||
if len(links) == 0:
|
||||
chapter_link_format = "http://mangafox.me/manga/"+str(Series_Name)+"/c"
|
||||
#print chapter_link_format
|
||||
links = re.findall('{0}(.*?)html'.format(chapter_link_format),Page_source)
|
||||
links = findall('{0}(.*?)html'.format(chapter_link_format),Page_source)
|
||||
|
||||
|
||||
except Exception as e:
|
||||
@ -149,14 +147,14 @@ def whole_series(url,current_directory, logger):
|
||||
|
||||
def mangafox_Url_Check(input_url,current_directory, logger):
|
||||
if logger == "True":
|
||||
logging.basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=logging.DEBUG)
|
||||
basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=DEBUG)
|
||||
|
||||
mangafox_single_regex = re.compile('https?://(?P<host>mangafox.me)/manga/(?P<comic>[\d\w-]+)(?P<Volume>(/v\d+)|(.))/(?P<chapter>c\d+(\.\d)?)?/(?P<issue>\d+)?\.html')
|
||||
mangafox_whole_regex = re.compile('^https?://(?P<host>mangafox.me)/manga/(?P<comic_series>[\d\w-]+)?|(\/)$')
|
||||
mangafox_single_regex = compile('https?://(?P<host>mangafox.me)/manga/(?P<comic>[\d\w-]+)(?P<Volume>(/v\d+)|(.))/(?P<chapter>c\d+(\.\d)?)?/(?P<issue>\d+)?\.html')
|
||||
mangafox_whole_regex = compile('^https?://(?P<host>mangafox.me)/manga/(?P<comic_series>[\d\w-]+)?|(\/)$')
|
||||
|
||||
lines = input_url.split('\n')
|
||||
for line in lines:
|
||||
found = re.search(mangafox_single_regex, line)
|
||||
found = search(mangafox_single_regex, line)
|
||||
if found:
|
||||
match = found.groupdict()
|
||||
if match['issue']:
|
||||
@ -168,13 +166,13 @@ def mangafox_Url_Check(input_url,current_directory, logger):
|
||||
print(e)
|
||||
driver.quit()
|
||||
driver.quit()
|
||||
sys.exit()
|
||||
exit()
|
||||
else:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
found = re.search(mangafox_whole_regex, line)
|
||||
found = search(mangafox_whole_regex, line)
|
||||
if found:
|
||||
match = found.groupdict()
|
||||
if match['comic_series']:
|
||||
@ -184,6 +182,6 @@ def mangafox_Url_Check(input_url,current_directory, logger):
|
||||
whole_series(url,current_directory, logger)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
sys.exit()
|
||||
exit()
|
||||
else:
|
||||
pass
|
||||
|
@ -6,23 +6,23 @@ from __future__ import absolute_import
|
||||
from __future__ import print_function
|
||||
from builtins import str
|
||||
from downloader.universal import main as FileDownloader
|
||||
import re
|
||||
import sys
|
||||
import cfscrape
|
||||
import os
|
||||
from re import search,sub,compile, findall
|
||||
from os import path,makedirs
|
||||
from sys import exit
|
||||
from bs4 import BeautifulSoup
|
||||
import logging
|
||||
from cfscrape import create_scraper
|
||||
from logging import debug, basicConfig, DEBUG
|
||||
|
||||
|
||||
def readcomic_Url_Check(input_url, current_directory, logger):
|
||||
if logger == "True":
|
||||
logging.basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=logging.DEBUG)
|
||||
basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=DEBUG)
|
||||
|
||||
Issue_Regex = re.compile('https?://(?P<host>[^/]+)/Comic/(?P<comic>[\d\w-]+)(?:/Issue-)?(?P<issue>\d+)?')
|
||||
Annual_Regex = re.compile('https?://(?P<host>[^/]+)/Comic/(?P<comic>[\d\w-]+)(?:/Annual-)?(?P<issue>\d+)?')
|
||||
Issue_Regex = compile('https?://(?P<host>[^/]+)/Comic/(?P<comic>[\d\w-]+)(?:/Issue-)?(?P<issue>\d+)?')
|
||||
Annual_Regex = compile('https?://(?P<host>[^/]+)/Comic/(?P<comic>[\d\w-]+)(?:/Annual-)?(?P<issue>\d+)?')
|
||||
lines = input_url.split('\n')
|
||||
for line in lines:
|
||||
found = re.search(Issue_Regex, line)
|
||||
found = search(Issue_Regex, line)
|
||||
if found:
|
||||
match = found.groupdict()
|
||||
if match['issue']:
|
||||
@ -34,7 +34,7 @@ def readcomic_Url_Check(input_url, current_directory, logger):
|
||||
url = str(input_url)
|
||||
Whole_Series(url, current_directory, logger)
|
||||
|
||||
found = re.search(Annual_Regex, line)
|
||||
found = search(Annual_Regex, line)
|
||||
if found:
|
||||
match = found.groupdict()
|
||||
|
||||
@ -49,11 +49,11 @@ def readcomic_Url_Check(input_url, current_directory, logger):
|
||||
if not found:
|
||||
print()
|
||||
'Please Check Your URL one again!'
|
||||
sys.exit()
|
||||
exit()
|
||||
|
||||
def Single_Issue(url, current_directory, logger):
|
||||
|
||||
scraper = cfscrape.create_scraper()
|
||||
scraper = create_scraper()
|
||||
connection = scraper.get(url).content
|
||||
|
||||
Series_Name_Splitter = url.split('/')
|
||||
@ -61,48 +61,48 @@ def Single_Issue(url, current_directory, logger):
|
||||
Issue_Number_Splitter = str(Series_Name_Splitter[5])
|
||||
Issue_Or_Annual_Split = str(Issue_Number_Splitter).split("?")
|
||||
Issue_Or_Annual = str(Issue_Or_Annual_Split[0]).replace("-", " ").strip()
|
||||
reg = re.findall(r'[(\d)]+', Issue_Number_Splitter)
|
||||
reg = findall(r'[(\d)]+', Issue_Number_Splitter)
|
||||
|
||||
Issue_Number = str(reg[0])
|
||||
|
||||
Raw_File_Directory = str(Series_Name) + '/' + "Chapter " + str(Issue_Or_Annual)
|
||||
|
||||
File_Directory = re.sub('[^A-Za-z0-9\-\.\'\#\/ ]+', '',
|
||||
File_Directory = sub('[^A-Za-z0-9\-\.\'\#\/ ]+', '',
|
||||
Raw_File_Directory) # Fix for "Special Characters" in The series name
|
||||
|
||||
Directory_path = os.path.normpath(File_Directory)
|
||||
Directory_path = path.normpath(File_Directory)
|
||||
|
||||
print('\n')
|
||||
print('{:^80}'.format('=====================================================================\n'))
|
||||
print('{:^80}'.format('%s - %s') % (Series_Name, Issue_Or_Annual))
|
||||
print('{:^80}'.format('=====================================================================\n'))
|
||||
|
||||
linksList = re.findall('lstImages.push\(\"(.*?)\"\)\;', str(connection))
|
||||
logging.debug("Image Links : %s" % linksList)
|
||||
linksList = findall('lstImages.push\(\"(.*?)\"\)\;', str(connection))
|
||||
debug("Image Links : %s" % linksList)
|
||||
|
||||
for link in linksList:
|
||||
if not os.path.exists(File_Directory):
|
||||
os.makedirs(File_Directory)
|
||||
if not path.exists(File_Directory):
|
||||
makedirs(File_Directory)
|
||||
fileName = str(linksList.index(link)) + ".jpg"
|
||||
# logging.debug("Name of File : %s" % fileName)
|
||||
# debug("Name of File : %s" % fileName)
|
||||
FileDownloader(fileName, Directory_path, link, logger)
|
||||
|
||||
def Whole_Series(url, current_directory, logger):
|
||||
|
||||
scraper = cfscrape.create_scraper()
|
||||
scraper = create_scraper()
|
||||
connection = scraper.get(url).content
|
||||
|
||||
soup = BeautifulSoup(connection, "html.parser")
|
||||
# logging.debug("Soup : %s" % soup)
|
||||
# debug("Soup : %s" % soup)
|
||||
all_links = soup.findAll('table', {'class': 'listing'})
|
||||
# logging.debug("Issue Links : %s" % all_links)
|
||||
# debug("Issue Links : %s" % all_links)
|
||||
|
||||
for link in all_links:
|
||||
# logging.debug("link : %s" % link)
|
||||
# debug("link : %s" % link)
|
||||
x = link.findAll('a')
|
||||
logging.debug("Actual Link : %s" % x)
|
||||
debug("Actual Link : %s" % x)
|
||||
for a in x:
|
||||
url = "http://readcomiconline.to" + a['href']
|
||||
logging.debug("Final URL : %s" % url)
|
||||
debug("Final URL : %s" % url)
|
||||
Single_Issue(url, current_directory=current_directory, logger=logger)
|
||||
print("Finished Downloading")
|
||||
|
@ -4,61 +4,62 @@
|
||||
from __future__ import absolute_import
|
||||
from __future__ import print_function
|
||||
import requests
|
||||
import re
|
||||
import os
|
||||
import sys
|
||||
from more_itertools import unique_everseen
|
||||
from re import search,sub,compile, findall
|
||||
from os import path,makedirs
|
||||
from sys import exit
|
||||
from bs4 import BeautifulSoup
|
||||
from downloader.cookies_required import main as FileDownloader
|
||||
import logging
|
||||
from logging import debug, basicConfig, DEBUG
|
||||
from requests import Session,cookies
|
||||
|
||||
|
||||
def single_chapter(url, current_directory, logger):
|
||||
|
||||
if not url:
|
||||
print("Couldn't get the URL. Please report it on Github Repository.")
|
||||
sys.exit(0)
|
||||
exit(0)
|
||||
|
||||
headers = {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'
|
||||
|
||||
}
|
||||
|
||||
s = requests.Session()
|
||||
s = Session()
|
||||
response = s.get(url, headers=headers)
|
||||
tasty_cookies = response.cookies
|
||||
|
||||
Page_source = str(response.text.encode('utf-8'))
|
||||
|
||||
Series_Name = str(re.search('\/read\/(.*?)/', url).group(1)).strip().replace('_',' ').title() # Getting the Series Name from the URL itself for naming the folder/dicrectories.
|
||||
Series_Name = str(search('\/read\/(.*?)/', url).group(1)).strip().replace('_',' ').title() # Getting the Series Name from the URL itself for naming the folder/dicrectories.
|
||||
|
||||
try:
|
||||
chapter_number = int(str(re.search('0\/(.*?)/', url).group(1)).strip().replace('0','').replace('/','')) # Getting the chapter count from the URL itself for naming the folder/dicrectories in integer.
|
||||
chapter_number = int(str(search('0\/(.*?)/', url).group(1)).strip().replace('0','').replace('/','')) # Getting the chapter count from the URL itself for naming the folder/dicrectories in integer.
|
||||
except Exception as e:
|
||||
logging.debug("Error in Chapter Number : %s" % e)
|
||||
debug("Error in Chapter Number : %s" % e)
|
||||
chapter_number = 0 # Name the chapter 0 if nothing INTEGER type comes up
|
||||
|
||||
Raw_File_Directory = str(Series_Name)+'/'+"Chapter "+str(chapter_number)
|
||||
File_Directory = re.sub('[^A-Za-z0-9\-\.\'\#\/ ]+', '', Raw_File_Directory) # Fix for "Special Characters" in The series name
|
||||
Directory_path = os.path.normpath(File_Directory)
|
||||
File_Directory = sub('[^A-Za-z0-9\-\.\'\#\/ ]+', '', Raw_File_Directory) # Fix for "Special Characters" in The series name
|
||||
Directory_path = path.normpath(File_Directory)
|
||||
|
||||
|
||||
ddl_image_list = re.findall('comics(.*?)\"', Page_source)
|
||||
ddl_image_list = findall('comics(.*?)\"', Page_source)
|
||||
|
||||
ddl_list = list(unique_everseen(ddl_image_list))
|
||||
logging.debug("Image Links : %s" % ddl_list)
|
||||
debug("Image Links : %s" % ddl_list)
|
||||
|
||||
print('\n')
|
||||
print('{:^80}'.format('%s - %s')%(Series_Name,chapter_number))
|
||||
print('{:^80}'.format('=====================================================================\n'))
|
||||
|
||||
for i in ddl_list:
|
||||
if not os.path.exists(File_Directory):
|
||||
os.makedirs(File_Directory)
|
||||
if not path.exists(File_Directory):
|
||||
makedirs(File_Directory)
|
||||
ddl_image = "http://yomanga.co/reader/content/comics"+str(i).replace('"','').replace('\\','')
|
||||
logging.debug("Image Download Link : %s" % ddl_image)
|
||||
debug("Image Download Link : %s" % ddl_image)
|
||||
|
||||
File_Name_Final = str(re.findall('\/(\d+)\.[jpg]|[png]', i)).replace("[","").replace("]","").replace("'","").replace(",","").strip()+"."+str(re.findall('\d\.(.*?)$', str(i))).replace(",","").replace("[","").replace("]","").replace("'","").strip()
|
||||
File_Name_Final = str(findall('\/(\d+)\.[jpg]|[png]', i)).replace("[","").replace("]","").replace("'","").replace(",","").strip()+"."+str(findall('\d\.(.*?)$', str(i))).replace(",","").replace("[","").replace("]","").replace("'","").strip()
|
||||
FileDownloader(File_Name_Final,Directory_path,tasty_cookies,ddl_image, logger)
|
||||
|
||||
print('\n')
|
||||
@ -73,36 +74,36 @@ def whole_series(url, current_directory, logger):
|
||||
|
||||
}
|
||||
|
||||
s = requests.Session()
|
||||
s = Session()
|
||||
response = s.get(url, headers=headers)
|
||||
tasty_cookies = response.cookies
|
||||
|
||||
Page_source = str(response.text.encode('utf-8'))
|
||||
|
||||
Series_Name = str(re.search('\/series\/(.*?)/', url).group(1)).strip().replace('_',' ').title() # Getting the Series Name from the URL itself for naming the folder/dicrectories.
|
||||
Series_Name = str(search('\/series\/(.*?)/', url).group(1)).strip().replace('_',' ').title() # Getting the Series Name from the URL itself for naming the folder/dicrectories.
|
||||
|
||||
soup = BeautifulSoup(Page_source, 'html.parser')
|
||||
|
||||
chapter_text = soup.findAll('div',{'class':'title'})
|
||||
logging.debug("Chapter Text : %s" % chapter_text)
|
||||
debug("Chapter Text : %s" % chapter_text)
|
||||
|
||||
for link in chapter_text:
|
||||
x = link.findAll('a')
|
||||
for a in x:
|
||||
url = a['href']
|
||||
logging.debug("Chapter URL : %s" % url)
|
||||
debug("Chapter URL : %s" % url)
|
||||
single_chapter(url, current_directory, logger)
|
||||
|
||||
def yomanga_Url_Check(input_url, current_directory, logger):
|
||||
if logger == "True":
|
||||
logging.basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=logging.DEBUG)
|
||||
basicConfig(format='%(levelname)s: %(message)s', filename="Error Log.log", level=DEBUG)
|
||||
|
||||
yomanga_single_regex = re.compile('https?://(?P<host>yomanga.co)/reader/read/(?P<comic_single>[\d\w-]+)/en/(?P<volume>\d+)?/(?P<Chapter>\d+)?()|(/page/(?P<PageNumber>\d+)?)')
|
||||
yomanga_whole_regex = re.compile('^https?://(?P<host>yomanga.co)/reader/(?P<series>series)?/(?P<comic>[\d\w-]+)?(\/|.)$')
|
||||
yomanga_single_regex = compile('https?://(?P<host>yomanga.co)/reader/read/(?P<comic_single>[\d\w-]+)/en/(?P<volume>\d+)?/(?P<Chapter>\d+)?()|(/page/(?P<PageNumber>\d+)?)')
|
||||
yomanga_whole_regex = compile('^https?://(?P<host>yomanga.co)/reader/(?P<series>series)?/(?P<comic>[\d\w-]+)?(\/|.)$')
|
||||
|
||||
lines = input_url.split('\n')
|
||||
for line in lines:
|
||||
found = re.search(yomanga_single_regex, line)
|
||||
found = search(yomanga_single_regex, line)
|
||||
if found:
|
||||
match = found.groupdict()
|
||||
if match['Chapter']:
|
||||
@ -113,7 +114,7 @@ def yomanga_Url_Check(input_url, current_directory, logger):
|
||||
|
||||
|
||||
|
||||
found = re.search(yomanga_whole_regex, line)
|
||||
found = search(yomanga_whole_regex, line)
|
||||
if found:
|
||||
match = found.groupdict()
|
||||
if match['comic']:
|
||||
|
@ -4,4 +4,4 @@ Date Format : YY/MM/DD
|
||||
|
||||
'''
|
||||
|
||||
__version__ = '2017.01.22'
|
||||
__version__ = '2017.02.16'
|
||||
|
@ -15,4 +15,6 @@
|
||||
- Added a YouTube Tutorial for the script [2016.12.30]
|
||||
- Site support for readcomiconlin.to [2017.01.02]
|
||||
- Added `Verbose Logging` [2017.01.22]
|
||||
- Fixed chapter count error in Kissmanga [2017.01.22]
|
||||
- Fixed chapter count error in Kissmanga [2017.01.22]
|
||||
- Fixed #4 [2017.02.16]
|
||||
- Optimized Imports [2017.02.16]
|
@ -187,10 +187,9 @@ You can check the changelog [**`HERE`**](http://comic-dl.readthedocs.io/en/lates
|
||||
If your're planning to open an issue for the script or ask for a new feature or anything that requires opening an Issue, then please do keep these things in mind.
|
||||
|
||||
### Reporting Issues
|
||||
If you're about to report some issue with the script, then please do include these things :
|
||||
* The command your entered. Yes, with the URL
|
||||
* The output of that command. You can simply copy the text from the terminal/command prompt and paste it. Make sure you put that inside inside `` (tilde).
|
||||
* Your Operating System and python version.
|
||||
If you're going to report an issue, then please run the script again with the "-v or --verbose" argument. It should generate a file in the same directory, with the name "Error Log.log". Copy that log file's data and post it on a [Gist](https://gist.github.com/) and share that gist's link while reporting the issue here. Make sure you **EDIT OUT YOUR USERNAME AND PASSWORD**, if supplied within the command.
|
||||
|
||||
If you don't include the verbose log, there are chances it'll take time to fix the issue(s) you're having.
|
||||
|
||||
### Suggesting A Feature
|
||||
If you're here to make suggestions, please follow the basic syntax to post a request :
|
||||
|
@ -1,2 +1,2 @@
|
||||
[metadata]
|
||||
description-file = README.md
|
||||
description-file = ReadMe.md
|
60
setup.py
60
setup.py
@ -1,55 +1,26 @@
|
||||
#!/usr/bin/env python
|
||||
# coding: utf-8
|
||||
from distutils.core import setup
|
||||
|
||||
import os
|
||||
import sys
|
||||
import comic_dl
|
||||
|
||||
try:
|
||||
from setuptools import setup
|
||||
except ImportError:
|
||||
from distutils.core import setup
|
||||
|
||||
if sys.argv[-1] == 'publish':
|
||||
os.system('python setup.py sdist upload')
|
||||
sys.exit()
|
||||
|
||||
readme = open('README.txt').read()
|
||||
readme = open('ReadMe.md').read()
|
||||
history = open('Changelog.md').read()
|
||||
|
||||
exec(compile(open('comic_dl/version.py').read(),
|
||||
'comic_dl/version.py', 'exec'))
|
||||
|
||||
setup(
|
||||
name='comic-dl',
|
||||
version=__version__,
|
||||
description='Comic-dl is a command line tool to download Comics and Manga from various Manga and Comic sites easily.',
|
||||
long_description=readme + '\n\n' + history,
|
||||
author='Xonshiz',
|
||||
author_email='xonshiz@psychoticelites.com',
|
||||
url='https://github.com/Xonshiz/comic-dl',
|
||||
download_url = 'https://codeload.github.com/Xonshiz/comic-dl/legacy.tar.gz/v2016.11.26(1)',
|
||||
packages=[
|
||||
'comic_dl',
|
||||
'comic_dl.sites',
|
||||
'comic_dl.downloader',
|
||||
],
|
||||
package_dir={'comic_dl': 'comic_dl'},
|
||||
include_package_data=True,
|
||||
install_requires=["selenium",
|
||||
name = 'comic_dl',
|
||||
packages = ['comic_dl','comic_dl.sites','comic_dl.downloader'], # this must be the same as the name above
|
||||
install_requires=["selenium",
|
||||
"requests",
|
||||
"more_itertools",
|
||||
"cfscrape",
|
||||
"bs4"
|
||||
],
|
||||
entry_points={
|
||||
'console_scripts': [
|
||||
'comic_dl = comic_dl:main'
|
||||
],
|
||||
},
|
||||
license="MIT Licence",
|
||||
zip_safe=False,
|
||||
keywords = ['comic-dl', 'cli', 'comic downloader','manga downloader','mangafox','batoto','kissmanga'],
|
||||
classifiers=[
|
||||
version = '2017.01.22',
|
||||
description = 'Comic-dl is a command line tool to download Comics and Manga from various Manga and Comic sites easily.',
|
||||
long_description=readme + '\n\n' + history,
|
||||
author = 'Xonshiz',
|
||||
author_email = 'xonshiz@psychoticelites.com',
|
||||
url='https://github.com/Xonshiz/comic-dl',
|
||||
download_url = 'https://codeload.github.com/Xonshiz/comic-dl/legacy.tar.gz/v2016.11.26(1)',
|
||||
keywords = ['comic-dl', 'cli', 'comic downloader','manga downloader','mangafox','batoto','kissmanga','comic naver'],
|
||||
classifiers=[
|
||||
'Development Status :: 5 - Production/Stable',
|
||||
'Environment :: Console',
|
||||
'Intended Audience :: End Users/Desktop',
|
||||
@ -65,5 +36,4 @@ setup(
|
||||
'Operating System :: OS Independent',
|
||||
'Topic :: Multimedia :: Graphics'
|
||||
],
|
||||
#test_suite='tests',
|
||||
)
|
Loading…
x
Reference in New Issue
Block a user