main
rodzic
0d48afbb7f
commit
333e2446f5
|
@ -0,0 +1,40 @@
|
|||
Proxy en cofig:
|
||||
set https_proxy=https://IP:PORT
|
||||
|
||||
..:: NETFLIX ::..
|
||||
|
||||
* Download MOVIE 1080p + AUDIO + SUBS:
|
||||
python netflix.py -t TITLE -q X -a en,es -o X
|
||||
|
||||
* Download SERIES 1080p + AUDIO + SUBS:
|
||||
python netflix.py -t TITLE -q X -s X -a en,es
|
||||
python netflix.py -t TITLE -q X -s X -e XX -a en,es
|
||||
|
||||
..:: COMANDS ::..
|
||||
|
||||
-q X = Quality 720p or 1080p
|
||||
-o X = Tittle movie " EXAMPLE.MOVIE.2018 " Only put comand in movies
|
||||
-s X = Season select
|
||||
-e XX = Episode select
|
||||
|
||||
-a en,es = Select audio:
|
||||
English: 'en'
|
||||
French: 'fr'
|
||||
German: 'de'
|
||||
Italian: 'it'
|
||||
Spanish: 'es'
|
||||
Flemish: 'nl-BE'
|
||||
Finnish: 'fi'
|
||||
No Dialogue: 'zxx'
|
||||
Czech: 'cs'
|
||||
European Spanish: 'es-ES'
|
||||
Japanese: 'ja'
|
||||
Brazilian Portuguese: 'pt-BR'
|
||||
Polish: 'pl'
|
||||
Turkish: 'tr'
|
||||
Mandarin: 'zh'
|
||||
Cantonese: 'yue'
|
||||
Arabic: 'ar'
|
||||
Korean: 'ko'
|
||||
Hebrew: 'he'
|
||||
Norwegian: 'nb'
|
|
@ -0,0 +1,719 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
###########################################################################
|
||||
## Python code generated with wxFormBuilder (version Oct 26 2018)
|
||||
## http://www.wxformbuilder.org/
|
||||
##
|
||||
## PLEASE DO *NOT* EDIT THIS FILE!
|
||||
###########################################################################
|
||||
|
||||
import wx
|
||||
import wx.xrc
|
||||
import subprocess
|
||||
import threading
|
||||
import sys
|
||||
import os
|
||||
|
||||
###########################################################################
|
||||
## Class MyFrame
|
||||
###########################################################################
|
||||
|
||||
class MyFrame ( wx.Frame ):
|
||||
|
||||
def __init__( self, parent ):
|
||||
wx.Frame.__init__ ( self,parent,id = -1,title='',pos = wx.Point(1,1),size = wx.Size(740,740),style = wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER ^ wx.MAXIMIZE_BOX,name = 'frame' )
|
||||
|
||||
self.SetTitle('NFTool Gui by flix88')
|
||||
self.Show(False)
|
||||
|
||||
self.SetSizeHints( wx.DefaultSize, wx.DefaultSize )
|
||||
|
||||
|
||||
#codec
|
||||
self.chc54c = wx.Choice(self,-1,wx.Point(10,30),wx.Size(120,41),[r'H264',r'HEVC',r'HDR'])
|
||||
self.chc54c.SetFont(wx.Font(12,74,90,90,0,"Tahoma"))
|
||||
|
||||
#reslution
|
||||
self.chc64c = wx.Choice(self,-1,wx.Point(150,30),wx.Size(120,41),[r'SD',r'720p',r'1080p'])
|
||||
self.chc64c.SetFont(wx.Font(12,74,90,90,0,"Tahoma"))
|
||||
|
||||
|
||||
#series
|
||||
|
||||
self.chc74c = wx.Choice(self,-1,wx.Point(290,30),wx.Size(120,41),[r'1',r'2',r'3',r'4',r'5',r'6',r'7',r'8',r'9',r'10',r'11',r'12',r'13',r'14',r'15',r'16',r'17',r'18',r'19',r'20'])
|
||||
self.chc74c.SetFont(wx.Font(12,74,90,90,0,"Tahoma"))
|
||||
|
||||
|
||||
#episode
|
||||
|
||||
self.chc84c = wx.Choice(self,-1,wx.Point(420,30),wx.Size(120,41),[r'1',r'2',r'3',r'4',r'5',r'6',r'7',r'8',r'9',r'10',r'11',r'12',r'13',r'14',r'15',r'16',r'17',r'18',r'19',r'20'])
|
||||
self.chc84c.SetFont(wx.Font(12,74,90,90,0,"Tahoma"))
|
||||
|
||||
|
||||
#audio
|
||||
self.lc7c = wx.CheckListBox(self,-1,wx.Point(550,30),wx.Size(120,120),[r'de',r'en',r'es-ES',r'es',r'fr',r'it',r'ja',r'pl',r'pt-BR',r'ru',r'tr',r'nl-BE',r'nb',r'fi',r'cs',r'zh',r'yue',r'ko',r'ar',r'he',r'zxx'])
|
||||
|
||||
|
||||
self.st64c = wx.StaticText(self,-1,"",wx.Point(50,10),wx.Size(104,20),wx.ST_NO_AUTORESIZE)
|
||||
self.st64c.SetLabel("Codec")
|
||||
self.st64c.SetFont(wx.Font(9,74,90,90,0,"Tahoma"))
|
||||
|
||||
|
||||
self.st74c = wx.StaticText(self,-1,"",wx.Point(180,10),wx.Size(104,20),wx.ST_NO_AUTORESIZE)
|
||||
self.st74c.SetLabel("Resolution")
|
||||
self.st74c.SetFont(wx.Font(9,74,90,90,0,"Tahoma"))
|
||||
|
||||
|
||||
self.st84c = wx.StaticText(self,-1,"",wx.Point(330,10),wx.Size(104,20),wx.ST_NO_AUTORESIZE)
|
||||
self.st84c.SetLabel("Series")
|
||||
self.st84c.SetFont(wx.Font(9,74,90,90,0,"Tahoma"))
|
||||
|
||||
|
||||
self.st94c = wx.StaticText(self,-1,"",wx.Point(455,10),wx.Size(104,20),wx.ST_NO_AUTORESIZE)
|
||||
self.st94c.SetLabel("Episode")
|
||||
self.st94c.SetFont(wx.Font(9,74,90,90,0,"Tahoma"))
|
||||
|
||||
|
||||
self.st54c = wx.StaticText(self,-1,"",wx.Point(590,10),wx.Size(104,20),wx.ST_NO_AUTORESIZE)
|
||||
self.st54c.SetLabel("Audio")
|
||||
self.st54c.SetFont(wx.Font(9,74,90,90,0,"Tahoma"))
|
||||
|
||||
|
||||
self.st44c = wx.StaticText(self,-1,"",wx.Point(50,65),wx.Size(104,15),wx.ST_NO_AUTORESIZE)
|
||||
self.st44c.SetLabel("Url")
|
||||
self.st44c.SetFont(wx.Font(9,74,90,90,0,"Tahoma"))
|
||||
|
||||
|
||||
self.txm17c = wx.TextCtrl(self,-1,"",wx.Point(10,85),wx.Size(320,55),wx.TE_MULTILINE)
|
||||
self.txm17c.SetFont(wx.Font(11,74,90,90,0,"Tahoma"))
|
||||
|
||||
self.txm23c = wx.TextCtrl(self,-1,"",wx.Point(10,155),wx.Size(660,450),wx.FULL_REPAINT_ON_RESIZE|wx.VSCROLL|wx.HSCROLL|wx.TE_MULTILINE)
|
||||
self.txm23c.SetFont(wx.Font(10,74,90,90,0,"Tahoma"))
|
||||
|
||||
|
||||
|
||||
|
||||
self.bt55c = wx.Button(self,-1,"",wx.Point(10,620),wx.Size(150,60))
|
||||
self.bt55c.SetLabel("Download")
|
||||
self.bt55c.SetFont(wx.Font(12,74,90,90,0,"Tahoma"))
|
||||
self.Bind(wx.EVT_BUTTON,self.bt55c_VwXEvOnButtonClick,self.bt55c)
|
||||
|
||||
self.bt65c = wx.Button(self,-1,"",wx.Point(180,620),wx.Size(150,60))
|
||||
self.bt65c.SetLabel("Playlist")
|
||||
self.bt65c.SetFont(wx.Font(12,74,90,90,0,"Tahoma"))
|
||||
self.Bind(wx.EVT_BUTTON,self.bt65c_VwXEvOnButtonClick,self.bt65c)
|
||||
|
||||
|
||||
self.ck66c = wx.CheckBox(self,-1,"",wx.Point(470,80),wx.Size(18,21))
|
||||
self.st66c = wx.StaticText(self,-1,"",wx.Point(460,60),wx.Size(90,22),wx.ST_NO_AUTORESIZE)
|
||||
self.st66c.SetLabel("Debug")
|
||||
|
||||
|
||||
#self.SetSizer( bSizer2 )
|
||||
self.Layout()
|
||||
|
||||
self.Centre( wx.BOTH )
|
||||
|
||||
|
||||
def __del__( self ):
|
||||
pass
|
||||
|
||||
|
||||
def get_playlist(self, event):
|
||||
|
||||
if self.chc54c.GetSelection() == 0:
|
||||
#self.txm23c.SetValue('h264')
|
||||
codec = 'h264'
|
||||
if self.chc54c.GetSelection() == 1:
|
||||
#self.txm23c.SetValue('hevc')
|
||||
codec = 'hevc'
|
||||
if self.chc54c.GetSelection() == 2:
|
||||
#self.txm23c.SetValue('hdr')
|
||||
codec = 'hdr'
|
||||
|
||||
if self.chc64c.GetSelection() == 0:
|
||||
#self.txm23c.SetValue('sd')
|
||||
res = 'sd'
|
||||
if self.chc64c.GetSelection() == 1:
|
||||
#self.txm23c.SetValue('720p')
|
||||
res = '720p'
|
||||
if self.chc64c.GetSelection() == 2:
|
||||
#self.txm23c.SetValue('1080p')
|
||||
res = '1080p'
|
||||
|
||||
if self.chc74c.GetSelection() == 0:
|
||||
#self.txm23c.SetValue('1')
|
||||
series = '1'
|
||||
if self.chc74c.GetSelection() == 1:
|
||||
#self.txm23c.SetValue('2')
|
||||
series = '2'
|
||||
if self.chc74c.GetSelection() == 2:
|
||||
#self.txm23c.SetValue('3')
|
||||
series = '3'
|
||||
if self.chc74c.GetSelection() == 3:
|
||||
#self.txm23c.SetValue('4')
|
||||
series = '4'
|
||||
if self.chc74c.GetSelection() == 4:
|
||||
#self.txm23c.SetValue('5')
|
||||
series = '5'
|
||||
if self.chc74c.GetSelection() == 5:
|
||||
#self.txm23c.SetValue('6')
|
||||
series = '6'
|
||||
if self.chc74c.GetSelection() == 6:
|
||||
#self.txm23c.SetValue('7')
|
||||
series = '7'
|
||||
if self.chc74c.GetSelection() == 7:
|
||||
#self.txm23c.SetValue('8')
|
||||
series = '8'
|
||||
if self.chc74c.GetSelection() == 8:
|
||||
#self.txm23c.SetValue('9')
|
||||
series = '9'
|
||||
if self.chc74c.GetSelection() == 9:
|
||||
#self.txm23c.SetValue('10')
|
||||
series = '10'
|
||||
if self.chc74c.GetSelection() == 10:
|
||||
#self.txm23c.SetValue('11')
|
||||
series = '11'
|
||||
if self.chc74c.GetSelection() == 11:
|
||||
#self.txm23c.SetValue('12')
|
||||
series = '12'
|
||||
if self.chc74c.GetSelection() == 12:
|
||||
#self.txm23c.SetValue('13')
|
||||
series = '13'
|
||||
if self.chc74c.GetSelection() == 13:
|
||||
#self.txm23c.SetValue('14')
|
||||
series = '14'
|
||||
if self.chc74c.GetSelection() == 14:
|
||||
#self.txm23c.SetValue('15')
|
||||
series = '15'
|
||||
if self.chc74c.GetSelection() == 15:
|
||||
#self.txm23c.SetValue('16')
|
||||
series = '16'
|
||||
if self.chc74c.GetSelection() == 16:
|
||||
#self.txm23c.SetValue('17')
|
||||
series = '17'
|
||||
if self.chc74c.GetSelection() == 17:
|
||||
#self.txm23c.SetValue('18')
|
||||
series = '18'
|
||||
if self.chc74c.GetSelection() == 18:
|
||||
#self.txm23c.SetValue('19')
|
||||
series = '19'
|
||||
if self.chc74c.GetSelection() == 19:
|
||||
#self.txm23c.SetValue('20')
|
||||
series = '20'
|
||||
|
||||
|
||||
if self.chc84c.GetSelection() == 0:
|
||||
#self.txm23c.SetValue('1')
|
||||
episode = '1'
|
||||
if self.chc84c.GetSelection() == 1:
|
||||
#self.txm23c.SetValue('2')
|
||||
episode = '2'
|
||||
if self.chc84c.GetSelection() == 2:
|
||||
#self.txm23c.SetValue('3')
|
||||
episode = '3'
|
||||
if self.chc84c.GetSelection() == 3:
|
||||
#self.txm23c.SetValue('4')
|
||||
episode = '4'
|
||||
if self.chc84c.GetSelection() == 4:
|
||||
#self.txm23c.SetValue('5')
|
||||
episode = '5'
|
||||
if self.chc84c.GetSelection() == 5:
|
||||
#self.txm23c.SetValue('6')
|
||||
episode = '6'
|
||||
if self.chc84c.GetSelection() == 6:
|
||||
#self.txm23c.SetValue('7')
|
||||
episode = '7'
|
||||
if self.chc84c.GetSelection() == 7:
|
||||
#self.txm23c.SetValue('8')
|
||||
episode = '8'
|
||||
if self.chc84c.GetSelection() == 8:
|
||||
#self.txm23c.SetValue('9')
|
||||
episode = '9'
|
||||
if self.chc84c.GetSelection() == 9:
|
||||
#self.txm23c.SetValue('10')
|
||||
episode = '10'
|
||||
if self.chc84c.GetSelection() == 10:
|
||||
#self.txm23c.SetValue('11')
|
||||
episode = '11'
|
||||
if self.chc84c.GetSelection() == 11:
|
||||
#self.txm23c.SetValue('12')
|
||||
episode = '12'
|
||||
if self.chc84c.GetSelection() == 12:
|
||||
#self.txm23c.SetValue('13')
|
||||
episode = '13'
|
||||
if self.chc84c.GetSelection() == 13:
|
||||
#self.txm23c.SetValue('14')
|
||||
episode = '14'
|
||||
if self.chc84c.GetSelection() == 14:
|
||||
#self.txm23c.SetValue('15')
|
||||
episode = '15'
|
||||
if self.chc84c.GetSelection() == 15:
|
||||
#self.txm23c.SetValue('16')
|
||||
episode = '16'
|
||||
if self.chc84c.GetSelection() == 16:
|
||||
#self.txm23c.SetValue('17')
|
||||
episode = '17'
|
||||
if self.chc84c.GetSelection() == 17:
|
||||
#self.txm23c.SetValue('18')
|
||||
episode = '18'
|
||||
if self.chc84c.GetSelection() == 18:
|
||||
#self.txm23c.SetValue('19')
|
||||
episode = '19'
|
||||
if self.chc84c.GetSelection() == 19:
|
||||
#self.txm23c.SetValue('20')
|
||||
episode = '20'
|
||||
|
||||
audio = []
|
||||
#self.txm23c.SetValue(str(self.lc7c.GetCheckedItems()))
|
||||
if self.lc7c.IsChecked(0):
|
||||
audio.append('de')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(1):
|
||||
audio.append('en')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(2):
|
||||
audio.append('es-ES')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(3):
|
||||
audio.append('es')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(4):
|
||||
audio.append('fr')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(5):
|
||||
audio.append('it')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(6):
|
||||
audio.append('ja')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(7):
|
||||
audio.append('pl')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(8):
|
||||
audio.append('pt-BR')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(9):
|
||||
audio.append('ru')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(10):
|
||||
audio.append('tr')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(11):
|
||||
audio.append('nl-BE')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(12):
|
||||
audio.append('nb')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(13):
|
||||
audio.append('fi')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(14):
|
||||
audio.append('cs')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(15):
|
||||
audio.append('zh')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(16):
|
||||
audio.append('yue')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(17):
|
||||
audio.append('ko')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(18):
|
||||
audio.append('ar')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(19):
|
||||
audio.append('he')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(20):
|
||||
audio.append('zxx')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
#cmd = "python netflix.py -t 80149092 -q sd -p h264 -a de"
|
||||
cmd = "python netflix.py -i"
|
||||
if self.ck66c.IsChecked():
|
||||
cmd1 = " -d"
|
||||
else:
|
||||
cmd1 = ""
|
||||
#https://www.netflix.com/de/title/80200571
|
||||
title = self.txm17c.GetValue()
|
||||
|
||||
cmd0 = title.split('title/')
|
||||
cmd0 = " -t " + cmd0[1]
|
||||
cmd2 = " -p " + codec
|
||||
cmd3 = " -q " + res
|
||||
cmd4 = " -a " + ','.join(audio)
|
||||
|
||||
se = self.chc74c.GetSelection()
|
||||
ep = self.chc84c.GetSelection()
|
||||
|
||||
if se == -1 and ep == -1:
|
||||
cmd5 = ""
|
||||
|
||||
if se >= 0 and ep == -1:
|
||||
cmd5 = " -s " + series
|
||||
|
||||
if se >= 0 and ep >= 0:
|
||||
cmd5 = " -s " + series + " -e " + episode
|
||||
|
||||
cmdd = cmd + cmd0 + cmd2 + cmd3 + cmd1 + cmd4 + cmd5
|
||||
print(cmdd)
|
||||
|
||||
popenobj = subprocess.Popen(cmdd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
while not popenobj.poll():
|
||||
stdoutdata = popenobj.stdout.readline()
|
||||
if stdoutdata:
|
||||
#sys.stdout.write(stdoutdata.decode('cp1252'))
|
||||
wx.CallAfter(self.txm23c.AppendText, stdoutdata.decode('cp1252').encode('utf-8'))
|
||||
else:
|
||||
break
|
||||
print("Return code", popenobj.returncode)
|
||||
|
||||
|
||||
|
||||
def get_download(self, event):
|
||||
|
||||
if self.chc54c.GetSelection() == 0:
|
||||
#self.txm23c.SetValue('h264')
|
||||
codec = 'h264'
|
||||
if self.chc54c.GetSelection() == 1:
|
||||
#self.txm23c.SetValue('hevc')
|
||||
codec = 'hevc'
|
||||
if self.chc54c.GetSelection() == 2:
|
||||
#self.txm23c.SetValue('hdr')
|
||||
codec = 'hdr'
|
||||
|
||||
if self.chc64c.GetSelection() == 0:
|
||||
#self.txm23c.SetValue('sd')
|
||||
res = 'sd'
|
||||
if self.chc64c.GetSelection() == 1:
|
||||
#self.txm23c.SetValue('720p')
|
||||
res = '720p'
|
||||
if self.chc64c.GetSelection() == 2:
|
||||
#self.txm23c.SetValue('1080p')
|
||||
res = '1080p'
|
||||
|
||||
if self.chc74c.GetSelection() == 0:
|
||||
#self.txm23c.SetValue('1')
|
||||
series = '1'
|
||||
if self.chc74c.GetSelection() == 1:
|
||||
#self.txm23c.SetValue('2')
|
||||
series = '2'
|
||||
if self.chc74c.GetSelection() == 2:
|
||||
#self.txm23c.SetValue('3')
|
||||
series = '3'
|
||||
if self.chc74c.GetSelection() == 3:
|
||||
#self.txm23c.SetValue('4')
|
||||
series = '4'
|
||||
if self.chc74c.GetSelection() == 4:
|
||||
#self.txm23c.SetValue('5')
|
||||
series = '5'
|
||||
if self.chc74c.GetSelection() == 5:
|
||||
#self.txm23c.SetValue('6')
|
||||
series = '6'
|
||||
if self.chc74c.GetSelection() == 6:
|
||||
#self.txm23c.SetValue('7')
|
||||
series = '7'
|
||||
if self.chc74c.GetSelection() == 7:
|
||||
#self.txm23c.SetValue('8')
|
||||
series = '8'
|
||||
if self.chc74c.GetSelection() == 8:
|
||||
#self.txm23c.SetValue('9')
|
||||
series = '9'
|
||||
if self.chc74c.GetSelection() == 9:
|
||||
#self.txm23c.SetValue('10')
|
||||
series = '10'
|
||||
if self.chc74c.GetSelection() == 10:
|
||||
#self.txm23c.SetValue('11')
|
||||
series = '11'
|
||||
if self.chc74c.GetSelection() == 11:
|
||||
#self.txm23c.SetValue('12')
|
||||
series = '12'
|
||||
if self.chc74c.GetSelection() == 12:
|
||||
#self.txm23c.SetValue('13')
|
||||
series = '13'
|
||||
if self.chc74c.GetSelection() == 13:
|
||||
#self.txm23c.SetValue('14')
|
||||
series = '14'
|
||||
if self.chc74c.GetSelection() == 14:
|
||||
#self.txm23c.SetValue('15')
|
||||
series = '15'
|
||||
if self.chc74c.GetSelection() == 15:
|
||||
#self.txm23c.SetValue('16')
|
||||
series = '16'
|
||||
if self.chc74c.GetSelection() == 16:
|
||||
#self.txm23c.SetValue('17')
|
||||
series = '17'
|
||||
if self.chc74c.GetSelection() == 17:
|
||||
#self.txm23c.SetValue('18')
|
||||
series = '18'
|
||||
if self.chc74c.GetSelection() == 18:
|
||||
#self.txm23c.SetValue('19')
|
||||
series = '19'
|
||||
if self.chc74c.GetSelection() == 19:
|
||||
#self.txm23c.SetValue('20')
|
||||
series = '20'
|
||||
|
||||
|
||||
if self.chc84c.GetSelection() == 0:
|
||||
#self.txm23c.SetValue('1')
|
||||
episode = '1'
|
||||
if self.chc84c.GetSelection() == 1:
|
||||
#self.txm23c.SetValue('2')
|
||||
episode = '2'
|
||||
if self.chc84c.GetSelection() == 2:
|
||||
#self.txm23c.SetValue('3')
|
||||
episode = '3'
|
||||
if self.chc84c.GetSelection() == 3:
|
||||
#self.txm23c.SetValue('4')
|
||||
episode = '4'
|
||||
if self.chc84c.GetSelection() == 4:
|
||||
#self.txm23c.SetValue('5')
|
||||
episode = '5'
|
||||
if self.chc84c.GetSelection() == 5:
|
||||
#self.txm23c.SetValue('6')
|
||||
episode = '6'
|
||||
if self.chc84c.GetSelection() == 6:
|
||||
#self.txm23c.SetValue('7')
|
||||
episode = '7'
|
||||
if self.chc84c.GetSelection() == 7:
|
||||
#self.txm23c.SetValue('8')
|
||||
episode = '8'
|
||||
if self.chc84c.GetSelection() == 8:
|
||||
#self.txm23c.SetValue('9')
|
||||
episode = '9'
|
||||
if self.chc84c.GetSelection() == 9:
|
||||
#self.txm23c.SetValue('10')
|
||||
episode = '10'
|
||||
if self.chc84c.GetSelection() == 10:
|
||||
#self.txm23c.SetValue('11')
|
||||
episode = '11'
|
||||
if self.chc84c.GetSelection() == 11:
|
||||
#self.txm23c.SetValue('12')
|
||||
episode = '12'
|
||||
if self.chc84c.GetSelection() == 12:
|
||||
#self.txm23c.SetValue('13')
|
||||
episode = '13'
|
||||
if self.chc84c.GetSelection() == 13:
|
||||
#self.txm23c.SetValue('14')
|
||||
episode = '14'
|
||||
if self.chc84c.GetSelection() == 14:
|
||||
#self.txm23c.SetValue('15')
|
||||
episode = '15'
|
||||
if self.chc84c.GetSelection() == 15:
|
||||
#self.txm23c.SetValue('16')
|
||||
episode = '16'
|
||||
if self.chc84c.GetSelection() == 16:
|
||||
#self.txm23c.SetValue('17')
|
||||
episode = '17'
|
||||
if self.chc84c.GetSelection() == 17:
|
||||
#self.txm23c.SetValue('18')
|
||||
episode = '18'
|
||||
if self.chc84c.GetSelection() == 18:
|
||||
#self.txm23c.SetValue('19')
|
||||
episode = '19'
|
||||
if self.chc84c.GetSelection() == 19:
|
||||
#self.txm23c.SetValue('20')
|
||||
episode = '20'
|
||||
|
||||
audio = []
|
||||
#self.txm23c.SetValue(str(self.lc7c.GetCheckedItems()))
|
||||
if self.lc7c.IsChecked(0):
|
||||
audio.append('de')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(1):
|
||||
audio.append('en')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(2):
|
||||
audio.append('es-ES')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(3):
|
||||
audio.append('es')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(4):
|
||||
audio.append('fr')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(5):
|
||||
audio.append('it')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(6):
|
||||
audio.append('ja')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(7):
|
||||
audio.append('pl')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(8):
|
||||
audio.append('pt-BR')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(9):
|
||||
audio.append('ru')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(10):
|
||||
audio.append('tr')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(11):
|
||||
audio.append('nl-BE')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(12):
|
||||
audio.append('nb')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(13):
|
||||
audio.append('fi')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(14):
|
||||
audio.append('cs')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(15):
|
||||
audio.append('zh')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(16):
|
||||
audio.append('yue')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(17):
|
||||
audio.append('ko')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(18):
|
||||
audio.append('ar')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(19):
|
||||
audio.append('he')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
if self.lc7c.IsChecked(20):
|
||||
audio.append('zxx')
|
||||
#self.txm23c.SetValue(str(audio))
|
||||
print(audio)
|
||||
|
||||
#cmd = "python netflix.py -t 80149092 -q sd -p h264 -a de"
|
||||
cmd = "python netflix.py"
|
||||
if self.ck66c.IsChecked():
|
||||
cmd1 = " -d"
|
||||
else:
|
||||
cmd1 = ""
|
||||
#https://www.netflix.com/de/title/80200571
|
||||
title = self.txm17c.GetValue()
|
||||
|
||||
cmd0 = title.split('title/')
|
||||
cmd0 = " -t " + cmd0[1]
|
||||
cmd2 = " -p " + codec
|
||||
cmd3 = " -q " + res
|
||||
cmd4 = " -a " + ','.join(audio)
|
||||
|
||||
se = self.chc74c.GetSelection()
|
||||
ep = self.chc84c.GetSelection()
|
||||
|
||||
if se == -1 and ep == -1:
|
||||
cmd5 = ""
|
||||
|
||||
if se >= 0 and ep == -1:
|
||||
cmd5 = " -s " + series
|
||||
|
||||
if se >= 0 and ep >= 0:
|
||||
cmd5 = " -s " + series + " -e " + episode
|
||||
|
||||
cmdd = cmd + cmd0 + cmd2 + cmd3 + cmd1 + cmd4 + cmd5
|
||||
print(cmdd)
|
||||
|
||||
popenobj = subprocess.Popen(cmdd, stdout=subprocess.PIPE)
|
||||
while not popenobj.poll():
|
||||
stdoutdata = popenobj.stdout.readline()
|
||||
if stdoutdata:
|
||||
#sys.stdout.write(stdoutdata.decode('cp1252'))
|
||||
wx.CallAfter(self.txm23c.AppendText, stdoutdata.decode('cp1252').encode('utf-8'))
|
||||
else:
|
||||
break
|
||||
print("Return code", popenobj.returncode)
|
||||
|
||||
|
||||
def bt65c_VwXEvOnButtonClick(self,event):
|
||||
|
||||
th = threading.Thread(target=self.get_playlist, args=(event,))
|
||||
th.start()
|
||||
return
|
||||
|
||||
def bt55c_VwXEvOnButtonClick(self,event):
|
||||
|
||||
th = threading.Thread(target=self.get_download, args=(event,))
|
||||
th.start()
|
||||
return
|
|
@ -0,0 +1,3 @@
|
|||
python netflix.py -t 80230399 -q 2160p -p hdr
|
||||
echo.
|
||||
pause
|
|
@ -0,0 +1,4 @@
|
|||
python netflix.py -t 80215488 -q 2160p -p hdr -s 1 -e 1 -a en
|
||||
echo *** PROCESO FINALIZADO ***
|
||||
echo.
|
||||
pause
|
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
|
@ -0,0 +1,108 @@
|
|||
important comment=D0-17-C2-95-00-BE
|
||||
|
||||
.vscode/settings.json
|
||||
binaries/*
|
||||
cookies/*
|
||||
output/*
|
||||
temp/*
|
||||
pywidevine/clients/*/*config.py
|
||||
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Distribution / packaging
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
dist/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
|
||||
# PyInstaller
|
||||
# Usually these files are written by a python script from a template
|
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
.hypothesis/
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Django stuff:
|
||||
*.log
|
||||
local_settings.py
|
||||
|
||||
# Flask stuff:
|
||||
instance/
|
||||
.webassets-cache
|
||||
|
||||
# Scrapy stuff:
|
||||
.scrapy
|
||||
|
||||
# Sphinx documentation
|
||||
docs/_build/
|
||||
|
||||
# PyBuilder
|
||||
target/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# pyenv
|
||||
.python-version
|
||||
|
||||
# celery beat schedule file
|
||||
celerybeat-schedule
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
|
||||
# Spyder project settings
|
||||
.spyderproject
|
||||
.spyproject
|
||||
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
|
@ -0,0 +1,3 @@
|
|||
mp4dump = 1.5.0.614
|
||||
phantomjs = 2.1.1
|
||||
mkvmerge = 11.0.0-64
|
|
@ -0,0 +1 @@
|
|||
generic 20170809T051653-05-1463071
|
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
|
@ -0,0 +1,15 @@
|
|||
# HTTP Cookie File for domains related to netflix.com.
|
||||
# Downloaded with cookies.txt Chrome Extension (https://chrome.google.com/webstore/detail/njabckikapfpffapmjgojcnbfjonfjfg)
|
||||
# Example: wget -x --load-cookies cookies.txt https://www.netflix.com/browse
|
||||
#
|
||||
.netflix.com TRUE / FALSE 1669278820 memclid e74b9e5e-91ca-4892-8632-0cb8c6603941
|
||||
.netflix.com TRUE / FALSE 1645518812 pas %7B%22supplementals%22%3A%7B%22muted%22%3Afalse%7D%7D
|
||||
.netflix.com TRUE / FALSE 1645518812 playerPerfMetrics %7B%22uiValue%22%3A%7B%22throughput%22%3A1761.05%2C%22throughputNiqr%22%3A0.6072196932211776%7D%2C%22mostRecentValue%22%3A%7B%22throughput%22%3A1761.05%2C%22throughputNiqr%22%3A0.6072196932211776%7D%7D
|
||||
.netflix.com TRUE / FALSE 0 clSharedContext 27ec0ee1-e55d-4fea-aa8a-dabceec64933
|
||||
.netflix.com TRUE / FALSE 1637744614 profilesNewSession 0
|
||||
.netflix.com TRUE / FALSE 1637753611 flwssn cbf22a14-2a7e-4600-9bdd-b1fa7066265a
|
||||
.netflix.com TRUE / FALSE 1669278811 nfvdid BQFmAAEBEEr1G4bCRtYMy71LrGowUb9g2zSaS2Gfvil0m7U5Q4pu3WKx5yM4XwwfWihPLA7px_GvXKP635bGWUK6H24DcM6GK9bQOFp9905LYuNO8BRrdxs4BFQ37uGmInll8XPG6c37SWowfHP2ZLV2sEZ7n-Pe
|
||||
.netflix.com TRUE / TRUE 1669278811 SecureNetflixId v%3D2%26mac%3DAQEAEQABABS2V1fpBFCM7yoXuwJ8HQonzDVujurxUxE.%26dt%3D1637742810595
|
||||
.netflix.com TRUE / TRUE 1669278811 NetflixId v%3D2%26ct%3DBQAOAAEBEHQhvoGIsgJ1s4AkHEfifJOB0OXHsrGk7wfJEIPW5AkQTvu73fMNWPKcPdATmNFwxzqdK5rGCqmjVwC1w71qsK_Y8DjjOcXHB3Zkmz2WUBUhF_JqAbEGvwW6HMo90mcoxWEExYHLudE6OJKeh_eeKvKsf-7c3iDxWVK1xBe1Q7ejeW6vv_iqFdV2qRC9JJi8dF4Vsz2omok0cu9ynaudFU0_BNHBxw4bBoqIQaqk5OHy2xEYk5nZRle-H1F7AshXstptrkvCVousFEOvA7_CWcu-GBoNckG8UtRfNnN8CMQi892E_LLRwYvVdOCl0VAW17TN4lExppSIPLO7QC9qqXrwGyeBkCOxdEkwGOeLlqVBQvEAcW9rsgjWKqnub2Cuy5wbF4xSF921NxeXRynPkD9HKWVWdOmO0s85cCsGIuZyeLAe0Zu0LxGLr5UApVF95uSREskq-51Y4kuVTHjnBAbZ6vXM4x5mqM1Mx4qa5S7QO1EYKPYuJjdcUuoPk8oSqZx4VSOL2kdz8r5qeqT-LTDBMtvRJII0y6JWu8SXcX8DY-9tMUKYWUn-eXKTCbrpDitls9aKM_CCknBSf4Tcw7ejaD7UBOWe8IKV_m1oLD8Es-P_qMPGg7xIOnnMI9AltmC1%26bt%3Ddbl%26ch%3DAQEAEAABABSMhx-Q3cKesfd5g62kOwDjP9LvfDg0j1Q.%26mac%3DAQEAEAABABSbl-uW04K698qYjACgMO4Te_COxD67puQ.
|
||||
.www.netflix.com TRUE / FALSE 0 cL 1637742812398%7C163774279369203149%7C163774279395967530%7C%7C5%7CNQGTGSO5SRHXRPPBVPZMU6RUSA
|
||||
.netflix.com TRUE / FALSE 1669278812 OptanonConsent isIABGlobal=false&datestamp=Wed+Nov+24+2021+14%3A03%3A32+GMT%2B0530+(India+Standard+Time)&version=6.6.0&consentId=995f08da-e373-45c0-afb5-94226bba5d02&interactionCount=1&landingPath=NotLandingPage&groups=C0001%3A1%2CC0002%3A1%2CC0004%3A1&hosts=H12%3A1%2CH13%3A1%2CH27%3A1%2CH28%3A1%2CH30%3A1&AwaitingReconsent=false
|
|
@ -0,0 +1 @@
|
|||
{"encryption_key": "oPpCxzLmhnoq2j6yxDmDug==", "sign_key": "NhnmNhfx3W9+yJwoBR/O6AQSUVUOk/eAlB4pWs2CIq4=", "tokens": {"mastertoken": {"tokendata": "eyJzZXNzaW9uZGF0YSI6IkJRQ0FBQUVCRUpVcFNhU0NmRTRqUXFEYWxYYVpvMytCNEtFcCtjdXJwazlHYzh6NHIyRW1FYnVYVGY0T1RMVGlMQnlvQlZZTDJydjc1MW15bWxNQmI4U1dnbkpuaUZmK2MySjJMYjRQZEtGRUN5TEF6eitHb2lRa1pGOU1JazJRWXpKZG5HdjdxQ252dVA5UkJpUHo5VFFzaDllY2Fqa1IxWFViTTBGQ0tDdGVLNk0xMFlpWEY3MGVZZm1MQk5teW5MK2RYQm1VOWpEMDBPM1BJNitFSlFXa3FFT3ZwVXVYVUMxbHRzSDdOVFNkWExrTXhiUXFjUFB4MXYvL1VMT3dYUVMwaFBDL1lnR0Q2Sm1wQ2x3b0o2WXN1ejZqb1FMY0RwTnlDeVY1WU9GcUYwZkF6VlVFeWtZa3JDMFF1ZldEdlE3YmFtNTA4d1RqT0ZVMEc5TnpONTdGb3lTSUJWcm0rTUI2cTV4UmpmSWlGQUhDbVFRY1JGUnR4UEpoUU8vdk5ETGUwRFM2QmFJSEFRdkZ5VmpWSHZnMUc2SGUvZzVvSnZHRk5QbkYzL1d0VFI1SGQyVVB3N0pzYytuVFlaWGYrR0p6c3JQazU0bjVSVWdoZjRYZUhLeHhxK0pWUjJxRUt4bWc4UkVJWVVGQkpxQ0lxaGlJUTdONjlWdU8vZTVqTTh5VENic2NESFJic0dIeldla1N3cnQzR2gwR05TZXVwZU44SEkxb0hFS291U3l5cFZsV1hxTmJKVlpMYWFHdTY4cHp6amZzUXNUdVhMeWNwR1JTNGtWNytieDhrTG9wMncwdHhIdnhSQUd3K0RPU0xTVm5HcWdxSHQ0UlRjM1o4aHd6ZUZzdVFuYlRqSnJyN0kvUk1FRGhPTVBqK3NKSHl3PT0iLCJyZW5ld2Fsd2luZG93IjoxNjM3ODI5NTExLCJzZXJpYWxudW1iZXIiOjg4NjE3ODYxMDAwOTM2MDQsImV4cGlyYXRpb24iOjE2Mzg5NTI3MTEsInNlcXVlbmNlbnVtYmVyIjoyN30=", "signature": "AQEAgQABASBFZUtJcaaqs6+8UyjpafykZUeUYd6JEg3plZeCFlmZ+EwJ1ms="}}}
|
|
@ -0,0 +1,27 @@
|
|||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEogIBAAKCAQEAr8jT0KjVIKBQTocunmzU0e9lk+J20W4fuG3e4d+fTaOvfJFH
|
||||
HPxQvcYIx6EBl/CVL8jYnq5b7Vn5FTJvLhJAyNZXkHNCR89qafoJu9EpiHfVE5rJ
|
||||
pdpX/XJmR4RGIJ7mwjkqgKMnlZqLRPB193zIhOcvTP76hQMxJZ7D7rlsBRY1K95r
|
||||
sU6UuZSJkXhVKao/VjTCfUUoYylHxeYh9FJ4E+MY0lenZD0anB3zCPTeJWuSy3tT
|
||||
nfd9y1UeKXprc8uwtHN55sjwbTthyOosOvAwXlQmLj2RWaFOMgk2k5opTVIf4A3f
|
||||
DVmKNTlSMrhFEAPPnobeZO9wJo5V9aoG/47bDQIDAQABAoIBAAZToVIBfZg8xN8q
|
||||
rOIdUySSK/MAY9viTYh3Bd5VzNc/xK1kUi2oJCTMZ5z9vb+w9EGhxjAh4OOgSR96
|
||||
7vb2x7eixUiI6XIJtFAHpImKu+ayP2xC9i5+twuDbkx1JYv/hBkp8w5psN9Izmnn
|
||||
CKvlZRcpdfGcvLoEVSTAO9eP+2QMawbSq6H9tSOaOEsRdIP3x3ghdLm7lHymQ8AQ
|
||||
AVsL9AF87bNGh20gdKNO179irTv3pHw1jGX1EndOKt0Q9GX619HKNVy7Mq2uK/eV
|
||||
HwZkttOJE72pwHQSpOSTslrFoKXQZkF4dtftaCA45d0UxCoPOws82a8MKwB4sEmK
|
||||
VINMfrECgYEAyK3u5rgj/PE8pbgCfIkJu5+schNqMJXB7ffzc9RKmd7soGjMRLjo
|
||||
lzxi10/QDkLM9a/W0qPEQucyFpqAzJhg6+5WgcidJB3Ll2UiXcwLlJWmHHmIEscJ
|
||||
qeCKErBBb8qcgJyjAkDI3JM7jH/Mm8D/B6BXDKk5EczwB0QPy2SvY3ECgYEA4D4L
|
||||
CYAksN/GQFd+TXh3Hci4PyLscec1ALfqVQPAcr1JQof2fBNzy8NrcJINp5O66yib
|
||||
yE82CHbUn7jjYBQSXSpkzQmELhxje7sOzUPOlG5PbBddiy5vDfo6JfsQEjb54Zcu
|
||||
KLOvJJHmGlsvd56xTxCDV9zikBjN1+9RPT7/610CgYAae+HgbwLI2elgEXW6i7dO
|
||||
HJd8gpVsDgeG6UcmzSh/QA1IaiwzEZgYhW6h7bWOfEBiWC9ooxY+ohZZJ1DCL4Xy
|
||||
/QRLoncikhARTdaIPGp21H0UmvFbUQs0cR6nsr0gDMQ0sPdOT9ByU7fzJdaR45mE
|
||||
nyN910Nh1wMCYngXJpWC8QKBgDQhuGcpB16nZ2ul65MPIoImG89xyw5f9g6Is024
|
||||
ZZFHODTjbwZBb3Y7pEqzacE/swDgm/bhk2o8Vgob7aB0iiBmrrCMOdKOfwJQ5owJ
|
||||
64jObGBwviqRTPgu6D3UNFRHu6gagXys6VbTJG+UK2Df39DFwgM3MuTVH2XIGVbn
|
||||
wo9xAoGAM1kAWIipKpphWms/v874kUtI/aUeGrr1Qh0OghYxecJfOtWixQrngvSa
|
||||
zQgnjfJwFxnD1J5E8Mv4AuXOOLmry2LIjq5OASmLlQpa7N9wTNFCPNAqo3m4yLJ0
|
||||
3dTSmRNeLP2Xnn37QxXjSOTBpWtUuJ3XEuyE5LN4rf8FQ02j188=
|
||||
-----END RSA PRIVATE KEY-----
|
Plik binarny nie jest wyświetlany.
|
@ -0,0 +1 @@
|
|||
{'version': 2, 'id': 16087085638925, 'serverTime': 1608708564066, 'from': 'nq_cadmium_pbo_licenses@2.56.0/pbo-client@2.56.0', 'result': [{'error': {'pboc': True, 'code': 'FAIL', 'detail': 'license/pbl-1044: IssueLicensePolicyError (E2-BQFRAAELEISgIsOLo2MW4GA3BfKAY06At4kVy6MrBAAzT82uyWw8qJdUSJPfOVf8gtcBZnzv_pPaZI2dRGRpdXoC1BlCmdYDWsLTB8k5ycO4z6rbgxHhaHo8H_ZDh11CZ3yNmzLiQL8-SGHqyrPaOLBBU_xvKwNsZtBbO6D5N4VL8oL2UV8uYy-9ADUH3uB8cVtyayaJL5cjZD6uQl_RaXYHh0e6GwEl_L-GJIsZFlOhj7jgwAWC9l0ANY8nG61SWkOJ7agmDYDwTFJ5Vvy0GA..) (nq_cadmium_pbo_licenses@2.56.0/pbo-client@2.56.0)', 'display': 'Dieser Titel steht nicht zum Streaming zur Verfügung. Bitte versuchen Sie einen anderen Titel. – 1044', 'alertTag': '', 'errorDisplayMessage': 'Dieser Titel steht nicht zum Streaming zur Verfügung. Bitte versuchen Sie einen anderen Titel. – 1044', 'errorActionId': 3, 'nccpError': {}, 'errorSubCode': 0, 'errorReasonCode': 0, 'errorNccpCode': 0, 'errorExternalCode': 0, 'bladeRunnerMessage': 'license/pbl-1044: IssueLicensePolicyError (E2-BQFRAAELEISgIsOLo2MW4GA3BfKAY06At4kVy6MrBAAzT82uyWw8qJdUSJPfOVf8gtcBZnzv_pPaZI2dRGRpdXoC1BlCmdYDWsLTB8k5ycO4z6rbgxHhaHo8H_ZDh11CZ3yNmzLiQL8-SGHqyrPaOLBBU_xvKwNsZtBbO6D5N4VL8oL2UV8uYy-9ADUH3uB8cVtyayaJL5cjZD6uQl_RaXYHh0e6GwEl_L-GJIsZFlOhj7jgwAWC9l0ANY8nG61SWkOJ7agmDYDwTFJ5Vvy0GA..) (nq_cadmium_pbo_licenses@2.56.0/pbo-client@2.56.0)', 'bladeRunnerCode': '1044'}, 'errorParams': {'sessionId': '123456'}}]}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,382 @@
|
|||
import argparse
|
||||
import logging
|
||||
import sys
|
||||
import requests
|
||||
import re
|
||||
import json
|
||||
|
||||
try:
|
||||
from http.cookiejar import CookieJar
|
||||
except ImportError:
|
||||
from cookielib import CookieJar
|
||||
|
||||
import colorama
|
||||
from pywidevine.clients.netflix.client import NetflixClient
|
||||
from pywidevine.clients.netflix.config import NetflixConfig
|
||||
from pywidevine.clients.netflix.profiles import NetflixProfiles
|
||||
from pywidevine.downloader.wvdownloader import WvDownloader
|
||||
from pywidevine.downloader.wvdownloaderconfig import WvDownloaderConfig
|
||||
|
||||
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description="netflix content downloader"
|
||||
)
|
||||
|
||||
parser.add_argument('-t', '--title',
|
||||
help='title id',
|
||||
nargs='+',
|
||||
type=int,
|
||||
required=True)
|
||||
parser.add_argument('-o', '--outputfile',
|
||||
default='out',
|
||||
nargs='?',
|
||||
help='output filename (no extension)')
|
||||
parser.add_argument('-q', '--quality',
|
||||
help='video resolution',
|
||||
choices=['480p', '720p', '1080p', '2160p'])
|
||||
parser.add_argument('-a', '--audiolang',
|
||||
help='audio language',
|
||||
type=lambda x: x.split(','))
|
||||
parser.add_argument('-p', '--profile',
|
||||
default='h264',
|
||||
#choices=['h264', 'hevc', 'hdr', 'all'],
|
||||
choices=['h264_main', 'h264_high', 'hevc', 'hdr', 'vp9', 'all'],
|
||||
#choices=['h264', 'h264_hpl', 'hevc', 'hdr', 'vp9', 'all'],
|
||||
help='video type to download')
|
||||
parser.add_argument('-k', '--skip-cleanup', action='store_true', help='skip cleanup step')
|
||||
parser.add_argument('-m', '--dont-mux',
|
||||
action='store_true',
|
||||
help='move unmuxed tracks instead of muxing')
|
||||
parser.add_argument('-i', '--info', action='store_true', help='print track information and exit')
|
||||
parser.add_argument('-d', '--debug', action='store_true', help='print debug statements')
|
||||
parser.add_argument('-S', '--subs-only', action='store_true', help='download subtitles and exit')
|
||||
parser.add_argument('-u', '--sub-type', default='srt', choices=['srt', 'ass', 'none'],
|
||||
help='subtitle type (or none)')
|
||||
parser.add_argument('-s', '--season', type=int, help='lookup and download season from title id')
|
||||
parser.add_argument('-e',
|
||||
'--episode_start',
|
||||
dest="episode_start",
|
||||
help="Recursively rip season number that provided viewable ID belongs to, starting at the episode provided")
|
||||
parser.add_argument('--skip', type=int, default=0, help='skip episodes in season mode')
|
||||
parser.add_argument('--region', default='us', choices=['us', 'uk', 'jp', 'ca', 'se', 'ru'], help='region to proxy')
|
||||
parser.add_argument('--license',
|
||||
action='store_true',
|
||||
help='do license request and print decryption keys only')
|
||||
|
||||
args = parser.parse_args()
|
||||
DEBUG_LEVELKEY_NUM = 21
|
||||
logging.addLevelName(DEBUG_LEVELKEY_NUM, "LOGKEY")
|
||||
|
||||
|
||||
def logkey(self, message, *args, **kws):
|
||||
# Yes, logger takes its '*args' as 'args'.
|
||||
if self.isEnabledFor(DEBUG_LEVELKEY_NUM):
|
||||
self._log(DEBUG_LEVELKEY_NUM, message, args, **kws)
|
||||
|
||||
|
||||
logging.Logger.logkey = logkey
|
||||
|
||||
logger = logging.getLogger()
|
||||
|
||||
if args.license:
|
||||
logger.setLevel(21)
|
||||
else:
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
if args.debug:
|
||||
logger.setLevel(logging.DEBUG)
|
||||
|
||||
ch = logging.StreamHandler(sys.stdout)
|
||||
ch.setLevel(logging.DEBUG)
|
||||
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(module)s - %(message)s')
|
||||
ch.setFormatter(formatter)
|
||||
logger.addHandler(ch)
|
||||
|
||||
colorama.init()
|
||||
|
||||
BUILD = ''
|
||||
SESSION = requests.Session()
|
||||
|
||||
|
||||
"""
|
||||
login_pag = SESSION.get("https://www.netflix.com/login").text
|
||||
authURL = re.search('name="authURL" value="([^"]+)"', login_pag)
|
||||
print(authURL)
|
||||
#authURL = re.search(r'authURL\" value\=\"(.*?)\"', login_pag)
|
||||
authURL = authURL[1]
|
||||
|
||||
def login(username, password):
|
||||
#
|
||||
post_data = {
|
||||
'email': username,
|
||||
'password': password,
|
||||
'rememberMe': 'true',
|
||||
'mode': 'login',
|
||||
'action': 'loginAction',
|
||||
'withFields': 'email,password,rememberMe,nextPage,showPassword',
|
||||
'nextPage': '',
|
||||
'showPassword': '',
|
||||
'authURL': authURL
|
||||
}
|
||||
|
||||
req = SESSION.post('https://www.netflix.com/login', post_data)
|
||||
#match =re.search (r'.*"BUILD_IDENTIFIER":"([a-z0-9]+)"', req.text)
|
||||
match = re.search(r'"BUILD_IDENTIFIER":"([a-z0-9]+)"', req.text) #fix by Castle / https://gist.github.com/xor10/8f65c1e66a34386e1131f8c28ff6bf64#gistcomment-2668063
|
||||
|
||||
if match is not None:
|
||||
return match.group(1)
|
||||
else:
|
||||
return None
|
||||
"""
|
||||
|
||||
|
||||
def login(username, password):
|
||||
r = SESSION.get('https://www.netflix.com/login', stream=True, allow_redirects=False, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0'})
|
||||
loc = None
|
||||
while 'Location' in r.headers:
|
||||
loc = r.headers['Location']
|
||||
r = SESSION.get(loc, stream=True, allow_redirects=False, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0'})
|
||||
|
||||
x = re.search('name="authURL" value="([^"]+)"', r.text)
|
||||
if not x:
|
||||
return
|
||||
authURL = x.group(1)
|
||||
post_data = {'userLoginId':username,
|
||||
'password':password,
|
||||
'rememberMe':'true',
|
||||
'mode':'login',
|
||||
'flow':'websiteSignUp',
|
||||
'action':'loginAction',
|
||||
'authURL':authURL,
|
||||
'withFields':'userLoginId,password,rememberMe,nextPage,showPassword',
|
||||
'nextPage':'',
|
||||
'showPassword':''}
|
||||
req = SESSION.post(loc, post_data, headers={'User-Agent': 'Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.90 Safari/537.36 CrKey/1.17.46278'})
|
||||
try:
|
||||
req.raise_for_status()
|
||||
except requests.exceptions.HTTPError as e:
|
||||
print(e)
|
||||
logger.error(e)
|
||||
sys.exit(1)
|
||||
|
||||
match = re.search('"BUILD_IDENTIFIER":"([a-z0-9]+)"', req.text)
|
||||
if match is not None:
|
||||
return match.group(1)
|
||||
else:
|
||||
return
|
||||
|
||||
|
||||
|
||||
"""
|
||||
def fetch_metadata(movieid):
|
||||
#Fetches metadata for a netflix id
|
||||
req = SESSION.get('https://www.netflix.com/api/shakti/' + BUILD + '/metadata?movieid=' + movieid)
|
||||
return json.loads(req.text)
|
||||
"""
|
||||
|
||||
def parseCookieFile(cookiefile):
|
||||
"""Parse a cookies.txt file and return a dictionary of key value pairs
|
||||
compatible with requests."""
|
||||
|
||||
cookies = {}
|
||||
with open (cookiefile, 'r') as fp:
|
||||
for line in fp:
|
||||
if not re.match(r'^\#', line):
|
||||
lineFields = line.strip().split('\t')
|
||||
cookies[lineFields[5]] = lineFields[6]
|
||||
return cookies
|
||||
|
||||
|
||||
|
||||
#proxies = {"https": "159.100.246.156:45382"}
|
||||
|
||||
def get_build():
|
||||
cookies = parseCookieFile('cookies.txt')
|
||||
post_data = ''
|
||||
#req1 = SESSION.get('https://www.netflix.com', headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'}, cookies=cookies, proxies=proxies)
|
||||
#print(req1.text)
|
||||
#exit(1)
|
||||
req = SESSION.post('https://www.netflix.com/browse', post_data, headers={'User-Agent': 'Gibbon/2018.1.6.3/2018.1.6.3: Netflix/2018.1.6.3 (DEVTYPE=NFANDROID2-PRV-FIRETVSTICK2016; CERTVER=0)'}, cookies=cookies)
|
||||
#req = SESSION.get('https://www.netflix.com/browse', headers={'User-Agent': 'Gibbon/2018.1.6.3/2018.1.6.3: Netflix/2018.1.6.3 (DEVTYPE=NFANDROID2-PRV-FIRETVSTICK2016; CERTVER=0)'}, cookies=cookies, proxies=proxies)
|
||||
match = re.search(r'"BUILD_IDENTIFIER":"([a-z0-9]+)"', req.text) #fix by Castle / https://gist.github.com/xor10/8f65c1e66a34386e1131f8c28ff6bf64#gistcomment-2668063
|
||||
return match.group(1)
|
||||
|
||||
def fetch_metadata(movieid):
|
||||
global BUILD
|
||||
cookies = parseCookieFile('cookies.txt')
|
||||
#BUILD = get_build()
|
||||
BUILD = 'vafe38bd5'
|
||||
print(BUILD)
|
||||
#cookies = 'on'
|
||||
#if BUILD == '':
|
||||
# BUILD = login(username, password)
|
||||
"""
|
||||
if cookies == 'off':
|
||||
req = SESSION.get('https://www.netflix.com/api/shakti/' + BUILD + '/metadata?movieid=' + movieid + '&drmSystem=widevine&isWatchlistEnabled=false&isShortformEnabled=false&isVolatileBillboardsEnabled=false')
|
||||
else:
|
||||
req = requests.get('https://www.netflix.com/api/shakti/' + BUILD + '/metadata?movieid=' + movieid + '&drmSystem=widevine&isWatchlistEnabled=false&isShortformEnabled=false&isVolatileBillboardsEnabled=false', cookies=cookies)
|
||||
"""
|
||||
req = requests.get('https://www.netflix.com/api/shakti/' + BUILD + '/metadata?movieid=' + movieid + '&drmSystem=widevine&isWatchlistEnabled=false&isShortformEnabled=false&isVolatileBillboardsEnabled=false', cookies=cookies)
|
||||
return json.loads(req.text)
|
||||
|
||||
|
||||
def fetch_metadata_movie(BUILD, movieid):
|
||||
#global BUILD
|
||||
#cookies = 'on'
|
||||
#if BUILD == '':
|
||||
# BUILD = login(username, password)
|
||||
cookies = parseCookieFile('cookies.txt')
|
||||
#BUILD = get_build()
|
||||
BUILD = 'vafe38bd5'
|
||||
print(BUILD)
|
||||
"""
|
||||
if cookies == 'off':
|
||||
req = SESSION.get('https://www.netflix.com/api/shakti/' + BUILD + '/metadata?movieid=' + movieid + '&drmSystem=widevine&isWatchlistEnabled=false&isShortformEnabled=false&isVolatileBillboardsEnabled=false')
|
||||
else:
|
||||
req = requests.get('https://www.netflix.com/api/shakti/' + BUILD + '/metadata?movieid=' + movieid + '&drmSystem=widevine&isWatchlistEnabled=false&isShortformEnabled=false&isVolatileBillboardsEnabled=false', cookies=cookies)
|
||||
"""
|
||||
req = requests.get('https://www.netflix.com/api/shakti/' + BUILD + '/metadata?movieid=' + movieid + '&drmSystem=widevine&isWatchlistEnabled=false&isShortformEnabled=false&isVolatileBillboardsEnabled=false', cookies=cookies)
|
||||
return json.loads(req.text)
|
||||
|
||||
episodes = []
|
||||
if args.season:
|
||||
nf_cfg = NetflixConfig(0, None, None, [], ['all'], None, args.region)
|
||||
username, password = nf_cfg.get_login()
|
||||
#BUILD = login(username, password)
|
||||
if BUILD is not None:
|
||||
info = fetch_metadata(str(args.title[0]))
|
||||
serial_title = info['video']['title']
|
||||
serial_title = re.sub(r'[/\\:*?"<>|]', '', serial_title)
|
||||
for season in info['video']['seasons']:
|
||||
if season['seq'] == args.season:
|
||||
episode_list = season['episodes']
|
||||
#print(len(episode_list))
|
||||
if args.episode_start:
|
||||
#episode_list = episode_list[(int(args.episode_start) - 1):]
|
||||
episode_list = [episode_list[(int(args.episode_start) - 1)]]
|
||||
#print(episode_list)
|
||||
for episode in episode_list:
|
||||
if episode['seq'] > args.skip:
|
||||
episodes.append((
|
||||
episode['episodeId'],
|
||||
"{}.S{}E{}.{}".format(
|
||||
serial_title.replace(' ', '.').replace('"', '.').replace('"', '.').replace('(', '').replace(')', ''),
|
||||
str(season['seq']).zfill(2),
|
||||
str(episode['seq']).zfill(2),
|
||||
episode['title'].replace(',', '').replace(':', '').replace('?', '').replace("'", '').replace(' ', '.').replace('/', '').replace('"', '.').replace('"', '.').replace('(', '').replace(')', ''))))
|
||||
else:
|
||||
episodes = [(args.title[0], args.outputfile)]
|
||||
|
||||
def get_movie_name():
|
||||
#nf_cfg = NetflixConfig(0, None, None, [], ['all'], None, args.region)
|
||||
#username, password = nf_cfg.get_login()
|
||||
#BUILD = ''
|
||||
#BUILD = login(username, password)
|
||||
#print(BUILD)
|
||||
BUILD = globals()['BUILD']
|
||||
if BUILD is not None:
|
||||
info = fetch_metadata_movie(BUILD, str(args.title[0]))
|
||||
serial_title = info['video']['title']
|
||||
#serial_title = 'title'
|
||||
synopsis = info['video']['synopsis']
|
||||
#synopsis = ''
|
||||
year = info['video']['year']
|
||||
#year = str('2019')
|
||||
try:
|
||||
boxart = info['video']['boxart'][0]['url']
|
||||
except IndexError:
|
||||
boxart = ''
|
||||
serial_title = re.sub(r'[/\\:*?"<>|]', '', serial_title)
|
||||
#print(serial_title)
|
||||
logger.info("ripping {} {}".format(serial_title, serial_title.replace('"', '.').replace('"', '.').replace('(', '').replace(')', '')))
|
||||
logger.info("boxart {} ".format(boxart))
|
||||
logger.info("synopsis {} ".format(synopsis))
|
||||
logger.info("year {} ".format(year))
|
||||
return str(serial_title.replace('"', '.').replace('"', '.').replace('(', '').replace(')', ''))
|
||||
else:
|
||||
return str('')
|
||||
|
||||
nf_profiles = NetflixProfiles(args.profile, args.quality)
|
||||
|
||||
|
||||
for title, outputfile in episodes:
|
||||
if args.season:
|
||||
|
||||
if args.profile == 'h264':
|
||||
codec_name = 'x264'
|
||||
if args.profile == 'h264_main':
|
||||
codec_name = 'x264'
|
||||
if args.profile == 'h264_high':
|
||||
codec_name = 'x264'
|
||||
if args.profile == 'hevc':
|
||||
codec_name = 'h265'
|
||||
if args.profile == 'hdr':
|
||||
codec_name = 'hdr'
|
||||
if args.profile == 'vp9':
|
||||
codec_name = 'VP9'
|
||||
|
||||
if args.profile == 'all':
|
||||
codec_name = 'x264'
|
||||
|
||||
group = 'MI'
|
||||
logger.info("ripping {}: {}".format(title, outputfile))
|
||||
outputfile = outputfile + '.' + str(args.quality) + '.NF.WEB-DL.' + 'AUDIOCODEC' + '.' + codec_name + '-' + group
|
||||
outputfile1 = outputfile + '.' + str(args.quality) + '.NF.WEB-DL.' + 'AUDIOCODEC' + '.' + codec_name + '-' + group
|
||||
if not args.season:
|
||||
|
||||
if args.profile == 'h264':
|
||||
codec_name = 'x264'
|
||||
if args.profile == 'h264_main':
|
||||
codec_name = 'x264'
|
||||
if args.profile == 'h264_high':
|
||||
codec_name = 'x264'
|
||||
if args.profile == 'hevc':
|
||||
codec_name = 'h265'
|
||||
if args.profile == 'hdr':
|
||||
codec_name = 'hdr'
|
||||
if args.profile == 'vp9':
|
||||
codec_name = 'VP9'
|
||||
|
||||
if args.profile == 'all':
|
||||
codec_name = 'x264'
|
||||
|
||||
group = 'NFT'
|
||||
logger.info("ripping {}: {}".format(title, outputfile))
|
||||
info = fetch_metadata_movie(BUILD, str(args.title[0]))
|
||||
#print(info)
|
||||
year = info['video']['year']
|
||||
#year = str('2019')
|
||||
outputfile = get_movie_name().replace("'", '').replace(' ', '.').replace('"', '.').replace('"', '.').replace('(', '').replace(')', '') + '.'+ str(year) + '.' + str(args.quality) + '.NF.WEB-DL.'+ 'AUDIOCODEC' + '.' + codec_name + '-' + group
|
||||
outputfile1 = get_movie_name().replace("'", '').replace(' ', '.').replace('"', '.').replace('"', '.').replace('(', '').replace(')', '') + '.'+ str(year) + '.' + str(args.quality) + '.NF.WEB-DL.'+ 'AUDIOCODEC' + '.' + codec_name + '-' + group
|
||||
if args.audiolang:
|
||||
audiolang = args.audiolang
|
||||
else:
|
||||
audiolang = None
|
||||
if args.quality is not None:
|
||||
profiles = nf_profiles.get_all()
|
||||
else:
|
||||
profiles = nf_profiles.get_all()
|
||||
nf_cfg = NetflixConfig(title, profiles, None, [], ['all'], audiolang, args.region)
|
||||
nf_client = NetflixClient(nf_cfg)
|
||||
"""
|
||||
if not args.season:
|
||||
outputfile = outputfile + '_' + str(args.profile)
|
||||
outputfile1 = outputfile + '_' + str(args.profile)
|
||||
else:
|
||||
outputfile1 = outputfile + '_' + str(args.profile)
|
||||
outputfile = outputfile + '_' + str(args.profile)
|
||||
"""
|
||||
wvdownloader_config = WvDownloaderConfig(nf_client,
|
||||
outputfile,
|
||||
args.sub_type,
|
||||
args.info,
|
||||
args.skip_cleanup,
|
||||
args.dont_mux,
|
||||
args.subs_only,
|
||||
args.license,
|
||||
args.quality,
|
||||
args.profile)
|
||||
|
||||
wvdownloader = WvDownloader(wvdownloader_config)
|
||||
wvdownloader.run()
|
|
@ -0,0 +1,33 @@
|
|||
# -*- mode: python -*-
|
||||
|
||||
block_cipher = None
|
||||
|
||||
|
||||
a = Analysis(['netflix.py'],
|
||||
pathex=['e:\\netflix\\NFTool'],
|
||||
binaries=[],
|
||||
datas=[],
|
||||
hiddenimports=[],
|
||||
hookspath=[],
|
||||
runtime_hooks=[],
|
||||
excludes=[],
|
||||
win_no_prefer_redirects=False,
|
||||
win_private_assemblies=False,
|
||||
cipher=block_cipher)
|
||||
pyz = PYZ(a.pure, a.zipped_data,
|
||||
cipher=block_cipher)
|
||||
exe = EXE(pyz,
|
||||
a.scripts,
|
||||
exclude_binaries=True,
|
||||
name='netflix',
|
||||
debug=False,
|
||||
strip=False,
|
||||
upx=True,
|
||||
console=True )
|
||||
coll = COLLECT(exe,
|
||||
a.binaries,
|
||||
a.zipfiles,
|
||||
a.datas,
|
||||
strip=False,
|
||||
upx=True,
|
||||
name='netflix')
|
|
@ -0,0 +1,24 @@
|
|||
# -*- coding: iso-8859-1 -*-
|
||||
import wx
|
||||
#import xenforo
|
||||
#provider = wx.SimpleHelpProvider()
|
||||
#wx.HelpProvider_Set(provider)
|
||||
|
||||
import MyFrame
|
||||
|
||||
|
||||
class App(wx.App):
|
||||
def OnInit(self):
|
||||
wx.InitAllImageHandlers()
|
||||
self.main = MyFrame.MyFrame(None)
|
||||
self.main.Show()
|
||||
self.SetTopWindow(self.main)
|
||||
return 1
|
||||
|
||||
def main():
|
||||
#application = App(0)
|
||||
application = App()
|
||||
application.MainLoop()
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
|
@ -0,0 +1 @@
|
|||
52 comment=365978a0d3f430e2e24b025580c24cba75154132
|
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Some files were not shown because too many files have changed in this diff Show More
Ładowanie…
Reference in New Issue