测试版1.0
This commit is contained in:
1 parent
ae570bfad5
commit
c83755bf4f
6 files changed
+1033
-171
No files matched your search
@@ -0,0 +1,9 @@
|
||||
|
||||
1
|
||||
2
|
||||
__pycache__/download.cpython-36.pyc
|
||||
__pycache__/upload.cpython-36.pyc
|
||||
chromedriver.exe
|
||||
chromedriver.log
|
||||
external.py
|
||||
*.mp4
|
||||
Generated
+6
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
Generated
+500
-32
@@ -1,7 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="58acc6c6-8ea5-48bb-95b2-31fcec9a4358" name="Default" comment="" />
|
||||
<list default="true" id="58acc6c6-8ea5-48bb-95b2-31fcec9a4358" name="Default" comment="">
|
||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/download.py" />
|
||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/start.py" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/upload.py" afterPath="$PROJECT_DIR$/upload.py" />
|
||||
</list>
|
||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||
<option name="TRACKING_ENABLED" value="true" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
@@ -10,34 +15,167 @@
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="FileEditorManager">
|
||||
<leaf>
|
||||
<file leaf-file-name="upload.py" pinned="false" current-in-tab="true">
|
||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="375">
|
||||
<file leaf-file-name="upload.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/upload.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="207">
|
||||
<caret line="9" column="32" lean-forward="true" selection-start-line="9" selection-start-column="32" selection-end-line="9" selection-end-column="32" />
|
||||
<state relative-caret-position="-1202">
|
||||
<caret line="118" column="10" lean-forward="true" selection-start-line="118" selection-start-column="10" selection-end-line="118" selection-end-column="10" />
|
||||
<folding>
|
||||
<element signature="e#0#30#0" expanded="true" />
|
||||
<element signature="e#0#9#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="download.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/download.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="276">
|
||||
<caret line="24" column="10" lean-forward="true" selection-start-line="24" selection-start-column="10" selection-end-line="24" selection-end-column="10" />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="external.py" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/external.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="253">
|
||||
<caret line="290" column="12" lean-forward="false" selection-start-line="290" selection-start-column="12" selection-end-line="290" selection-end-column="12" />
|
||||
<folding>
|
||||
<element signature="e#0#39#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="start.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/start.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="897">
|
||||
<caret line="39" column="25" lean-forward="false" selection-start-line="39" selection-start-column="25" selection-end-line="39" selection-end-column="25" />
|
||||
<folding>
|
||||
<element signature="e#0#50#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="__init__.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/__init__.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="2277">
|
||||
<caret line="99" column="21" lean-forward="false" selection-start-line="99" selection-start-column="21" selection-end-line="99" selection-end-column="21" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="common.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/downloader/common.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="8142">
|
||||
<caret line="370" column="36" lean-forward="false" selection-start-line="370" selection-start-column="36" selection-end-line="370" selection-end-column="36" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="http.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/downloader/http.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="2783">
|
||||
<caret line="139" column="12" lean-forward="false" selection-start-line="139" selection-start-column="12" selection-end-line="139" selection-end-column="12" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="external.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/downloader/external.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="247">
|
||||
<caret line="290" column="89" lean-forward="true" selection-start-line="290" selection-start-column="8" selection-end-line="290" selection-end-column="89" />
|
||||
<folding>
|
||||
<element signature="e#0#39#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="utils.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/utils.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="62215">
|
||||
<caret line="2770" column="30" lean-forward="false" selection-start-line="2770" selection-start-column="30" selection-end-line="2770" selection-end-column="30" />
|
||||
<folding>
|
||||
<marker date="1516152052068" expanded="true" signature="44445:45495" ph="..." />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="YoutubeDL.py" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/YoutubeDL.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="40756">
|
||||
<caret line="1875" column="38" lean-forward="false" selection-start-line="1875" selection-start-column="24" selection-end-line="1875" selection-end-column="38" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
</leaf>
|
||||
</component>
|
||||
<component name="IdeDocumentHistory">
|
||||
<option name="CHANGED_PATHS">
|
||||
<component name="FileTemplateManagerImpl">
|
||||
<option name="RECENT_TEMPLATES">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/upload.py" />
|
||||
<option value="Python Script" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectFrameBounds">
|
||||
<option name="x" value="420" />
|
||||
<option name="y" value="59" />
|
||||
<option name="width" value="1352" />
|
||||
<option name="height" value="895" />
|
||||
<component name="FindInProjectRecents">
|
||||
<findStrings>
|
||||
<find>DEFAULT_OUTTMPL</find>
|
||||
<find>postprocessors</find>
|
||||
<find>pp_class</find>
|
||||
<find>[ffmpeg]</find>
|
||||
<find>set_downloader</find>
|
||||
<find>to</find>
|
||||
<find>download</find>
|
||||
<find>add_post_processor</find>
|
||||
<find>keepvideo</find>
|
||||
<find>keep_fragments</find>
|
||||
<find>ffmpeg</find>
|
||||
<find>TwitchStreamIE</find>
|
||||
<find>processe</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="$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/downloader/hls.py" />
|
||||
<option value="$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/downloader/external.py" />
|
||||
<option value="$PROJECT_DIR$/start.py" />
|
||||
<option value="$PROJECT_DIR$/upload.py" />
|
||||
<option value="$PROJECT_DIR$/external.py" />
|
||||
<option value="$PROJECT_DIR$/download.py" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectFrameBounds" extendedState="1">
|
||||
<option name="x" value="416" />
|
||||
<option name="y" value="147" />
|
||||
<option name="width" value="1352" />
|
||||
<option name="height" value="879" />
|
||||
</component>
|
||||
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
|
||||
<component name="ProjectView">
|
||||
<navigator currentView="ProjectPane" proportions="" version="1">
|
||||
<flattenPackages />
|
||||
@@ -53,6 +191,8 @@
|
||||
<foldersAlwaysOnTop value="true" />
|
||||
</navigator>
|
||||
<panes>
|
||||
<pane id="Scope" />
|
||||
<pane id="Scratches" />
|
||||
<pane id="ProjectPane">
|
||||
<subPane>
|
||||
<expand>
|
||||
@@ -64,12 +204,11 @@
|
||||
<select />
|
||||
</subPane>
|
||||
</pane>
|
||||
<pane id="Scratches" />
|
||||
<pane id="Scope" />
|
||||
</panes>
|
||||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
|
||||
<property name="last_opened_file_path" value="D:/FlaskWeb" />
|
||||
<property name="settings.editor.selected.configurable" value="com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" />
|
||||
</component>
|
||||
<component name="RunDashboard">
|
||||
<option name="ruleStates">
|
||||
@@ -83,7 +222,41 @@
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="RunManager" selected="Python.upload">
|
||||
<component name="RunManager" selected="Python.download">
|
||||
<configuration name="download" type="PythonConfigurationType" factoryName="Python" temporary="true">
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<module name="bilibiliupload" />
|
||||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/download.py" />
|
||||
<option name="PARAMETERS" value="" />
|
||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||
<option name="EMULATE_TERMINAL" value="false" />
|
||||
</configuration>
|
||||
<configuration name="start" type="PythonConfigurationType" factoryName="Python" temporary="true">
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<module name="bilibiliupload" />
|
||||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/start.py" />
|
||||
<option name="PARAMETERS" value="" />
|
||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||
<option name="EMULATE_TERMINAL" value="false" />
|
||||
</configuration>
|
||||
<configuration name="upload" type="PythonConfigurationType" factoryName="Python">
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
@@ -101,10 +274,24 @@
|
||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||
<option name="EMULATE_TERMINAL" value="false" />
|
||||
</configuration>
|
||||
<list size="3">
|
||||
<item index="0" class="java.lang.String" itemvalue="Python.upload" />
|
||||
<item index="1" class="java.lang.String" itemvalue="Python.download" />
|
||||
<item index="2" class="java.lang.String" itemvalue="Python.start" />
|
||||
</list>
|
||||
<recent_temporary>
|
||||
<list size="2">
|
||||
<item index="0" class="java.lang.String" itemvalue="Python.download" />
|
||||
<item index="1" class="java.lang.String" itemvalue="Python.start" />
|
||||
</list>
|
||||
</recent_temporary>
|
||||
</component>
|
||||
<component name="ShelveChangesManager" show_recycled="false">
|
||||
<option name="remove_strategy" value="false" />
|
||||
</component>
|
||||
<component name="SvnConfiguration">
|
||||
<configuration />
|
||||
</component>
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="58acc6c6-8ea5-48bb-95b2-31fcec9a4358" name="Default" comment="" />
|
||||
@@ -116,25 +303,26 @@
|
||||
<servers />
|
||||
</component>
|
||||
<component name="ToolWindowManager">
|
||||
<frame x="420" y="59" width="1352" height="895" extended-state="0" />
|
||||
<frame x="416" y="147" width="1352" height="879" extended-state="1" />
|
||||
<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.24960877" 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.27073553" 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="-1" side_tool="true" 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.32968536" sideWeight="0.5" order="2" 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="false" weight="0.33" sideWeight="0.5" order="-1" 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="-1" 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="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="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="WINDOWED" visible="true" show_stripe_button="true" weight="0.32968536" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" x="704" y="287" width="1187" height="559" />
|
||||
<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="-1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="WINDOWED" visible="false" show_stripe_button="true" weight="0.32968536" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" x="33" y="260" width="1274" height="433" />
|
||||
<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" />
|
||||
<window_info id="Debug" 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="3" 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="-1" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Data View" 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="-1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Data View" 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="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" 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="Message" 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="0" side_tool="false" content_ui="tabs" />
|
||||
<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="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="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>
|
||||
@@ -148,10 +336,290 @@
|
||||
<component name="editorHistoryManager">
|
||||
<entry file="file://$PROJECT_DIR$/upload.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="207">
|
||||
<caret line="9" column="32" lean-forward="true" selection-start-line="9" selection-start-column="32" selection-end-line="9" selection-end-column="32" />
|
||||
<state relative-caret-position="138">
|
||||
<caret line="12" column="47" lean-forward="false" selection-start-line="12" selection-start-column="16" selection-end-line="12" selection-end-column="47" />
|
||||
<folding>
|
||||
<element signature="e#0#30#0" expanded="true" />
|
||||
<element signature="e#0#9#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/start.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="23">
|
||||
<caret line="4" column="0" lean-forward="true" selection-start-line="4" selection-start-column="0" selection-end-line="4" selection-end-column="0" />
|
||||
<folding>
|
||||
<element signature="e#0#50#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/__init__.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="2277">
|
||||
<caret line="99" column="21" lean-forward="false" selection-start-line="99" selection-start-column="21" selection-end-line="99" selection-end-column="21" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/downloader/common.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="8142">
|
||||
<caret line="370" column="36" lean-forward="false" selection-start-line="370" selection-start-column="36" selection-end-line="370" selection-end-column="36" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/downloader/http.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="2783">
|
||||
<caret line="139" column="12" lean-forward="false" selection-start-line="139" selection-start-column="12" selection-end-line="139" selection-end-column="12" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/downloader/external.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="6164">
|
||||
<caret line="291" column="0" lean-forward="true" selection-start-line="291" selection-start-column="0" selection-end-line="291" selection-end-column="0" />
|
||||
<folding>
|
||||
<element signature="e#0#39#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/utils.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="62215">
|
||||
<caret line="2770" column="30" lean-forward="false" selection-start-line="2770" selection-start-column="30" selection-end-line="2770" selection-end-column="30" />
|
||||
<folding>
|
||||
<marker date="1516152052068" expanded="true" signature="44445:45495" ph="..." />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/YoutubeDL.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="40756">
|
||||
<caret line="1875" column="38" lean-forward="false" selection-start-line="1875" selection-start-column="24" selection-end-line="1875" selection-end-column="38" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/extractor/adobepass.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="30199">
|
||||
<caret line="1330" column="19" lean-forward="false" selection-start-line="1330" selection-start-column="19" selection-end-line="1330" selection-end-column="19" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/download.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="2369">
|
||||
<caret line="110" column="13" lean-forward="false" selection-start-line="110" selection-start-column="13" selection-end-line="110" selection-end-column="13" />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/upload.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>
|
||||
<element signature="e#0#9#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/upload.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>
|
||||
<element signature="e#0#9#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/upload.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>
|
||||
<element signature="e#0#9#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/selenium/webdriver/remote/webdriver.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="233">
|
||||
<caret line="311" column="0" lean-forward="false" selection-start-line="311" selection-start-column="0" selection-end-line="311" selection-end-column="0" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/postprocessor/execafterdownload.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-110">
|
||||
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/downloader/dash.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="21">
|
||||
<caret line="1" column="0" lean-forward="true" selection-start-line="1" selection-start-column="0" selection-end-line="1" selection-end-column="0" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/downloader/fragment.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="280">
|
||||
<caret line="113" column="58" lean-forward="true" selection-start-line="113" selection-start-column="58" selection-end-line="113" selection-end-column="58" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/downloader/hls.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="3716">
|
||||
<caret line="202" column="19" lean-forward="true" selection-start-line="202" selection-start-column="19" selection-end-line="202" selection-end-column="19" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/extractor/twitch.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="326">
|
||||
<caret line="540" column="34" lean-forward="false" selection-start-line="540" selection-start-column="34" selection-end-line="540" selection-end-column="34" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/extractor/common.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="326">
|
||||
<caret line="1330" column="34" lean-forward="false" selection-start-line="1330" selection-start-column="34" selection-end-line="1330" selection-end-column="34" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/test/test_descr.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="233">
|
||||
<caret line="2470" column="16" lean-forward="false" selection-start-line="2470" selection-start-column="16" selection-end-line="2470" selection-end-column="16" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/extractor/adobepass.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="30199">
|
||||
<caret line="1330" column="19" lean-forward="false" selection-start-line="1330" selection-start-column="19" selection-end-line="1330" selection-end-column="19" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/YoutubeDL.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="40756">
|
||||
<caret line="1875" column="38" lean-forward="false" selection-start-line="1875" selection-start-column="24" selection-end-line="1875" selection-end-column="38" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/postprocessor/common.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-179">
|
||||
<caret line="38" column="17" lean-forward="false" selection-start-line="38" selection-start-column="17" selection-end-line="38" selection-end-column="17" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/postprocessor/ffmpeg.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="2346">
|
||||
<caret line="180" column="27" lean-forward="true" selection-start-line="180" selection-start-column="27" selection-end-line="180" selection-end-column="27" />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/utils.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="62215">
|
||||
<caret line="2770" column="30" lean-forward="false" selection-start-line="2770" selection-start-column="30" selection-end-line="2770" selection-end-column="30" />
|
||||
<folding>
|
||||
<marker date="1516152052068" expanded="true" signature="44445:45495" ph="..." />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/__init__.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="2277">
|
||||
<caret line="99" column="21" lean-forward="false" selection-start-line="99" selection-start-column="21" selection-end-line="99" selection-end-column="21" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/downloader/http.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="2783">
|
||||
<caret line="139" column="12" lean-forward="false" selection-start-line="139" selection-start-column="12" selection-end-line="139" selection-end-column="12" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/downloader/common.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="8142">
|
||||
<caret line="370" column="36" lean-forward="false" selection-start-line="370" selection-start-column="36" selection-end-line="370" selection-end-column="36" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python36/Lib/site-packages/youtube_dl/downloader/external.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="247">
|
||||
<caret line="290" column="89" lean-forward="true" selection-start-line="290" selection-start-column="8" selection-end-line="290" selection-end-column="89" />
|
||||
<folding>
|
||||
<element signature="e#0#39#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/start.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="897">
|
||||
<caret line="39" column="25" lean-forward="false" selection-start-line="39" selection-start-column="25" selection-end-line="39" selection-end-column="25" />
|
||||
<folding>
|
||||
<element signature="e#0#50#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/upload.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-1202">
|
||||
<caret line="118" column="10" lean-forward="true" selection-start-line="118" selection-start-column="10" selection-end-line="118" selection-end-column="10" />
|
||||
<folding>
|
||||
<element signature="e#0#9#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/download.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="276">
|
||||
<caret line="24" column="10" lean-forward="true" selection-start-line="24" selection-start-column="10" selection-end-line="24" selection-end-column="10" />
|
||||
<folding>
|
||||
<element signature="e#0#13#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/external.py">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="253">
|
||||
<caret line="290" column="12" lean-forward="false" selection-start-line="290" selection-start-column="12" selection-end-line="290" selection-end-column="12" />
|
||||
<folding>
|
||||
<element signature="e#0#39#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
|
||||
+267
@@ -0,0 +1,267 @@
|
||||
import signal
|
||||
from upload import upload, get_file
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from multiprocessing import Process,Manager,Queue
|
||||
import os
|
||||
import asyncio
|
||||
import psutil
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
import youtube_dl
|
||||
|
||||
|
||||
# links = ['www.twitch.tv/innovation_s2','www.panda.tv/1160340','www.twitch.tv/sc2soo','www.panda.tv/1150595','www.twitch.tv/kimdaeyeob3']
|
||||
|
||||
root_url = ['www.twitch.tv/','www.panda.tv/','https://api.twitch.tv/kraken/streams/']
|
||||
|
||||
links_id = {
|
||||
'星际2innovation吕布卫星人族天梯第一视角': ['innovation_s2','1160340'],
|
||||
'星际2soo输本虫族天梯第一视角': ['sc2soo','1150595'],
|
||||
'星际2stats拔本神族天梯第一视角': ['kimdaeyeob3'],
|
||||
'星际2sos狗哥神族天梯第一视角':['', '1160930']
|
||||
# 'test':['maru072','10027'],
|
||||
# 'test1':['mcanning','70000']
|
||||
}
|
||||
|
||||
headers = {
|
||||
'client-id':'jzkbprff40iqj646a697cyrvl0zt2m6'
|
||||
}
|
||||
|
||||
|
||||
# class SizeError(Exception):
|
||||
# def __init__(self, info):
|
||||
# Exception.__init__(self)
|
||||
# self.errorinfo = info
|
||||
#
|
||||
# def __str__(self):
|
||||
# return "SizeError:%s" % (self.errorinfo)
|
||||
|
||||
|
||||
def kill_child_processes(parent_pid, file_name_, sig=signal.SIGINT):
|
||||
file_name_ = file_name_+'.part'
|
||||
while True:
|
||||
time.sleep(10)
|
||||
if os.path.isfile(file_name_):
|
||||
file_size = os.path.getsize(file_name_)/1024/1024/1024
|
||||
if float(file_size) >= 3.9:
|
||||
try:
|
||||
parent = psutil.Process(parent_pid)
|
||||
except psutil.NoSuchProcess:
|
||||
return
|
||||
children = parent.children(recursive=True)
|
||||
for process in children:
|
||||
# print(process)
|
||||
process.send_signal(sig)
|
||||
break
|
||||
# print(file_name_, '文件大小', file_size) # 单位GB
|
||||
# try:
|
||||
# parent = psutil.Process(parent_pid)
|
||||
# except psutil.NoSuchProcess:
|
||||
# return
|
||||
# children = parent.children(recursive=True)
|
||||
# for process in children:
|
||||
# print(process)
|
||||
# # process.send_signal(sig)
|
||||
|
||||
|
||||
def monitoring(q):
|
||||
while True:
|
||||
# print('开始监测')
|
||||
pid,file_name = q.get()
|
||||
time.sleep(1)
|
||||
# print('获取到{0},{1}'.format(pid,file_name))
|
||||
p = Process(target=kill_child_processes, args=(pid, file_name))
|
||||
p.start()
|
||||
|
||||
# def download_part():
|
||||
# try:
|
||||
# with youtube_dl.YoutubeDL(ydl_opts) as ydl:
|
||||
# ydl.download([url_])
|
||||
# except SizeError:
|
||||
#
|
||||
# async def download(file_name_,url_, ydl_):
|
||||
# if os.path.isfile(file_name_):
|
||||
# file_size = os.path.getsize(file_name_)
|
||||
# print('文件大小',file_size)
|
||||
# print(os.path.isfile(file_name_))
|
||||
# await asyncio.sleep(3)#ydl_.download([url_])
|
||||
#
|
||||
#
|
||||
# async def file_size(file_name_):
|
||||
# file_size_ = os.path.getsize(file_name_)
|
||||
# print('文件大小', file_size_)
|
||||
|
||||
|
||||
# def is_err(file_name_):
|
||||
# if os.path.getsize(file_name_) / 1024 / 1024 >= 5:
|
||||
# raise SizeError('文件大小超出限制')
|
||||
|
||||
|
||||
def get_twitch_stream (url,value):
|
||||
res = requests.get(url, headers=headers)
|
||||
s = json.loads(res.text)
|
||||
print(value,s['stream'])
|
||||
return s['stream']
|
||||
|
||||
|
||||
def download_twitch_stream(dict, q, status_, key_,url_, file_name_):
|
||||
# print(status_)
|
||||
if str(status_) != 'None':
|
||||
value_ = dict[key_]
|
||||
dict.pop(key_)
|
||||
print('开始下载',key_)
|
||||
ydl_opts = {
|
||||
'outtmpl':file_name_,
|
||||
'format': '720p'
|
||||
# 'keep_fragments':True
|
||||
# 'postprocessors': [{
|
||||
# 'key': 'FFmpegFixupM3u8',
|
||||
# 'preferredcodec': 'mp3',
|
||||
# 'preferredquality': '1900',
|
||||
# }],
|
||||
}
|
||||
try:
|
||||
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
|
||||
# loop = asyncio.get_event_loop()
|
||||
# tasks = [download(file_name_+'.part',url_,ydl),file_size(file_name_+'.part')]
|
||||
# loop.run_until_complete(download(file_name_+'.part',url_,ydl))
|
||||
# loop.run_until_complete(asyncio.wait(tasks))
|
||||
# loop.close()
|
||||
pid = os.getpid()
|
||||
q.put([pid, file_name_])
|
||||
|
||||
ydl.download([url_])
|
||||
except youtube_dl.utils.DownloadError:
|
||||
|
||||
print('分段下载')
|
||||
try:
|
||||
os.rename(file_name_ + '.part', file_name_[:-4] + str(time.time())[:10] + '.mp4')
|
||||
except FileExistsError:
|
||||
os.rename(file_name_ + '.part', file_name_[:-4] + str(time.time())[:10] + '.mp4')
|
||||
finally:
|
||||
dict[key_] = value_
|
||||
print('下载完成')
|
||||
os.rename(file_name_, file_name_[:-4] + str(time.time())[:10] + '.mp4')
|
||||
file_list = get_file(file_name_)
|
||||
videopath = ''
|
||||
root = os.getcwd()
|
||||
for i in range(len(file_list)):
|
||||
file = file_list[i]
|
||||
videopath += root + '/' + file + '\n'
|
||||
videopath = videopath.rstrip()
|
||||
upload(video_path=videopath,link=url_, title_=file_name_[:-4])
|
||||
|
||||
for r in file_list:
|
||||
os.remove(r)
|
||||
# print(links_id)
|
||||
|
||||
|
||||
def download_panda_stream(dict, q, key_, url_,file_name_):
|
||||
value_ = dict[key_]
|
||||
dict.pop(key_)
|
||||
print('开始下载', key_)
|
||||
list_info = []
|
||||
with youtube_dl.YoutubeDL() as ydl:
|
||||
try:
|
||||
info = ydl.extract_info(url_, download=False)
|
||||
for i in info['formats']:
|
||||
list_info.append(i['format_id'])
|
||||
except youtube_dl.utils.DownloadError:
|
||||
dict[key_] = value_
|
||||
if 'HD-m3u8' in list_info:
|
||||
ydl_opts = {
|
||||
'outtmpl': file_name_,
|
||||
'format': 'HD-m3u8',
|
||||
}
|
||||
else:
|
||||
ydl_opts = {
|
||||
'outtmpl': file_name_,
|
||||
'format': 'SD-m3u8',
|
||||
# 'keep_fragments':True
|
||||
# 'postprocessors': [{
|
||||
# 'key': 'FFmpegFixupM3u8',
|
||||
# 'preferredcodec': 'mp3',
|
||||
# 'preferredquality': '1900',
|
||||
# }],
|
||||
}
|
||||
try:
|
||||
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
|
||||
pid = os.getpid()
|
||||
print(pid)
|
||||
q.put([pid, file_name_])
|
||||
|
||||
ydl.download([url_])
|
||||
except youtube_dl.utils.DownloadError:
|
||||
print('分段下载')
|
||||
try:
|
||||
os.rename(file_name_ + '.part', file_name_[:-4] + str(time.time())[:10] + '.mp4')
|
||||
except FileExistsError:
|
||||
os.rename(file_name_ + '.part', file_name_[:-4] + str(time.time())[:10] + '.mp4')
|
||||
finally:
|
||||
dict[key_] = value_
|
||||
print('下载完成')
|
||||
os.rename(file_name_, file_name_[:-4] + str(time.time())[:10] + '.mp4')
|
||||
file_list = get_file(file_name_)
|
||||
videopath = ''
|
||||
root = os.getcwd()
|
||||
for i in range(len(file_list)):
|
||||
file = file_list[i]
|
||||
videopath += root + '/' + file + '\n'
|
||||
videopath = videopath.rstrip()
|
||||
upload(video_path=videopath, link=url_, title_=file_name_[:-4])
|
||||
|
||||
for r in file_list:
|
||||
os.remove(r)
|
||||
# print(links_id)
|
||||
|
||||
|
||||
def download_stream(dict, q, status_, key_,twitch_url_,panda_url_,file_name_):
|
||||
# print('子进程id%s'%(os.getpid()))
|
||||
download_twitch_stream(dict, q, status_, key_,twitch_url_, file_name_)
|
||||
download_panda_stream(dict, q, key_, panda_url_, file_name_)
|
||||
|
||||
if __name__ == '__main__':
|
||||
manager = Manager()
|
||||
# d = manager.dict(links_id)
|
||||
# while True:
|
||||
# utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
|
||||
# bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
|
||||
# now = bj_dt.strftime('%Y{0}%m{1}%d{2}').format(*'年月日')
|
||||
#
|
||||
# for key in d.copy():
|
||||
# # print(key)
|
||||
# file_name = '%s%s.mp4' % (key, now)
|
||||
# if len(links_id[key]) == 2:
|
||||
# twitch_url = root_url[0]+links_id[key][0]
|
||||
# panda_url = root_url[1]+links_id[key][1]
|
||||
# confirm_url = root_url[2]+links_id[key][0]
|
||||
# status = get_twitch_stream(confirm_url,key)
|
||||
# # print(status)
|
||||
# # print('父进程id%s'%(os.getpid()))
|
||||
# p = Process(target=download_stream, args=(d,status,key,twitch_url,panda_url,file_name))
|
||||
# p.start()
|
||||
#
|
||||
# elif len(links_id[key]) ==1:
|
||||
# twitch_url = root_url[0]+links_id[key][0]
|
||||
# confirm_url = root_url[2] + links_id[key][0]
|
||||
# status = get_twitch_stream(confirm_url, key)
|
||||
# p = Process(target=download_twitch_stream, args=(d,status, key,twitch_url,file_name))
|
||||
# p.start()
|
||||
# time.sleep(5)
|
||||
# print('test2018年01月22日0473.mp4')
|
||||
# try:
|
||||
# os.rename('1','2')
|
||||
# except FileExistsError:
|
||||
# print('test2018年01月22日.mp4')
|
||||
# root = os.getcwd()
|
||||
# print(root)
|
||||
# print(os.listdir())
|
||||
# get_twitch_stream('https://api.twitch.tv/kraken/streams/',1)
|
||||
# a = 'test2018年01月17日.mp4'
|
||||
# print(a[-4:])
|
||||
# a = ['111','2']
|
||||
# if '11' in a:
|
||||
# print('yes')
|
||||
# else:
|
||||
# print('88')
|
||||
@@ -0,0 +1,40 @@
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from multiprocessing import Process, Manager, Queue
|
||||
from download import links_id, root_url, get_twitch_stream, download_stream, download_twitch_stream, monitoring, download_panda_stream
|
||||
import time
|
||||
|
||||
if __name__ == '__main__':
|
||||
manager = Manager()
|
||||
d = manager.dict(links_id)
|
||||
|
||||
queue = Queue()
|
||||
p0 = Process(target=monitoring, args=(queue,))
|
||||
p0.start()
|
||||
while True:
|
||||
utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
|
||||
bj_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
|
||||
now = bj_dt.strftime('%Y{0}%m{1}%d{2}').format(*'年月日')
|
||||
|
||||
for key in d.copy():
|
||||
# print(key)
|
||||
file_name = '%s%s.mp4' % (key, now)
|
||||
if len(links_id[key]) == 2:
|
||||
twitch_url = root_url[0]+links_id[key][0]
|
||||
panda_url = root_url[1]+links_id[key][1]
|
||||
if links_id[key][0] != '':
|
||||
confirm_url = root_url[2]+links_id[key][0]
|
||||
status = get_twitch_stream(confirm_url,key)
|
||||
# print(status)
|
||||
# print('父进程id%s'%(os.getpid()))
|
||||
p = Process(target=download_stream, args=(d, queue, status,key,twitch_url,panda_url,file_name))
|
||||
p.start()
|
||||
else:
|
||||
p = Process(target=download_panda_stream,args=(d, queue, key, panda_url, file_name))
|
||||
|
||||
elif len(links_id[key]) ==1:
|
||||
twitch_url = root_url[0]+links_id[key][0]
|
||||
confirm_url = root_url[2] + links_id[key][0]
|
||||
status = get_twitch_stream(confirm_url, key)
|
||||
p = Process(target=download_twitch_stream, args=(d, queue, status, key,twitch_url,file_name))
|
||||
p.start()
|
||||
time.sleep(30)
|
||||
@@ -1,151 +1,223 @@
|
||||
import os
|
||||
from selenium import webdriver
|
||||
import time
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver.support.ui import WebDriverWait
|
||||
from selenium.webdriver.support import expected_conditions as EC
|
||||
from selenium.webdriver.common.keys import Keys
|
||||
service_log_path = "{}/chromedriver.log".format('/home')
|
||||
video_path = '/home/wardiii.mp4'
|
||||
options = webdriver.ChromeOptions()
|
||||
options.add_argument('headless')
|
||||
# options.add_argument('no-sandbox')
|
||||
# options.binary_location = '/usr/bin/google-chrome-stable'
|
||||
driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver',chrome_options=options,service_log_path=service_log_path)
|
||||
driver.get("https://www.bilibili.com")
|
||||
# cookie = {
|
||||
# 'fts':'1511094141',
|
||||
# 'buvid3':'0E299359-8055-4E58-9E82-DDF2F325CCAF26543infoc',
|
||||
# 'UM_distinctid':'15fdc423182b22-07a38f91352cb7-7b113d-144000-15fdc423183a13',
|
||||
# 'pgv_pvi':'3700880384',
|
||||
# 'rpdid':'olklsxmolldosooiiqlpw',
|
||||
# 'sid':'8k9huzd0',
|
||||
# 'finger':'edc6ecda',
|
||||
# 'DedeUserID':'274986200',
|
||||
# 'DedeUserID__ckMd5':'1206e39bc044fe98',
|
||||
# 'SESSDATA':'3e02f3d0%2C1517749345%2C489ac7f7',
|
||||
# 'bili_jct':'4a71e9d389551c4bb7a9ebd05ac7dda0',
|
||||
# 'member_v2':'1',
|
||||
# 'pgv_si':'s2364394496',
|
||||
# '_dfcaptcha':'8c4345e68b07f547aa3f246b7b058cd1',
|
||||
# 'LIVE_BUVID':'a23404d890e536c9a93b72e5e50be145',
|
||||
# 'LIVE_BUVID__ckMd5':'d5ea746722041186'
|
||||
# }
|
||||
# 964b42c0
|
||||
# bahkjm41
|
||||
# 1515221245
|
||||
# EB49C459-95CA-415C-AA48-B3FE5B46BD9D31043infoc
|
||||
# 3e02f3d0%2C1517813257%2C06f75553
|
||||
# 1ef343ac61192cd3aa59ca9aea289ff3
|
||||
# c25a35691b8ef1fc2f2566a1c4df50b4
|
||||
# AUTO1115152212636167
|
||||
|
||||
# 10800 18000 4110
|
||||
|
||||
|
||||
# 814ce92affe021564ee8f5ceca806c4a
|
||||
cookies = [{'name': 'finger', 'value': 'edc6ecda', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': False},
|
||||
{'name': 'sid', 'value': '8k9huzd0', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': False},
|
||||
{'name': 'fts', 'value': '1511094141', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': False},
|
||||
{'name': 'buvid3', 'value': '0E299359-8055-4E58-9E82-DDF2F325CCAF26543infoc', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': False},
|
||||
{'name': 'DedeUserID', 'value': '274986200', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': False},
|
||||
{'name': 'DedeUserID__ckMd5', 'value': '1206e39bc044fe98', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': False},
|
||||
{'name': 'SESSDATA', 'value': '3e02f3d0%2C1517749345%2C489ac7f7', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': True},
|
||||
{'name': 'bili_jct', 'value': '4a71e9d389551c4bb7a9ebd05ac7dda0', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': False},
|
||||
{'name': '_dfcaptcha', 'value': '8c4345e68b07f547aa3f246b7b058cd1', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': True},
|
||||
{'name': 'LIVE_BUVID', 'value': 'a23404d890e536c9a93b72e5e50be145', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': False}]
|
||||
# driver.delete_all_cookies()
|
||||
for cookie in cookies:
|
||||
# cookie.pop('domain')
|
||||
# print(cookie)
|
||||
driver.add_cookie(cookie)
|
||||
# driver.add_cookie({'name': 'finger', 'value': 'edc6ecda'})
|
||||
# driver.add_cookie({'name': 'fts', 'value': '1511094141'})
|
||||
# driver.add_cookie({'name': 'buvid3', 'value': '0E299359-8055-4E58-9E82-DDF2F325CCAF26543infoc'})
|
||||
# # driver.add_cookie({'name': 'UM_distinctid', 'value': '15fdc423182b22-07a38f91352cb7-7b113d-144000-15fdc423183a13'})
|
||||
# # driver.add_cookie({'name': 'pgv_pvi', 'value': '3700880384'})
|
||||
# # driver.add_cookie({'name': 'rpdid', 'value': 'olklsxmolldosooiiqlpw'})
|
||||
# driver.add_cookie({'name': 'sid', 'value': '8k9huzd0'})
|
||||
# driver.add_cookie({'name': 'DedeUserID', 'value': '274986200'})
|
||||
# driver.add_cookie({'name': 'DedeUserID__ckMd5', 'value': '1206e39bc044fe98'})
|
||||
# driver.add_cookie({'name': 'SESSDATA', 'value': '3e02f3d0%2C1517749345%2C489ac7f7'})
|
||||
# driver.add_cookie({'name': 'bili_jct', 'value': '814ce92affe021564ee8f5ceca806c4a'})
|
||||
# # driver.add_cookie({'name': 'member_v2', 'value': '1'})
|
||||
# # driver.add_cookie({'name': 'pgv_si', 'value': 's2364394496'})
|
||||
# driver.add_cookie({'name': '_dfcaptcha', 'value': '8c4345e68b07f547aa3f246b7b058cd1'})
|
||||
# driver.add_cookie({'name': 'LIVE_BUVID', 'value': 'a23404d890e536c9a93b72e5e50be145'})
|
||||
# # driver.add_cookie({'name': 'LIVE_BUVID__ckMd5', 'value': 'd5ea746722041186'})
|
||||
# cookie = driver.get_cookies()
|
||||
# print(cookie)
|
||||
# driver.get("https://www.bilibili.com")
|
||||
|
||||
driver.get("https://member.bilibili.com/video/upload.html")
|
||||
# driver.add_cookie(cookie)
|
||||
# time.sleep(20)
|
||||
# cookie = driver.get_cookies()
|
||||
# print(cookie)
|
||||
element = WebDriverWait(driver, 10).until(
|
||||
EC.presence_of_element_located((By.NAME, 'file')))
|
||||
upload = driver.find_element_by_name('file')
|
||||
# time.sleep(5)
|
||||
print(driver.title)
|
||||
upload.send_keys(video_path) # send_keys
|
||||
# print(upload.get_attribute('value')) # check value
|
||||
while 1:
|
||||
info = driver.find_element_by_xpath('//*[@id="sortWrp"]/li/div[2]/div[1]/div[3]')
|
||||
print(info.text)
|
||||
time.sleep(20)
|
||||
text = driver.find_element_by_class_name('upload-status').text
|
||||
print(text)
|
||||
if text == 'Upload complete':
|
||||
break
|
||||
# print(text)
|
||||
# pageSource = driver.page_source
|
||||
# print(pageSource)
|
||||
# hid = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[1]/label[1]/div')
|
||||
# driver.execute_script('arguments[0].style.display="none";',hid)
|
||||
# hid_1 = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[1]/label[1]')
|
||||
# driver.execute_script('arguments[0].style.display="none";',hid_1)
|
||||
# def excision(Path):
|
||||
# file_size = os.path.getsize(Path)/1024/1024/1024
|
||||
#
|
||||
# time.sleep(1)
|
||||
click = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[1]/label[1]/div')
|
||||
# click = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[1]/div[1]/div[2]/div[1]')
|
||||
# click = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[1]/label[2]/input')
|
||||
# click = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[1]/label[1]/input')
|
||||
# click.send_keys(Keys.ENTER)
|
||||
click.click()
|
||||
# driver.execute_script('arguments[0].className = "is-checked";',click)
|
||||
# print(click.is_selected())
|
||||
# print(clicks)
|
||||
# for click in clicks:
|
||||
# print(file_size)
|
||||
#
|
||||
# excision('innovation.flv')
|
||||
|
||||
# click_1.click()
|
||||
# driver.find_elements_by_class_name('is-checked')[1].click()
|
||||
# click_1 = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[3]/div[1]/div[2]/label/input')
|
||||
click_1 = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[3]/div[1]/div[2]/label/div')
|
||||
click_1.click()
|
||||
# 点击游戏
|
||||
driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[2]/div[1]/ul/li[3]/button').click()
|
||||
# 点击电子竞技
|
||||
driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[2]/div[1]/ul/li[3]/ul/li[6]').click()
|
||||
text = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[4]/div[2]/div[2]/div[2]/div/div/input')
|
||||
text.send_keys('星际2')
|
||||
text.send_keys(Keys.ENTER)
|
||||
time.sleep(0.5)
|
||||
text.send_keys('第一视角')
|
||||
text.send_keys(Keys.ENTER)
|
||||
time.sleep(0.5)
|
||||
text.send_keys('职业选手')
|
||||
text.send_keys(Keys.ENTER)
|
||||
time.sleep(0.5)
|
||||
text.send_keys('虚空之遗')
|
||||
text.send_keys(Keys.ENTER)
|
||||
time.sleep(0.5)
|
||||
# 输入相关游戏
|
||||
text_1 = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[5]/div[1]/div[1]/div[1]/div/input')
|
||||
text_1.send_keys('星际争霸2')
|
||||
# 简介
|
||||
text_2 = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[5]/div[1]/div[2]/div[1]/div/textarea')
|
||||
text_2.send_keys('职业选手直播第一视角录像。')
|
||||
|
||||
driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[3]/button').click()
|
||||
def get_file(filename):
|
||||
file_list = []
|
||||
for file_name in os.listdir():
|
||||
if filename[:-4] in file_name:
|
||||
file_list.append(file_name)
|
||||
return sorted(file_list)
|
||||
|
||||
print('稿件提交完成!')
|
||||
driver.quit()
|
||||
|
||||
def upload(video_path, link,title_):
|
||||
service_log_path = "{}/chromedriver.log".format('/home')
|
||||
# service_log_path = "{}\\chromedriver.log".format('D:\\bilibiliupload')
|
||||
|
||||
|
||||
# video_path = '/home/wardiii.mp4'
|
||||
# video_path = 'D:\\p2.flv\nD:\\p1.flv\nD:\\享受星际!!!看会比赛.flv'
|
||||
# link = 'https://www.panda.tv/1160340'
|
||||
|
||||
options = webdriver.ChromeOptions()
|
||||
|
||||
options.add_argument('headless')
|
||||
# options.add_argument('no-sandbox')
|
||||
# options.binary_location = '/usr/bin/google-chrome-stable'
|
||||
|
||||
|
||||
driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver',chrome_options=options,service_log_path=service_log_path)
|
||||
# driver = webdriver.Chrome(executable_path=r'D:\bilibiliupload\chromedriver.exe',service_log_path=service_log_path)
|
||||
|
||||
|
||||
driver.get("https://www.bilibili.com")
|
||||
# cookie = {
|
||||
# 'fts':'1511094141',
|
||||
# 'buvid3':'0E299359-8055-4E58-9E82-DDF2F325CCAF26543infoc',
|
||||
# 'UM_distinctid':'15fdc423182b22-07a38f91352cb7-7b113d-144000-15fdc423183a13',
|
||||
# 'pgv_pvi':'3700880384',
|
||||
# 'rpdid':'olklsxmolldosooiiqlpw',
|
||||
# 'sid':'8k9huzd0',
|
||||
# 'finger':'edc6ecda',
|
||||
# 'DedeUserID':'274986200',
|
||||
# 'DedeUserID__ckMd5':'1206e39bc044fe98',
|
||||
# 'SESSDATA':'3e02f3d0%2C1517749345%2C489ac7f7',
|
||||
# 'bili_jct':'4a71e9d389551c4bb7a9ebd05ac7dda0',
|
||||
# 'member_v2':'1',
|
||||
# 'pgv_si':'s2364394496',
|
||||
# '_dfcaptcha':'8c4345e68b07f547aa3f246b7b058cd1',
|
||||
# 'LIVE_BUVID':'a23404d890e536c9a93b72e5e50be145',
|
||||
# 'LIVE_BUVID__ckMd5':'d5ea746722041186'
|
||||
# }
|
||||
# 964b42c0
|
||||
# bahkjm41
|
||||
# 1515221245
|
||||
# EB49C459-95CA-415C-AA48-B3FE5B46BD9D31043infoc
|
||||
# 3e02f3d0%2C1517813257%2C06f75553
|
||||
# 1ef343ac61192cd3aa59ca9aea289ff3
|
||||
# c25a35691b8ef1fc2f2566a1c4df50b4
|
||||
# AUTO1115152212636167
|
||||
|
||||
|
||||
# 814ce92affe021564ee8f5ceca806c4a
|
||||
cookies = [{'name': 'finger', 'value': 'edc6ecda', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': False},
|
||||
{'name': 'sid', 'value': '8k9huzd0', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': False},
|
||||
{'name': 'fts', 'value': '1511094141', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': False},
|
||||
{'name': 'buvid3', 'value': '0E299359-8055-4E58-9E82-DDF2F325CCAF26543infoc', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': False},
|
||||
{'name': 'DedeUserID', 'value': '274986200', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': False},
|
||||
{'name': 'DedeUserID__ckMd5', 'value': '1206e39bc044fe98', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': False},
|
||||
{'name': 'SESSDATA', 'value': '3e02f3d0%2C1517749345%2C489ac7f7', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': True},
|
||||
{'name': 'bili_jct', 'value': '4a71e9d389551c4bb7a9ebd05ac7dda0', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': False},
|
||||
{'name': '_dfcaptcha', 'value': '8c4345e68b07f547aa3f246b7b058cd1', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': True},
|
||||
{'name': 'LIVE_BUVID', 'value': 'a23404d890e536c9a93b72e5e50be145', 'path': '/', 'domain': '.bilibili.com', 'expiry': None, 'secure': False, 'httpOnly': False}]
|
||||
# driver.delete_all_cookies()
|
||||
for cookie in cookies:
|
||||
# cookie.pop('domain')
|
||||
# print(cookie)
|
||||
driver.add_cookie(cookie)
|
||||
# driver.add_cookie({'name': 'finger', 'value': 'edc6ecda'})
|
||||
# driver.add_cookie({'name': 'fts', 'value': '1511094141'})
|
||||
# driver.add_cookie({'name': 'buvid3', 'value': '0E299359-8055-4E58-9E82-DDF2F325CCAF26543infoc'})
|
||||
# # driver.add_cookie({'name': 'UM_distinctid', 'value': '15fdc423182b22-07a38f91352cb7-7b113d-144000-15fdc423183a13'})
|
||||
# # driver.add_cookie({'name': 'pgv_pvi', 'value': '3700880384'})
|
||||
# # driver.add_cookie({'name': 'rpdid', 'value': 'olklsxmolldosooiiqlpw'})
|
||||
# driver.add_cookie({'name': 'sid', 'value': '8k9huzd0'})
|
||||
# driver.add_cookie({'name': 'DedeUserID', 'value': '274986200'})
|
||||
# driver.add_cookie({'name': 'DedeUserID__ckMd5', 'value': '1206e39bc044fe98'})
|
||||
# driver.add_cookie({'name': 'SESSDATA', 'value': '3e02f3d0%2C1517749345%2C489ac7f7'})
|
||||
# driver.add_cookie({'name': 'bili_jct', 'value': '814ce92affe021564ee8f5ceca806c4a'})
|
||||
# # driver.add_cookie({'name': 'member_v2', 'value': '1'})
|
||||
# # driver.add_cookie({'name': 'pgv_si', 'value': 's2364394496'})
|
||||
# driver.add_cookie({'name': '_dfcaptcha', 'value': '8c4345e68b07f547aa3f246b7b058cd1'})
|
||||
# driver.add_cookie({'name': 'LIVE_BUVID', 'value': 'a23404d890e536c9a93b72e5e50be145'})
|
||||
# # driver.add_cookie({'name': 'LIVE_BUVID__ckMd5', 'value': 'd5ea746722041186'})
|
||||
# cookie = driver.get_cookies()
|
||||
# print(cookie)
|
||||
# driver.get("https://www.bilibili.com")
|
||||
|
||||
driver.get("https://member.bilibili.com/video/upload.html")
|
||||
# driver.add_cookie(cookie)
|
||||
# time.sleep(20)
|
||||
# cookie = driver.get_cookies()
|
||||
# print(cookie)
|
||||
# print(driver.title)
|
||||
element = WebDriverWait(driver, 10).until(
|
||||
EC.presence_of_element_located((By.NAME, 'file')))
|
||||
upload = driver.find_element_by_name('file')
|
||||
# time.sleep(5)
|
||||
print(driver.title)
|
||||
upload.send_keys(video_path) # send_keys
|
||||
# print(upload.get_attribute('value')) # check value
|
||||
while True:
|
||||
info = driver.find_elements_by_xpath('//*[@id="sortWrp"]/li/div[2]/div[1]/div[3]')
|
||||
# print(info)
|
||||
for t in info:
|
||||
# print(t)
|
||||
if t.text != '':
|
||||
print(t.text)
|
||||
time.sleep(10)
|
||||
text = driver.find_elements_by_xpath('//*[@id="sortWrp"]/li/div[2]/div[1]/div[2]')
|
||||
aggregate = set()
|
||||
for s in text:
|
||||
print(s.text)
|
||||
aggregate.add(s.text)
|
||||
# if text == 'Upload complete' or text == '上传完成':
|
||||
# break
|
||||
|
||||
if len(aggregate) == 1 and ('Upload complete' in aggregate or '上传完成' in aggregate):
|
||||
break
|
||||
# print(text)
|
||||
# pageSource = driver.page_source
|
||||
# print(pageSource)
|
||||
# hid = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[1]/label[1]/div')
|
||||
# driver.execute_script('arguments[0].style.display="none";',hid)
|
||||
# hid_1 = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[1]/label[1]')
|
||||
# driver.execute_script('arguments[0].style.display="none";',hid_1)
|
||||
#
|
||||
# time.sleep(1)
|
||||
# 点击转载
|
||||
click = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[1]/label[2]/div')
|
||||
# click = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[1]/div[1]/div[2]/div[1]')
|
||||
# click = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[1]/label[2]/input')
|
||||
# click = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[1]/label[1]/input')
|
||||
# click.send_keys(Keys.ENTER)
|
||||
click.click()
|
||||
# driver.execute_script('arguments[0].className = "is-checked";',click)
|
||||
# print(click.is_selected())
|
||||
# print(clicks)
|
||||
# for click in clicks:
|
||||
|
||||
# click_1.click()
|
||||
# driver.find_elements_by_class_name('is-checked')[1].click()
|
||||
# click_1 = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[3]/div[1]/div[2]/label/input')
|
||||
# click_1 = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[3]/div[1]/div[2]/label/div')
|
||||
# click_1.click()
|
||||
# 输入转载来源
|
||||
Input = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[1]/div/div[3]/div[2]/input')
|
||||
Input.send_keys(link)
|
||||
# 点击游戏
|
||||
driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[2]/div[1]/ul/li[3]/button').click()
|
||||
# 点击电子竞技
|
||||
driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[2]/div[1]/ul/li[3]/ul/li[6]').click()
|
||||
# 稿件标题
|
||||
title = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[3]/div/div[1]/input')
|
||||
title.send_keys(Keys.CONTROL + 'a')
|
||||
title.send_keys(Keys.BACKSPACE)
|
||||
title.send_keys(title_)
|
||||
|
||||
|
||||
|
||||
|
||||
text = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[4]/div[2]/div[2]/div[2]/div/div/input')
|
||||
text.send_keys('星际争霸2')
|
||||
text.send_keys(Keys.ENTER)
|
||||
time.sleep(0.5)
|
||||
text.send_keys('第一视角')
|
||||
text.send_keys(Keys.ENTER)
|
||||
time.sleep(0.5)
|
||||
text.send_keys('职业选手')
|
||||
text.send_keys(Keys.ENTER)
|
||||
time.sleep(0.5)
|
||||
text.send_keys('虚空之遗')
|
||||
text.send_keys(Keys.ENTER)
|
||||
time.sleep(0.5)
|
||||
# 输入相关游戏
|
||||
text_1 = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[5]/div[1]/div[1]/div[1]/div/input')
|
||||
text_1.send_keys('星际争霸2')
|
||||
# 简介
|
||||
text_2 = driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[1]/div[5]/div[1]/div[2]/div[1]/div/textarea')
|
||||
text_2.send_keys('职业选手直播第一视角录像。')
|
||||
|
||||
driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/div[3]/button').click()
|
||||
|
||||
print('稿件提交完成!')
|
||||
driver.quit()
|
||||
if __name__ == '__main__':
|
||||
# upload('D:\\p2.flv','5','k')
|
||||
file_list = get_file('星际2soo输本虫族天梯第一视角.mp4')
|
||||
videopath = ''
|
||||
root = os.getcwd()
|
||||
for i in range(len(file_list)):
|
||||
file = file_list[i]
|
||||
videopath += root + '/' + file + '\n'
|
||||
# videopath += 'test2018年01月22日.mp4'
|
||||
# print(file_list)
|
||||
print(videopath)
|
||||
# upload(videopath.rstrip(), '5', 'k')
|
||||
# for i in range(1):
|
||||
# print(i)
|
||||
Reference in new issue
Block a user