Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
ZSAIm committed Apr 28, 2019
1 parent 8695894 commit e2cf518
Show file tree
Hide file tree
Showing 25 changed files with 1,294 additions and 527 deletions.
14 changes: 11 additions & 3 deletions CommonVar.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# status

SHUTDOWN = False

ALLTASKDONE = False

# parse

Expand All @@ -11,10 +11,11 @@

# download
MAX_CONN = 5
MAX_TASK = 5
MAX_TASK = 3
BUFFER_SIZE = 20
FILEPATH = ''

FFMPEG_PATH = ''
BLOCK_SIZE = 512

UNDONE_JOB = ''

Expand All @@ -23,6 +24,13 @@
MERGER_SIMPLE = 'simple'
MERGER_FFMPEG = 'ffmpeg'


FFMPEG_PATH = ''





import wx

# wxID
Expand Down
212 changes: 151 additions & 61 deletions GUIEventBinder.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,101 +7,191 @@
import flow

def init():
FrameMain_Menu_File_Handler.bindEvent()
FrameParse_Button_Handler.bindEvent()
FrameMain_Menu_Help_Handler.bindEvent()
FrameMain_Close_Handler.bindEvent()
# Message_Dialog_Handler.bindEvent()
FrameMain.bindEvent()
FrameParser.bindEvent()
FrameMerger.bindEvent()

def bindMenuItems(handler_parent, source_parent, items_name):
for i in items_name:
gui.frame_main.Bind(wx.EVT_MENU, getattr(handler_parent, i), getattr(source_parent, i))


class FrameMain_Menu_File_Handler:
class FrameMain:
@staticmethod
def bindEvent():
items = ('parse', 'settings', 'exit')
bindMenuItems(FrameMain_Menu_File_Handler, gui.frame_main.menu_bar.file, items)

gui.frame_downloader.Bind(wx.EVT_CLOSE, FrameMain.win_close)
FrameMain.MenuBar.bindEvent()

@staticmethod
def parse(event):
pass
def win_close(event):
flow.ShutDown.frame_downloader_close(event)


@staticmethod
def settings(event):
pass
class MenuBar:
@staticmethod
def bindEvent():
FrameMain.MenuBar.File.bineEvent()
FrameMain.MenuBar.Help.bindEvent()

class File:
@staticmethod
def bineEvent():
items = ('parse', 'settings', 'exit')
FrameMain.MenuBar.batchBind(FrameMain.MenuBar.File, gui.frame_downloader.menu_bar.file, items)

@staticmethod
def parse(event):
pass

@staticmethod
def settings(event):
dlg = gui.DialogSettings(gui.frame_parse)
dlg.ShowModal()

@staticmethod
def exit(event):
pass


class Help:
@staticmethod
def bindEvent():
items = ('about',)
FrameMain.MenuBar.batchBind(FrameMain.MenuBar.Help, gui.frame_downloader.menu_bar.help, items)

@staticmethod
def about(event):
dlg = gui.DialogAbout(gui.frame_downloader)
dlg.ShowModal()
dlg.Destroy()

@staticmethod
def batchBind(handler_parent, source_parent, items_name):
for i in items_name:
gui.frame_downloader.Bind(wx.EVT_MENU, getattr(handler_parent, i), getattr(source_parent, i))

@staticmethod
def exit(event):
pass

class FrameMain_Menu_Help_Handler:
class FrameParser:
@staticmethod
def bindEvent():
items = ('about', )
bindMenuItems(FrameMain_Menu_Help_Handler, gui.frame_main.menu_bar.help, items)

gui.frame_parse.Bind(wx.EVT_CLOSE, FrameParser.win_close)
FrameParser.TextCtrl.bindEvent()
FrameParser.Button.bindEvent()
FrameParser.MemuBar.bindEvent()

@staticmethod
def about(event):
dlg = gui.About_Dialog(gui.frame_main)
dlg.ShowModal()
dlg.Destroy()
def win_close(event):
flow.ShutDown.frame_parser_close(event)


def bindButtonEvent(handler_parent, source_parent, items_name):
for i in items_name:
gui.frame_parse.Bind(wx.EVT_BUTTON, getattr(handler_parent, i), getattr(source_parent, 'button_' + i))
class TextCtrl:
@staticmethod
def bindEvent():
items = ('godownload', 'copylinks')
FrameParser.MemuBar.batchBind(FrameParser.TextCtrl, gui.frame_parse.listctrl_parse.menu, items)

@staticmethod
def godownload(event):
flow.FrameParser.MenuGoDownload.handle()

@staticmethod
def copylinks(event):
flow.FrameParser.MenuCopyLinks.handle()


class FrameParse_Button_Handler:
@staticmethod
def bindEvent():
items = ('parse', 'path', 'godownload', 'copyurl')
bindButtonEvent(FrameParse_Button_Handler, gui.frame_parse, items)
class MemuBar:
@staticmethod
def bindEvent():
FrameParser.MemuBar.File.bindEvent()
FrameParser.MemuBar.Help.bindEvent()

class File:
@staticmethod
def bindEvent():
items = ('settings',)
FrameParser.MemuBar.batchBind(FrameParser.MemuBar.File, gui.frame_parse.menu_bar.file, items)

@staticmethod
def parse(event):
flow.FrameParser.ButtonParse.handle()
@staticmethod
def settings(event):
dlg = gui.DialogSettings(gui.frame_parse)
dlg.ShowModal()

@staticmethod
def path(event):
flow.FrameParser.ButtonPath.handle()
class Help:
@staticmethod
def bindEvent():
items = ('about',)
FrameParser.MemuBar.batchBind(FrameParser.MemuBar.Help, gui.frame_parse.menu_bar.help, items)

