Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
d0aa3f3
new site
alzamer2 Apr 8, 2017
0a842ee
remove the cookies test
alzamer2 Apr 9, 2017
45f1366
forget to fix the url for name
alzamer2 Apr 9, 2017
1f802e8
improve the auto catch
alzamer2 Apr 10, 2017
78bbc26
Update README.md
alzamer2 Apr 10, 2017
76f1bc1
improve usa unblocker option so that it does not overload the site
alzamer2 Apr 10, 2017
5f7437a
add m3u8 auto download
alzamer2 Apr 12, 2017
ddb67f9
fix the Premium+ problem
alzamer2 Apr 12, 2017
8eb4a47
more imprivment on auto cash
alzamer2 Apr 13, 2017
2fe4d7b
autocash optimize
alzamer2 Apr 13, 2017
32776ea
add progress bar for hls download
alzamer2 Apr 14, 2017
3d6059d
trying new fix for auto cash so that it skip rss feed that dont have …
alzamer2 Apr 18, 2017
4ad691c
add function to download
alzamer2 Apr 19, 2017
99bad22
trying to update mkcmerger
alzamer2 Apr 19, 2017
ba16bec
forget to change line
alzamer2 Apr 19, 2017
ec6ca8b
switchthe appending function to the system
alzamer2 Apr 20, 2017
6f80224
fix the download unit
alzamer2 Apr 21, 2017
950eac8
fix download only subtitle problem
alzamer2 Apr 23, 2017
498d1d0
Merge remote-tracking branch 'refs/remotes/jaw20/master'
alzamer2 Apr 23, 2017
7720909
fix long path name
alzamer2 Apr 24, 2017
5da75af
Merge remote-tracking branch 'refs/remotes/origin/Fix_long_path_name'
alzamer2 Apr 24, 2017
bc02b84
Fix long path name
alzamer2 Apr 24, 2017
644269f
change to public folder
alzamer2 Apr 24, 2017
daa8599
Merge remote-tracking branch 'refs/remotes/origin/patch-1'
alzamer2 Apr 24, 2017
853dbed
fix merge problem
alzamer2 Apr 24, 2017
84376b0
add request function as backup
alzamer2 May 7, 2017
86f5d69
Update altfuncs.py
alzamer2 May 27, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ Requires Python modules:
- lxml (https://pypi.python.org/pypi/lxml/3.2.5)
- m3u8 (https://pypi.python.org/pypi/m3u8/)
- cfscrape (https://pypi.python.org/pypi/cfscrape/)
- Node.js is required for (safe) Javascript execution.
Your computer or server may already have it (check with node -v). If not, you can install it with apt-get install
nodejs on Ubuntu and Debian. Otherwise, please read ( https://nodejs.org/en/download/package-manager/ )Node's installation instructions.

crunchy-xml-decoder will try to install PyCrypto and lxml automatically,
if they are missing. m3u8 and crscrape can be installed using PIP.
Expand Down
4 changes: 4 additions & 0 deletions crunchy-xml-decoder.bat
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
@echo off
RD "%PUBLIC%\Crunchyroll-XML-Decoder_link" 1>NUL 2>NUL
mklink /j "%PUBLIC%\Crunchyroll-XML-Decoder_link" %cd% 1>NUL 2>NUL
cd "%PUBLIC%\Crunchyroll-XML-Decoder_link"
:sratre
crunchy-xml-decoder.py %1 %2 %3 %4 %5 %6 %7 %8 %9
RD "%PUBLIC%\Crunchyroll-XML-Decoder_link" 1>NUL 2>NUL
pause

112 changes: 84 additions & 28 deletions crunchy-xml-decoder.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,28 +11,76 @@
import login
import decode
import altfuncs
import re, urllib2
import re
from collections import deque

import time

#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#(autocatch)#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
def autocatch():
import requests, pickle
with open('cookies') as f:
cookies = requests.utils.cookiejar_from_dict(pickle.load(f))
session = requests.session()
session.cookies = cookies
del session.cookies['c_visitor']
data = {'Referer': 'http://crunchyroll.com/', 'Host': 'www.crunchyroll.com',
'User-Agent': 'Mozilla/5.0 Windows NT 6.1; rv:26.0 Gecko/20100101 Firefox/26.0'}
aList = []
print 'indicate the url : '
url=raw_input()
mykey = urllib2.urlopen(url)
take = open("queue_.txt", "w")
#RSS
rescash = session.get(url+'.rss', params=data)
rescash.encoding = 'UTF-8'
mykey = rescash.text
session_num_ = [int(word.replace('season ','')) for word in re.findall('season [0-9]+', mykey)]
if not session_num_ == []:
if not min(session_num_) == 1:
print 'RSS Auto-cash Failed\ntrying Cashing the Site'
#
rescash = session.get(url, params=data)
rescash.encoding = 'UTF-8'
mykey = rescash.text
aList_t = re.findall('<a href="/(.+?)" title=', mykey)
if aList_t == []:
print 'Site Auto-cash Failed\ntrying trying enable Usa unblocker'
session.cookies['sess_id'] = re.split('"',requests.get('https://cr.onestay.moe/getid').text)[5]
rescash = session.get(url, params=data)
rescash.encoding = 'UTF-8'
mykey = rescash.text
aList_t = re.findall('<a href="/(.+?)" title=', mykey)
for i in aList_t:
aList.append('http://www.crunchyroll.com/'+i)
aList_t = re.findall('<link>'+url+'/(.+?)</link>', mykey)
for i in aList_t:
aList.append(url+'/'+i)
if rescash.status_code == 404:
print 'RSS Auto-cash Failed\ntrying Cashing the Site'
#
rescash = session.get(url, params=data)
rescash.encoding = 'UTF-8'
mykey = rescash.text
aList_t = re.findall('<a href="/(.+?)" title=', mykey)
if aList_t == []:
print 'Site Auto-cash Failed\ntrying trying enable Usa unblocker'
session.cookies['sess_id'] = re.split('"',requests.get('https://cr.onestay.moe/getid').text)[5]
rescash = session.get(url, params=data)
rescash.encoding = 'UTF-8'
mykey = rescash.text
aList_t = re.findall('<a href="/(.+?)" title=', mykey)
for i in aList_t:
aList.append('http://www.crunchyroll.com/'+i)

for text in mykey:
match = re.search('<a href="/(.+?)" title=', text)
if match:
print >> take, 'http://www.crunchyroll.com/'+match.group(1)

take.close()

with open('queue_.txt') as f, open('queue.txt', 'w') as fout:
fout.writelines(reversed(f.readlines()))
os.remove('queue_.txt')
if aList != []:
take = open("queue.txt", "w")
take.write(u'#the any line that has hash before the link will be skiped\n')
aList.reverse()
for i in aList:
print >> take, i
take.close()
else:
print 'Site Auto-cash Failed\nPlease Build List Manually'
subprocess.call('notepad.exe '+"queue.txt")
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#(CHECKING)#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
if not os.path.exists("export"):
os.makedirs("export")
Expand All @@ -43,8 +91,9 @@ def autocatch():
iforcesub = False
iforceusa = False
ilocalizecookies = False
ionlymainsub=False
def defaultsettings(vvquality, vlang1, vlang2, vforcesub, vforceusa, vlocalizecookies, onlymainsub):
ionlymainsub = False
iconnection_n_ = 1
def defaultsettings(vvquality, vlang1, vlang2, vforcesub, vforceusa, vlocalizecookies, onlymainsub, vconnection_n_):
dsettings='''[SETTINGS]
# Set this to the preferred quality. Possible values are: "android" (hard-subbed), "360p", "480p", "720p", "1080p", or "highest" for highest available.
# Note that any quality higher than 360p still requires premium, unless it's available that way for free (some first episodes).
Expand All @@ -63,11 +112,13 @@ def defaultsettings(vvquality, vlang1, vlang2, vforcesub, vforceusa, vlocalizeco
localizecookies = '''+str(vlocalizecookies)+'''
# Set this if you only want to mux one subtitle only (this so make easy for some devices like TVs to play subtitle)
onlymainsub='''+str(onlymainsub)+'''
# this option to increase the Number of the connection
connection_n_='''+str(vconnection_n_)+'''
'''
open('.\\settings.ini', 'w').write(dsettings.encode('utf-8'))

if not os.path.exists(".\\settings.ini"):
defaultsettings(iquality, ilang1, ilang2, iforcesub, iforceusa, ilocalizecookies, ionlymainsub)
defaultsettings(iquality, ilang1, ilang2, iforcesub, iforceusa, ilocalizecookies, ionlymainsub, iconnection_n_)

if not os.path.exists(".\\cookies"):
if raw_input(u'Do you have an account [Y/N]?').lower() == 'y':
Expand Down Expand Up @@ -160,7 +211,7 @@ def Languages_(Varname_):
Languages_()

def videoquality_():
slang1, slang2, sforcesub, sforceusa, slocalizecookies, vquality, vonlymainsub = altfuncs.config()
slang1, slang2, sforcesub, sforceusa, slocalizecookies, vquality, vonlymainsub, vconnection_n_ = altfuncs.config()
seleccion = 5
print '''Set This To The Preferred Quality:
0.- android (hard-subbed)
Expand Down Expand Up @@ -193,7 +244,7 @@ def videoquality_():
print "ERROR: Invalid option."
videoquality_()
def settings_():
slang1, slang2, sforcesub, sforceusa, slocalizecookies, vquality, vonlymainsub = altfuncs.config()
slang1, slang2, sforcesub, sforceusa, slocalizecookies, vquality, vonlymainsub, vconnection_n_ = altfuncs.config()
slang1 = {u'Español (Espana)' : 'Espanol_Espana', u'Français (France)' : 'Francais', u'Português (Brasil)' : 'Portugues',
u'English' : 'English', u'Español' : 'Espanol', u'Türkçe' : 'Turkce', u'Italiano' : 'Italiano',
u'العربية' : 'Arabic', u'Deutsch' : 'Deutsch'}[slang1]
Expand All @@ -218,7 +269,8 @@ def settings_():
5.- USA Proxy = '''+str(sforceusa)+''' #use a US session ID
6.- Localize cookies = '''+str(slocalizecookies)+''' #Localize the cookies (Experiment)
7.- Only One Subtitle = '''+str(vonlymainsub)+''' #Only download Primary Language
8.- Restore Default Settings
8.- Change the Number of The Download Connection = '''+str(vconnection_n_)+'''
9.- Restore Default Settings
'''
try:
seleccion = int(input("> "))
Expand All @@ -227,46 +279,50 @@ def settings_():
settings_()
if seleccion == 1 :
vquality = videoquality_()
defaultsettings(vquality, slang1, slang2, sforcesub, sforceusa, slocalizecookies, vonlymainsub)
defaultsettings(vquality, slang1, slang2, sforcesub, sforceusa, slocalizecookies, vonlymainsub, vconnection_n_)
settings_()
elif seleccion == 2 :
slang1 = Languages_('slang1')
defaultsettings(vquality, slang1, slang2, sforcesub, sforceusa, slocalizecookies, vonlymainsub)
defaultsettings(vquality, slang1, slang2, sforcesub, sforceusa, slocalizecookies, vonlymainsub, vconnection_n_)
settings_()
elif seleccion == 3 :
slang2 = Languages_('slang2')
defaultsettings(vquality, slang1, slang2, sforcesub, sforceusa, slocalizecookies, vonlymainsub)
defaultsettings(vquality, slang1, slang2, sforcesub, sforceusa, slocalizecookies, vonlymainsub, vconnection_n_)
settings_()
elif seleccion == 4 :
if sforcesub:
sforcesub = False
else:
sforcesub = True
defaultsettings(vquality, slang1, slang2, sforcesub, sforceusa, slocalizecookies, vonlymainsub)
defaultsettings(vquality, slang1, slang2, sforcesub, sforceusa, slocalizecookies, vonlymainsub, vconnection_n_)
settings_()
elif seleccion == 5 :
if sforceusa:
sforceusa = False
else:
sforceusa = True
defaultsettings(vquality, slang1, slang2, sforcesub, sforceusa, slocalizecookies, vonlymainsub)
defaultsettings(vquality, slang1, slang2, sforcesub, sforceusa, slocalizecookies, vonlymainsub, vconnection_n_)
settings_()
elif seleccion == 6 :
if slocalizecookies:
slocalizecookies = False
else:
slocalizecookies = True
defaultsettings(vquality, slang1, slang2, sforcesub, sforceusa, slocalizecookies, vonlymainsub)
defaultsettings(vquality, slang1, slang2, sforcesub, sforceusa, slocalizecookies, vonlymainsub, vconnection_n_)
settings_()
elif seleccion == 7 :
if vonlymainsub:
vonlymainsub = False
else:
vonlymainsub = True
defaultsettings(vquality, slang1, slang2, sforcesub, sforceusa, slocalizecookies, vonlymainsub)
defaultsettings(vquality, slang1, slang2, sforcesub, sforceusa, slocalizecookies, vonlymainsub, vconnection_n_)
settings_()
elif seleccion == 8 :
defaultsettings(iquality, ilang1, ilang2, iforcesub, iforceusa, ilocalizecookies, ionlymainsub)
vconnection_n_ = raw_input(u'Please Input The Download Connection Nymber: ')
defaultsettings(vquality, slang1, slang2, sforcesub, sforceusa, slocalizecookies, vonlymainsub, vconnection_n_)
settings_()
elif seleccion == 9 :
defaultsettings(iquality, ilang1, ilang2, iforcesub, iforceusa, ilocalizecookies, ionlymainsub, iconnection_n_)
settings_()
elif seleccion == 0 :
pass
Expand Down Expand Up @@ -359,7 +415,7 @@ def makechoise():
decode.decode(raw_input('Please enter Crunchyroll video URL:\n'))
sys.exit()
if arg.default_settings:
defaultsettings(iquality, ilang1, ilang2, iforcesub, iforceusa, ilocalizecookies)
defaultsettings(iquality, ilang1, ilang2, iforcesub, iforceusa, ilocalizecookies, ionlymainsub, iconnection_n_)
sys.exit()
if arg.queue:
queueu(arg.queue)
Expand Down
21 changes: 15 additions & 6 deletions crunchy-xml-decoder/altfuncs.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ def config():
global localizecookies
localizecookies = configr.getboolean('SETTINGS', 'localizecookies')
onlymainsub = configr.getboolean('SETTINGS', 'onlymainsub')
return [lang, lang2, forcesub, forceusa, localizecookies, quality, onlymainsub]
connection_n_ = int(configr.get('SETTINGS', 'connection_n_'))
return [lang, lang2, forcesub, forceusa, localizecookies, quality, onlymainsub, connection_n_]


#def playerrev(url):
Expand Down Expand Up @@ -67,10 +68,12 @@ def gethtml(url):
u'العربية' : 'arME' , u'Deutsch' : 'deDE'}[lang]
if forceusa:
try:
session.cookies['sess_id'] = requests.get('http://www.crunblocker.com/sess_id.php').text
session.cookies['sess_id'] = requests.get('http://rssfeedfilter.netne.net/').json()['sessionId'].encode('ascii', 'ignore')
#print 'I recommend to re-login so we don\'t overload crunchyroll unblocker'
except:
sleep(10) # sleep so we don't overload crunblocker
session.cookies['sess_id'] = requests.get('http://www.crunblocker.com/sess_id.php').text
session.cookies['sess_id'] = requests.get('http://crunchyrollus.netne.net/').json()['sessionId'].encode('ascii', 'ignore')
#print 'I recommend to re-login so we don\'t overload crunchyroll unblocker'
parts = urlparse.urlsplit(url)
if not parts.scheme or not parts.netloc:
print 'Apparently not a URL'
Expand Down Expand Up @@ -103,15 +106,21 @@ def getxml(req, med_id):
u'العربية' : 'arME' , u'Deutsch' : 'deDE'}[lang]
if forceusa:
try:
session.cookies['sess_id'] = requests.get('http://www.crunblocker.com/sess_id.php').text
session.cookies['sess_id'] = session.cookies['usa_sess_id']
except:
sleep(10) # sleep so we don't overload crunblocker
session.cookies['sess_id'] = requests.get('http://www.crunblocker.com/sess_id.php').text
try:
session.cookies['sess_id'] = requests.get('http://rssfeedfilter.netne.net/').json()['sessionId'].encode('ascii', 'ignore')
#print 'I recommend to re-login so we don\'t overload crunchyroll unblocker'
except:
sleep(10) # sleep so we don't overload crunblocker
session.cookies['sess_id'] = requests.get('http://crunchyrollus.netne.net/').json()['sessionId'].encode('ascii', 'ignore')
#print 'I recommend to re-login so we don\'t overload crunchyroll unblocker'
headers = {'Referer': 'http://static.ak.crunchyroll.com/versioned_assets/ChromelessPlayerApp.17821a0e.swf',
'Host': 'www.crunchyroll.com', 'Content-type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0)'}
res = session.post(url, params=payload, headers=headers)
res.encoding = 'UTF-8'
#print session.cookies
return res.text


Expand Down
2 changes: 1 addition & 1 deletion crunchy-xml-decoder/decode.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def decode(page_url):
if page_url == '':
page_url = raw_input('Please enter Crunchyroll video URL:\n')

lang1, lang2, forcesub, forceusa, localizecookies, vquality, onlymainsub = altfuncs.config()
lang1, lang2, forcesub, forceusa, localizecookies, vquality, onlymainsub, connection_n_ = altfuncs.config()
#player_revision = altfuncs.playerrev(page_url)
html = altfuncs.gethtml(page_url)

Expand Down
14 changes: 13 additions & 1 deletion crunchy-xml-decoder/functtest.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,24 @@ def unzip_(filename_,out):
except ImportError:
print 'Installing Cfscrape...',
try:
if python_bit_=="32 bit" or python_bit_=="64 bit":
#if python_bit_=="32 bit" or python_bit_=="64 bit":
pip.main(['install', '--quiet', 'cfscrape'])
print "Installed"
except KeyError:
print "Something Has Gone Wrong While Retrieving Cfscrape link\nPlease Download Cfscrape Manually"

try:
import m3u8
print('m3u8 installed')
except ImportError:
print 'Installing m3u8...',
try:
#if python_bit_=="32 bit" or python_bit_=="64 bit":
pip.main(['install', '--quiet', 'm3u8'])
print "Installed"
except KeyError:
print "Something Has Gone Wrong While Retrieving m3u8 link\nPlease Download m3u8 Manually"

if Crypto_link_ or lxml_link_:
if not os.path.exists("temp"):
os.makedirs("temp")
Expand Down
Loading