@staticmethod
def godownload(event):
flow.FrameParser.ButtonGoDownload.handle()
@staticmethod
def about(event):
dlg = gui.DialogAbout(gui.frame_downloader)
dlg.ShowModal()
dlg.Destroy()

@staticmethod
def batchBind(handler_parent, source_parent, items_name):
for i in items_name:
gui.frame_parse.Bind(wx.EVT_MENU, getattr(handler_parent, i), getattr(source_parent, i))

@staticmethod
def copyurl(event):
flow.FrameParser.ButtonCopy.handle()

class Button:
@staticmethod
def bindEvent():
items = ('parse',)
FrameParser.Button.batchBind(FrameParser.Button, gui.frame_parse, items)

@staticmethod
def parse(event):
flow.FrameParser.ButtonParse.handle()

@staticmethod
def batchBind(handler_parent, source_parent, items_name):
for i in items_name:
gui.frame_parse.Bind(wx.EVT_BUTTON, getattr(handler_parent, i), getattr(source_parent, 'button_' + i))



class FrameMain_Close_Handler:
class FrameMerger:
@staticmethod
def bindEvent():
gui.frame_main.Bind(wx.EVT_CLOSE, FrameMain_Close_Handler.close)
gui.frame_merger.Bind(wx.EVT_CLOSE, FrameMerger.win_close)
FrameMerger.MenuBar.bindEvent()

@staticmethod
def close(event):
def _():
cv.SHUTDOWN = True
handler.merger.shutdown()
handler.downloader.shutdown()

gui.frame_main.Hide()
threading.Thread(target=_).start()
event.Skip()

def win_close(event):
flow.ShutDown.frame_merger_close(event)

class MenuBar:
@staticmethod
def bindEvent():
FrameMerger.MenuBar.File.bineEvent()
FrameMerger.MenuBar.Help.bindEvent()

class File:
@staticmethod
def bineEvent():
items = ('exit',)
FrameMerger.MenuBar.batchBind(FrameMerger.MenuBar.File, gui.frame_merger.menu_bar.file, items)

@staticmethod
def settings(event):
pass

@staticmethod
def exit(event):
flow.ShutDown.handle()


class Help:
@staticmethod
def bindEvent():
items = ('about',)
FrameMerger.MenuBar.batchBind(FrameMerger.MenuBar.Help, gui.frame_merger.menu_bar.help, items)

@staticmethod
def about(event):
dlg = gui.DialogAbout(gui.frame_downloader)
dlg.ShowModal()
dlg.Destroy()

@staticmethod
def batchBind(handler_parent, source_parent, items_name):
for i in items_name:
gui.frame_merger.Bind(wx.EVT_MENU, getattr(handler_parent, i), getattr(source_parent, i))

84 changes: 47 additions & 37 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,16 @@


## 更新说明
* **2019/04/28**
* 支持断点续传下载。
* 添加下载器的多种参数调节(可通过设置菜单进行修改)。
* 更换gui部分布局。(设置选项移到了menubar的file菜单,下载选中项移到了listctrl的右键菜单)
* 爱奇艺添加解析f4v资源。
* 修复爱奇艺f4v多线程下载进度卡住问题。
* 修复bilibili一部分视频无法解析问题。(至于大会员视频能不能下载还不清楚)
* 使用ffmpeg来对视频进行合并的操作。
* 加入merger框来显示ffmpeg合并进度和输出信息。

* **2019/04/25**
* 重构项目。
* 添加支持下载Bilibili视频。
Expand All @@ -15,6 +25,43 @@
* **2019/04/13**
* 修复下载M3U8视频多线程数据重复错误问题(由于M3U8多线程下载字段不一致问题)。



## 使用说明

* 打开程序 main.exe,然后自己摸索。。。
* 目录下的"cookies/*.txt"可以导入Cookie。(爱奇艺导入iqiyi.txt,哔哩哔哩导入bilibili.txt)


## TO-DO

* [x] 加入简略GUI交互。
* [x] 支持导入Cookie。
* [x] 解耦解析器。
* [x] 更换JS执行引擎。
* [x] 修复下载器Bug。
* [x] 优化下载器程序。
* [x] 优化执行流程。



## NOT-TO-DO

* [x] 批量视频解析下载。


## 引用项目

* __``Nbdler``__: https://github.com/ZSAIm/Nbdler
* __``PyJSCaller``__: https://github.com/ZSAIm/PyJSCaller

***

## 项目地址
github: https://github.com/ZSAIm/iqiyi-parser

## 历史更新

* **2019/04/12**
* 添加未完成任务提醒功能。
* 添加设置配置文件(保存上次下载目录、同时最大下载任务等)。
Expand Down Expand Up @@ -51,40 +98,3 @@

* **2018/09/07**
* 修复若干bug。


## 使用说明

* 打开程序 main.exe,然后自己摸索。。。
* 目录下的"cookies/*.txt"可以导入Cookie。(爱奇艺导入iqiyi.txt,哔哩哔哩导入bilibili.txt)


## TO-DO

* [x] 加入简略GUI交互。
* [x] 支持导入Cookie。
* [x] 解耦解析器。
* [x] 更换JS执行引擎。
* [x] 修复下载器Bug。
* [x] 优化下载器程序。
* [x] 优化执行流程。


## TO-DO or NOT-TO-DO

* [ ] 美化GUI界面。

## NOT-TO-DO

* [x] 批量视频解析下载。


## 引用项目

* __``Nbdler``__: https://github.com/ZSAIm/Nbdler
* __``PyJSCaller``__: https://github.com/ZSAIm/PyJSCaller

***

## 项目地址
github: https://github.com/ZSAIm/iqiyi-parser
Loading

0 comments on commit e2cf518

Please sign in to comment.