openload.co extractor not working #8572

Closed
opened 2026-02-21 03:14:08 -05:00 by deekerman · 326 comments
Owner

Originally created by @byteholding on GitHub (Aug 22, 2016).

youtube-dl --get-url --verbose https://openload.co/embed/kUEfGclsU9o/
[debug] System config: []
[debug] User config: []
[debug] Command-line args: [u'--get-url', u'--verbose', u'https://openload.co/embed/kUEfGclsU9o/']
[debug] Encodings: locale UTF-8, fs UTF-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2016.08.22
[debug] Python version 2.6.6 - Linux-2.6.32-642.1.1.el6.x86_64-x86_64-with-centos-6.8-Final
[debug] exe versions: ffmpeg 0.6.5, ffprobe 0.6.5
[debug] Proxy map: {}
ERROR: Unable to extract link image; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type youtube-dl -U to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 691, in extract_info
ie_result = ie.extract(url)
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 347, in extract
return self._real_extract(url)
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 62, in _real_extract
r'<img[^>]+id="linkimg"[^>]+src="([^"]+)"', webpage, 'link image')
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 650, in _search_regex
raise RegexNotFoundError('Unable to extract %s' % _name)
RegexNotFoundError: Unable to extract link image; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type youtube-dl -U to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

Originally created by @byteholding on GitHub (Aug 22, 2016). youtube-dl --get-url --verbose https://openload.co/embed/kUEfGclsU9o/ [debug] System config: [] [debug] User config: [] [debug] Command-line args: [u'--get-url', u'--verbose', u'https://openload.co/embed/kUEfGclsU9o/'] [debug] Encodings: locale UTF-8, fs UTF-8, out UTF-8, pref UTF-8 [debug] youtube-dl version 2016.08.22 [debug] Python version 2.6.6 - Linux-2.6.32-642.1.1.el6.x86_64-x86_64-with-centos-6.8-Final [debug] exe versions: ffmpeg 0.6.5, ffprobe 0.6.5 [debug] Proxy map: {} ERROR: Unable to extract link image; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type youtube-dl -U to update. Be sure to call youtube-dl with the --verbose flag and include its complete output. Traceback (most recent call last): File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 691, in extract_info ie_result = ie.extract(url) File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 347, in extract return self._real_extract(url) File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 62, in _real_extract r'<img[^>]+id="linkimg"[^>]+src="([^"]+)"', webpage, 'link image') File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 650, in _search_regex raise RegexNotFoundError('Unable to extract %s' % _name) RegexNotFoundError: Unable to extract link image; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type youtube-dl -U to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
deekerman 2026-02-21 03:14:08 -05:00
  • closed this issue
  • added the
    broken-IE
    label
Author
Owner

@yokrysty commented on GitHub (Aug 23, 2016):

they've changed the video link obfuscation to a very simple method, lol

openload video link extraction script
http://pastebin.com/PJ4SFqBM

@yokrysty commented on GitHub (Aug 23, 2016): they've changed the video link obfuscation to a very simple method, lol openload video link extraction script http://pastebin.com/PJ4SFqBM
Author
Owner

@yan12125 commented on GitHub (Aug 23, 2016):

A nice hit! @yokrysty Did you write this script? If so could you declare this script as Public Domain or UNLICENSE so that it can be used in youtube-dl?

@yan12125 commented on GitHub (Aug 23, 2016): A nice hit! @yokrysty Did you write this script? If so could you declare this script as Public Domain or UNLICENSE so that it can be used in youtube-dl?
Author
Owner

@yokrysty commented on GitHub (Aug 23, 2016):

yes i wrote it now in 5 min :), yes you can use it

@yokrysty commented on GitHub (Aug 23, 2016): yes i wrote it now in 5 min :), yes you can use it
Author
Owner

@yokrysty commented on GitHub (Aug 23, 2016):

before decrypting the data make sure you replace all the html entities
i updated the script with html replacing

@yokrysty commented on GitHub (Aug 23, 2016): before decrypting the data make sure you replace all the html entities i updated the script with html replacing
Author
Owner

@yan12125 commented on GitHub (Aug 23, 2016):

Many thanks @yokrysty Would you like to be listed on AUTHORS for the openload algorithm?

@yan12125 commented on GitHub (Aug 23, 2016): Many thanks @yokrysty Would you like to be listed on [AUTHORS](https://github.com/rg3/youtube-dl/blob/master/AUTHORS) for the openload algorithm?
Author
Owner

@yokrysty commented on GitHub (Aug 23, 2016):

i don't mind :)

@yokrysty commented on GitHub (Aug 23, 2016): i don't mind :)
Author
Owner

@yan12125 commented on GitHub (Aug 23, 2016):

OK Anyway thanks for the code :)

@yan12125 commented on GitHub (Aug 23, 2016): OK Anyway thanks for the code :)
Author
Owner

@byteholding commented on GitHub (Aug 23, 2016):

Thank you, too.
Could anyone explain me, how i change the new code to my exist youtube-dl setups on my servers. The release 2016.08.22 didn't have the updated code.

@byteholding commented on GitHub (Aug 23, 2016): Thank you, too. Could anyone explain me, how i change the new code to my exist youtube-dl setups on my servers. The release 2016.08.22 didn't have the updated code.
Author
Owner

@yan12125 commented on GitHub (Aug 23, 2016):

Before a new version is released, you can download https://github.com/rg3/youtube-dl/archive/master.zip and unzip it.

@yan12125 commented on GitHub (Aug 23, 2016): Before a new version is released, you can download https://github.com/rg3/youtube-dl/archive/master.zip and unzip it.
Author
Owner

@byteholding commented on GitHub (Aug 23, 2016):

Amazing! Thank you very much ;)

@byteholding commented on GitHub (Aug 23, 2016): Amazing! Thank you very much ;)
Author
Owner

@ghost commented on GitHub (Aug 28, 2016):

we're getting pigeons again

@ghost commented on GitHub (Aug 28, 2016): we're getting pigeons again
Author
Owner

@yan12125 commented on GitHub (Aug 28, 2016):

Confirmed.

@yan12125 commented on GitHub (Aug 28, 2016): Confirmed.
Author
Owner

@yokrysty commented on GitHub (Aug 28, 2016):

@yan12125 the change is not major: at the last char code in the array add 2 then convert it to char
http://pastebin.com/xXZv59Jc

@yokrysty commented on GitHub (Aug 28, 2016): @yan12125 the change is not major: at the last char code in the array add 2 then convert it to char http://pastebin.com/xXZv59Jc
Author
Owner

@yan12125 commented on GitHub (Aug 28, 2016):

Many thanks again! Updated.

@yan12125 commented on GitHub (Aug 28, 2016): Many thanks again! Updated.
Author
Owner

@ghost commented on GitHub (Aug 28, 2016):

They updated their site again. Add 1 instead of 2. Maybe this gets changed throughout the day?

@ghost commented on GitHub (Aug 28, 2016): They updated their site again. Add 1 instead of 2. Maybe this gets changed throughout the day?
Author
Owner

@yan12125 commented on GitHub (Aug 28, 2016):

Or, they are watching this repo today. It's working two hours ago.

@yan12125 commented on GitHub (Aug 28, 2016): Or, they are watching this repo today. It's working two hours ago.
Author
Owner

@yokrysty commented on GitHub (Aug 28, 2016):

then do it like this
oldown.py http://pastebin.com/zW4sGyZd
aa_decode.py http://pastebin.com/jFtB8dhi

:)

@yokrysty commented on GitHub (Aug 28, 2016): then do it like this oldown.py http://pastebin.com/zW4sGyZd aa_decode.py http://pastebin.com/jFtB8dhi :)
Author
Owner

@yan12125 commented on GitHub (Aug 29, 2016):

Just tried it. The latest commit is still working. Doesn't it work for you? @yokrysty

@yan12125 commented on GitHub (Aug 29, 2016): Just tried it. The latest commit is still working. Doesn't it work for you? @yokrysty
Author
Owner

@e2iplayer commented on GitHub (Aug 29, 2016):

This is not working because the number added to last char code is variable.
At now it is 1 not 2.

@e2iplayer commented on GitHub (Aug 29, 2016): This is not working because the number added to last char code is variable. At now it is 1 not 2.
Author
Owner

@yan12125 commented on GitHub (Aug 29, 2016):

I've changed 2 to 1 in 98908bc, and it's still working. Feel free to leave a comment if its algorithm is changed again.

@yan12125 commented on GitHub (Aug 29, 2016): I've changed 2 to 1 in 98908bc, and it's still working. Feel free to leave a comment if its algorithm is changed again.
Author
Owner

@yokrysty commented on GitHub (Aug 29, 2016):

@yan12125 use my method from above where I read the number that needs to be added from the javascript

@yokrysty commented on GitHub (Aug 29, 2016): @yan12125 use my method from above where I read the number that needs to be added from the javascript
Author
Owner

@yan12125 commented on GitHub (Aug 29, 2016):

I see. Will integrate it the next time var_val is changed.

@yan12125 commented on GitHub (Aug 29, 2016): I see. Will integrate it the next time `var_val` is changed.
Author
Owner

@ghost commented on GitHub (Aug 29, 2016):

seems that they're now migrating to the canvas method, but on a different host.

@ghost commented on GitHub (Aug 29, 2016): seems that they're now migrating to the canvas method, but on a different host.
Author
Owner

@ghost commented on GitHub (Aug 29, 2016):

Its a 3 now.

@ghost commented on GitHub (Aug 29, 2016): Its a 3 now.
Author
Owner

@byteholding commented on GitHub (Aug 30, 2016):

yes, its a 3!

@byteholding commented on GitHub (Aug 30, 2016): yes, its a 3!
Author
Owner

@ghost commented on GitHub (Aug 30, 2016):

seems like @yokrysty's method might be a better plan since it reads the var_val, however using it's own list of emoji's to decrypt might be less robust since a small edit to the list would break the script.

@ghost commented on GitHub (Aug 30, 2016): seems like @yokrysty's method might be a better plan since it reads the var_val, however using it's own list of emoji's to decrypt might be less robust since a small edit to the list would break the script.
Author
Owner

@yokrysty commented on GitHub (Aug 30, 2016):

check out this method http://pastebin.com/QZRcczrN xd

dependencies:
pip install pyside
pip install ghost.py

@yokrysty commented on GitHub (Aug 30, 2016): check out this method http://pastebin.com/QZRcczrN xd dependencies: pip install pyside pip install ghost.py
Author
Owner

@NitroXenon commented on GitHub (Sep 6, 2016):

@yokrysty I think it's the best approach since Openload updates their obfuscate algorithm frequently.

@NitroXenon commented on GitHub (Sep 6, 2016): @yokrysty I think it's the best approach since Openload updates their obfuscate algorithm frequently.
Author
Owner

@ghost commented on GitHub (Sep 6, 2016):

@NitroXenon maybe if we could do this without adding two dependencies to youtube-dl.

@ghost commented on GitHub (Sep 6, 2016): @NitroXenon maybe if we could do this without adding two dependencies to youtube-dl.
Author
Owner

@NitroXenon commented on GitHub (Sep 6, 2016):

@bigmittens Alright. Take a look at this. This is working currently

https://github.com/tknorris/script.module.urlresolver/blob/master/lib/urlresolver/plugins/ol_gmu.py

@NitroXenon commented on GitHub (Sep 6, 2016): @bigmittens Alright. Take a look at this. This is working currently https://github.com/tknorris/script.module.urlresolver/blob/master/lib/urlresolver/plugins/ol_gmu.py
Author
Owner

@NitroXenon commented on GitHub (Sep 6, 2016):

But it uses GPLv3

@NitroXenon commented on GitHub (Sep 6, 2016): But it uses GPLv3
Author
Owner

@yokrysty commented on GitHub (Sep 6, 2016):

@NitroXenon its basically my method that i posted 9 days ago, scroll up

@yokrysty commented on GitHub (Sep 6, 2016): @NitroXenon its basically my method that i posted 9 days ago, scroll up
Author
Owner

@ghost commented on GitHub (Sep 6, 2016):

@gdkchan please help us 😩

@ghost commented on GitHub (Sep 6, 2016): @gdkchan please help us 😩
Author
Owner

@yan12125 commented on GitHub (Sep 7, 2016):

@yokrysty http://pastebin.com/jFtB8dhi and http://pastebin.com/zW4sGyZd now gives penguins.

@yan12125 commented on GitHub (Sep 7, 2016): @yokrysty http://pastebin.com/jFtB8dhi and http://pastebin.com/zW4sGyZd now gives penguins.
Author
Owner

@gdkchan commented on GitHub (Sep 7, 2016):

@bigmittens Help with what? Well they are not using AAEncode on the obfuscation of the main HiddenURL decoding JavaScript function, that's why the script yokristy made are all broken (including the last one that tries to decode the AAEncode, but not the one that uses an entire browser to get the link lol). Other than this the code is the same, and they are still adding 3 to the last character.

They seems to be using a moving target approach now, but the method was pretty much the same for one week now, so I think it's feasible to just keep updating the extractor when they update it. The only other solution that would require less frequen fixes would be having a entire javascript engine running the link decoding functions.

@gdkchan commented on GitHub (Sep 7, 2016): @bigmittens Help with what? Well they are not using AAEncode on the obfuscation of the main HiddenURL decoding JavaScript function, that's why the script yokristy made are all broken (including the last one that tries to decode the AAEncode, but not the one that uses an entire browser to get the link lol). Other than this the code is the same, and they are still adding 3 to the last character. They seems to be using a moving target approach now, but the method was pretty much the same for one week now, so I think it's feasible to just keep updating the extractor when they update it. The only other solution that would require less frequen fixes would be having a entire javascript engine running the link decoding functions.
Author
Owner

@yokrysty commented on GitHub (Sep 7, 2016):

now they use jjencode (the js above the AAEncoded js)
here is the script decoded

@yokrysty commented on GitHub (Sep 7, 2016): now they use jjencode (the js above the AAEncoded js) [here](https://hackvertor.co.uk/hvurl/49#PEBkX29jdGFsXzE+PEBkX2pqZW5jb2RlXzA+aj1+W107aj17X19fOisraiwkJCQkOighW10rIiIpW2pdLF9fJDorK2osJF8kXzooIVtdKyIiKVtqXSxfJF86KytqLCRfJCQ6KHt9KyIiKVtqXSwkJF8kOihqW2pdKyIiKVtqXSxfJCQ6KytqLCQkJF86KCEiIisiIilbal0sJF9fOisraiwkXyQ6KytqLCQkX186KHt9KyIiKVtqXSwkJF86KytqLCQkJDorK2osJF9fXzorK2osJF9fJDorK2p9O2ouJF89KGouJF89aisiIilbai4kXyRdKyhqLl8kPWouJF9bai5fXyRdKSsoai4kJD0oai4kKyIiKVtqLl9fJF0pKygoIWopKyIiKVtqLl8kJF0rKGouX189ai4kX1tqLiQkX10pKyhqLiQ9KCEiIisiIilbai5fXyRdKSsoai5fPSghIiIrIiIpW2ouXyRfXSkrai4kX1tqLiRfJF0rai5fXytqLl8kK2ouJDtqLiQkPWouJCsoISIiKyIiKVtqLl8kJF0rai5fXytqLl8rai4kK2ouJCQ7ai4kPShqLl9fXylbai4kX11bai4kX107ai4kKGouJChqLiQkKyJcIiIrIiQoIitqLiQkXyQrai5fJCtqLiQkX18rai5fKyJcXCIrai5fXyQrai4kXyQrai4kXyQrai4kJCRfKyJcXCIrai5fXyQrai4kXyQrai4kJF8rai5fXysiKS5cXCIrai5fXyQrai4kJF8rai5fJF8rai4kJCRfK2ouJF8kXytqLiQkXyQrIlxcIitqLl9fJCtqLiQkJCtqLl9fJCsiKCIrai4kJCQkK2ouXysiXFwiK2ouX18kK2ouJF8kK2ouJCRfK2ouJCRfXytqLl9fKyJcXCIrai5fXyQrai4kXyQrai5fXyQrai5fJCsiXFwiK2ouX18kK2ouJF8kK2ouJCRfKyIoKVxcIitqLiRfXytqLl9fXysie1xcIitqLl9fJCtqLiRfJCsiXFwiK2ouX18kK2ouXyRfKyJcXCIrai5fXyQrai5fXyQrIlxcIitqLl9fJCtqLiQkXytqLiQkXytqLiRfJF8rIlxcIitqLl9fJCtqLiQkXytqLl8kXysiXFwiK2ouJF9fK2ouX19fKyJcXCIrai5fXyQrai4kJCQrai5fX18rIlxcIitqLiRfXytqLl9fXysiPVxcIitqLiRfXytqLl9fXysiJChcXFwiI1xcIitqLl9fJCtqLiRfJCtqLl9fXysiXFwiK2ouX18kK2ouJF8kK2ouX18kK2ouJCRfJCtqLiQkXyQrai4kJCRfKyJcXCIrai5fXyQrai4kXyQrai4kJF8rai5fKyJcXCIrai5fXyQrai4kJF8rai5fJF8rKCFbXSsiIilbai5fJF9dKyJcXFwiKS4iK2ouX18rai4kJCRfKyJcXCIrai5fXyQrai4kJCQrai5fX18rai5fXysiKCk7XFwiK2ouX18kK2ouJF8kKyJcXCIrai5fXyQrai5fJF8rIlxcIitqLl9fJCtqLl9fJCsiXFwiK2ouX18kK2ouJCRfK2ouJCRfK2ouJF8kXysiXFwiK2ouX18kK2ouJCRfK2ouXyRfKyJcXCIrai4kX18rai5fX18rIlxcIitqLl9fJCtqLiQkXytqLl8kJCsiPVtdOyIrai4kJCQkK2ouXyQrIlxcIitqLl9fJCtqLiQkXytqLl8kXysiKFxcIitqLl9fJCtqLiQkXytqLiQkXytqLiRfJF8rIlxcIitqLl9fJCtqLiQkXytqLl8kXysiXFwiK2ouJF9fK2ouX19fKyJcXCIrai5fXyQrai4kXyQrai5fXyQrIj0iK2ouX19fKyI7XFwiK2ouX18kK2ouJF8kK2ouX18kKyI8XFwiK2ouX18kK2ouJCQkK2ouX19fKyIuIisoIVtdKyIiKVtqLl8kX10rai4kJCRfKyJcXCIrai5fXyQrai4kXyQrai4kJF8rIlxcIitqLl9fJCtqLiRfXytqLiQkJCtqLl9fKyJcXCIrai5fXyQrai4kXyQrai5fX18rIjtcXCIrai5fXyQrai4kXyQrai5fXyQrIisrKXtcXCIrai5fXyQrai4kJF8rai4kJF8rai4kXyRfKyJcXCIrai5fXyQrai4kJF8rai5fJF8rIlxcIitqLiRfXytqLl9fXysiXFwiK2ouX18kK2ouJF8kK2ouXyRfKyI9XFwiK2ouX18kK2ouJCQkK2ouX19fKyIuIitqLiQkX18rIlxcIitqLl9fJCtqLiRfJCtqLl9fXytqLiRfJF8rIlxcIitqLl9fJCtqLiQkXytqLl8kXysiXFwiK2ouX18kK2ouX19fK2ouXyQkK2ouXyQrai4kJF8kK2ouJCQkXysiXFwiK2ouX18kK2ouX19fK2ouX18kK2ouX18rIihcXCIrai5fXyQrai4kXyQrai5fXyQrIik7XFwiK2ouX18kK2ouJF8kK2ouX18kK2ouJCQkJCsiKChcXCIrai5fXyQrai4kXyQrai5fJF8rIj49IitqLl8kJCtqLl8kJCsiKSYmKFxcIitqLl9fJCtqLiRfJCtqLl8kXysiPD0iK2ouX18kK2ouXyRfK2ouJCRfKyIpKXtcXCIrai5fXyQrai4kJF8rai5fJCQrIltcXCIrai5fXyQrai4kXyQrai5fXyQrIl09XFwiK2ouX18kK2ouXyRfK2ouXyQkK2ouX18rIlxcIitqLl9fJCtqLiQkXytqLl8kXysiXFwiK2ouX18kK2ouJF8kK2ouX18kKyJcXCIrai5fXyQrai4kXyQrai4kJF8rIlxcIitqLl9fJCtqLiRfXytqLiQkJCsiLiIrai4kJCQkKyJcXCIrai5fXyQrai4kJF8rai5fJF8rai5fJCsiXFwiK2ouX18kK2ouJF8kK2ouJF8kKyJcXCIrai5fXyQrai5fX18rai5fJCQrIlxcIitqLl9fJCtqLiRfJCtqLl9fXytqLiRfJF8rIlxcIitqLl9fJCtqLiQkXytqLl8kXysiXFwiK2ouX18kK2ouX19fK2ouXyQkK2ouXyQrai4kJF8kK2ouJCQkXysiKCIrai5fJCQrai5fJCQrIisoKFxcIitqLl9fJCtqLiRfJCtqLl8kXysiKyIrai5fXyQrai4kX18rIiklIitqLiRfXyQrai4kX18rIikpO30iK2ouJCQkXysoIVtdKyIiKVtqLl8kX10rIlxcIitqLl9fJCtqLiQkXytqLl8kJCtqLiQkJF8rIntcXCIrai5fXyQrai4kJF8rai5fJCQrIltcXCIrai5fXyQrai4kXyQrai5fXyQrIl09XFwiK2ouX18kK2ouXyRfK2ouXyQkK2ouX18rIlxcIitqLl9fJCtqLiQkXytqLl8kXysiXFwiK2ouX18kK2ouJF8kK2ouX18kKyJcXCIrai5fXyQrai4kXyQrai4kJF8rIlxcIitqLl9fJCtqLiRfXytqLiQkJCsiLiIrai4kJCQkKyJcXCIrai5fXyQrai4kJF8rai5fJF8rai5fJCsiXFwiK2ouX18kK2ouJF8kK2ouJF8kKyJcXCIrai5fXyQrai5fX18rai5fJCQrIlxcIitqLl9fJCtqLiRfJCtqLl9fXytqLiRfJF8rIlxcIitqLl9fJCtqLiQkXytqLl8kXysiXFwiK2ouX18kK2ouX19fK2ouXyQkK2ouXyQrai4kJF8kK2ouJCQkXysiKFxcIitqLl9fJCtqLiRfJCtqLl8kXysiKTt9fVxcIitqLl9fJCtqLiRfJCsiXFwiK2ouX18kK2ouXyRfKyJcXCIrai5fXyQrai5fXyQrIlxcIitqLl9fJCtqLiQkXytqLiQkXytqLiRfJF8rIlxcIitqLl9fJCtqLiQkXytqLl8kXysiXFwiK2ouJF9fK2ouX19fK2ouX18rIlxcIitqLl9fJCtqLiRfJCtqLiRfJCsiXFwiK2ouX18kK2ouJCRfK2ouX19fKyI9XFwiK2ouX18kK2ouJCRfK2ouXyQkKyIuXFwiK2ouX18kK2ouJF8kK2ouXyRfK2ouXyQrIlxcIitqLl9fJCtqLiRfJCtqLl9fJCsiXFwiK2ouX18kK2ouJF8kK2ouJCRfKyIoXFxcIlxcXCIpO1xcIitqLl9fJCtqLiRfJCsiXFwiK2ouX18kK2ouXyRfKyJcXCIrai5fXyQrai5fXyQrIlxcIitqLl9fJCtqLiQkXytqLiQkXytqLiRfJF8rIlxcIitqLl9fJCtqLiQkXytqLl8kXysiXFwiK2ouJF9fK2ouX19fKyJcXCIrai5fXyQrai4kJF8rai5fJCQrai5fXysiXFwiK2ouX18kK2ouJCRfK2ouXyRfKyJcXCIrai4kX18rai5fX18rIj1cXCIrai4kX18rai5fX18rai5fXysiXFwiK2ouX18kK2ouJF8kK2ouJF8kKyJcXCIrai5fXyQrai4kJF8rai5fX18rIi5cXCIrai5fXyQrai4kJF8rai5fJCQrai5fK2ouJF8kJCsiXFwiK2ouX18kK2ouJCRfK2ouXyQkK2ouX18rIlxcIitqLl9fJCtqLiQkXytqLl8kXysiXFwiK2ouX18kK2ouJF8kK2ouX18kKyJcXCIrai5fXyQrai4kXyQrai4kJF8rIlxcIitqLl9fJCtqLiRfXytqLiQkJCsiKCIrai5fX18rIixcXCIrai4kX18rai5fX18rai5fXysiXFwiK2ouX18kK2ouJF8kK2ouJF8kKyJcXCIrai5fXyQrai4kJF8rai5fX18rIi4iKyghW10rIiIpW2ouXyRfXStqLiQkJF8rIlxcIitqLl9fJCtqLiRfJCtqLiQkXysiXFwiK2ouX18kK2ouJF9fK2ouJCQkK2ouX18rIlxcIitqLl9fJCtqLiRfJCtqLl9fXysiXFwiK2ouJF9fK2ouX19fKyItXFwiK2ouJF9fK2ouX19fK2ouX18kKyIpXFwiK2ouJF9fK2ouX19fKyIrXFwiK2ouJF9fK2ouX19fKyJcXCIrai5fXyQrai5fJF8rai5fJCQrai5fXysiXFwiK2ouX18kK2ouJCRfK2ouXyRfKyJcXCIrai5fXyQrai4kXyQrai5fXyQrIlxcIitqLl9fJCtqLiRfJCtqLiQkXysiXFwiK2ouX18kK2ouJF9fK2ouJCQkKyIuIitqLiQkJCQrIlxcIitqLl9fJCtqLiQkXytqLl8kXytqLl8kKyJcXCIrai5fXyQrai4kXyQrai4kXyQrIlxcIitqLl9fJCtqLl9fXytqLl8kJCsiXFwiK2ouX18kK2ouJF8kK2ouX19fK2ouJF8kXysiXFwiK2ouX18kK2ouJCRfK2ouXyRfKyJcXCIrai5fXyQrai5fX18rai5fJCQrai5fJCtqLiQkXyQrai4kJCRfKyIoIitqLl9fKyJcXCIrai5fXyQrai4kXyQrai4kXyQrIlxcIitqLl9fJCtqLiQkXytqLl9fXysiLlxcIitqLl9fJCtqLiQkXytqLl8kJCsoIVtdKyIiKVtqLl8kX10rIlxcIitqLl9fJCtqLiRfJCtqLl9fJCtqLiQkX18rai4kJCRfKyIoLSIrai5fXyQrIikuIitqLiQkX18rIlxcIitqLl9fJCtqLiRfJCtqLl9fXytqLiRfJF8rIlxcIitqLl9fJCtqLiQkXytqLl8kXysiXFwiK2ouX18kK2ouX19fK2ouXyQkK2ouXyQrai4kJF8kK2ouJCQkXysiXFwiK2ouX18kK2ouX19fK2ouX18kK2ouX18rIigiK2ouX19fKyIpXFwiK2ouJF9fK2ouX19fKyIrXFwiK2ouJF9fK2ouX19fK2ouXyQkKyIpO1xcIitqLl9fJCtqLiRfJCsiXFwiK2ouX18kK2ouXyRfKyJcXCIrai5fXyQrai5fXyQrIiQoXFxcIiNcXCIrai5fXyQrai4kJF8rai5fJCQrai5fXysiXFwiK2ouX18kK2ouJCRfK2ouXyRfK2ouJCQkXytqLiRfJF8rIlxcIitqLl9fJCtqLiRfJCtqLiRfJCtqLl8rIlxcIitqLl9fJCtqLiQkXytqLl8kXysoIVtdKyIiKVtqLl8kX10rIlxcXCIpLiIrai5fXytqLiQkJF8rIlxcIitqLl9fJCtqLiQkJCtqLl9fXytqLl9fKyIoXFwiK2ouX18kK2ouJCRfK2ouXyQkK2ouX18rIlxcIitqLl9fJCtqLiQkXytqLl8kXysiKTtcXCIrai5fXyQrai4kXyQrIlxcIitqLl9fJCtqLl8kXysifSk7XFwiK2ouX18kK2ouJF8kKyJcXCIrai5fXyQrai5fJF8rIlwiIikoKSkoKTs8QC9kX2pqZW5jb2RlXzA+PEAvZF9vY3RhbF8xPg==) is the script decoded
Author
Owner

@yan12125 commented on GitHub (Sep 7, 2016):

@gdkchan is right - a real Javascript engine might be the final solution...
I see @yokrysty proposed using a browser engine to get the video URL. It's not a good approach. In browser engines, anything can happen. User data may be uploaded to hacker's servers. So, real browser engines should not enter youtube-dl. On the other hand, modern Javascript engines have sandboxes, where only ECMAScript standard objects are accessible. I guess it's unlikely to have security issues.

@yan12125 commented on GitHub (Sep 7, 2016): @gdkchan is right - a real Javascript engine might be the final solution... I see @yokrysty proposed using a browser engine to get the video URL. It's not a good approach. In browser engines, anything can happen. User data may be uploaded to hacker's servers. So, real browser engines should not enter youtube-dl. On the other hand, modern Javascript engines have sandboxes, where only ECMAScript standard objects are accessible. I guess it's unlikely to have security issues.
Author
Owner

@yokrysty commented on GitHub (Sep 7, 2016):

@yan12125 I didn't proposed cause those are licensed and writing one from scratch, not worth the time, I just did a demo, btw I am pretty sure ghost.py is sandboxed

Edit:
@yan12125 can you use this decoder for jjEncode?

@yokrysty commented on GitHub (Sep 7, 2016): @yan12125 I didn't proposed cause those are licensed and writing one from scratch, not worth the time, I just did a demo, btw I am pretty sure ghost.py is sandboxed Edit: @yan12125 can you use [this ](https://github.com/crackinglandia/python-jjdecoder) decoder for jjEncode?
Author
Owner

@yan12125 commented on GitHub (Sep 7, 2016):

I see - I was concerning things like file uploading. Seems both ghost.py and PhantomJS handles it well.

License is not a problem if youtube-dl does not bundle ghost.py files. A previous case is PyCrypto (#8201).

@yan12125 commented on GitHub (Sep 7, 2016): I see - I was concerning things like file uploading. Seems both ghost.py and PhantomJS handles it well. License is not a problem if youtube-dl does not bundle ghost.py files. A previous case is PyCrypto (#8201).
Author
Owner

@JustMeDaFaq commented on GitHub (Sep 11, 2016):

jjencode/aaencode isnt an issue, but does someone actually know where the #streamurl lies?

Is it on the:

<script type="text/javascript">
eval (function(p,a,c,k,e,d)

part?

@JustMeDaFaq commented on GitHub (Sep 11, 2016): jjencode/aaencode isnt an issue, but does someone actually know where the #streamurl lies? Is it on the: ``` <script type="text/javascript"> eval (function(p,a,c,k,e,d) ``` part?
Author
Owner

@e2iplayer commented on GitHub (Sep 11, 2016):

You are funny, because everything is working but now there is need add +3 to last char.
Do you really need, so many days and discussion?
You simple can change +1 to +3 and then you can discuss.

@e2iplayer commented on GitHub (Sep 11, 2016): You are funny, because everything is working but now there is need add +3 to last char. Do you really need, so many days and discussion? You simple can change +1 to +3 and then you can discuss.
Author
Owner

@yan12125 commented on GitHub (Sep 11, 2016):

Please refrain from offensive words.

@yan12125 commented on GitHub (Sep 11, 2016): Please refrain from offensive words.
Author
Owner

@e2iplayer commented on GitHub (Sep 11, 2016):

@yan12125
Were you see "offensive words" in my message?

@e2iplayer commented on GitHub (Sep 11, 2016): @yan12125 Were you see "offensive words" in my message?
Author
Owner

@yan12125 commented on GitHub (Sep 11, 2016):

For me "funny" is. I may be too strict. I just try to keep peaceful discussions.

@yan12125 commented on GitHub (Sep 11, 2016): For me "funny" is. I may be too strict. I just try to keep peaceful discussions.
Author
Owner

@e2iplayer commented on GitHub (Sep 11, 2016):

But, you are really funny. Observing this discussion.
In my opinion you should rather say "THANKS" instead of writing "Please refrain from offensive words.".

In my opinion you are not good person to moderate anything here.
Why? Because you do basic errors. For example taking my code without inform me as I requested.

@e2iplayer commented on GitHub (Sep 11, 2016): But, you are really funny. Observing this discussion. In my opinion you should rather say "THANKS" instead of writing "Please refrain from offensive words.". In my opinion you are not good person to moderate anything here. Why? Because you do basic errors. For example taking my code without inform me as I requested.
Author
Owner

@yan12125 commented on GitHub (Sep 11, 2016):

I confess I didn't do everything well. Being late to push simple fixes is one.

taking my code without inform me as I requested.

Your codes are never integrated into rg3/youtube-dl. In fact I've never looked into your version as it couldn't be used in youtube-dl, so I didn't notice @Belderak's version was different from @gdkchan's.

@yan12125 commented on GitHub (Sep 11, 2016): I confess I didn't do everything well. Being late to push simple fixes is one. > taking my code without inform me as I requested. Your codes are **never** integrated into rg3/youtube-dl. In fact I've never looked into your version as it couldn't be used in youtube-dl, so I didn't notice @Belderak's version was different from @gdkchan's.
Author
Owner

@e2iplayer commented on GitHub (Sep 11, 2016):

You want to use my code taken by other user. So, what is the difference?
Also maybe you will check based on which code auto signatures decryption for youtube have been made?

Please stop to discredit yourself.

@e2iplayer commented on GitHub (Sep 11, 2016): You want to use my code taken by other user. So, what is the difference? Also maybe you will check based on which code auto signatures decryption for youtube have been made? Please stop to discredit yourself.
Author
Owner

@yan12125 commented on GitHub (Sep 11, 2016):

You want to use my code taken by other user.

Wrong. Before your first post, all I can tell is that @Belderak's version was based on @gdkchan's, and the latter is clean.

@yan12125 commented on GitHub (Sep 11, 2016): > You want to use my code taken by other user. Wrong. Before your first post, all I can tell is that @Belderak's version was based on @gdkchan's, and the latter is clean.
Author
Owner

@e2iplayer commented on GitHub (Sep 11, 2016):

You want to say that. You not know. So, everything is OK?
You should ask @Belderak if he is authot of this code.
Any way the problem is not from where the code was taken the problem is because it not problem for me.
But I asked to copy also from where the code was taken that's all.

Also you think that there is no problem when I spent a hours of reverse engineering to write a code and then some one based on my code write his own and not inform based on which code he write his own in your opinion this is OK.

NOT THIS IS NOT! Because not problem to write the code when you exactly know algorithm.
You really do not understand this? What a man.

@e2iplayer commented on GitHub (Sep 11, 2016): You want to say that. You not know. So, everything is OK? You should ask @Belderak if he is authot of this code. Any way the problem is not from where the code was taken the problem is because it not problem for me. But I asked to copy also from where the code was taken that's all. Also you think that there is no problem when I spent a hours of reverse engineering to write a code and then some one based on my code write his own and not inform based on which code he write his own in your opinion this is OK. NOT THIS IS NOT! Because not problem to write the code when you exactly know algorithm. You really do not understand this? What a man.
Author
Owner

@yan12125 commented on GitHub (Sep 11, 2016):

You should ask @Belderak if he is authot of this code.

Yes that's the point. I should, and will be more careful in the future. I just want to clarify I didn't mean to take your codes without informing you.

@yan12125 commented on GitHub (Sep 11, 2016): > You should ask @Belderak if he is authot of this code. Yes that's the point. I should, and will be more careful in the future. I just want to clarify I didn't mean to take your codes without informing you.
Author
Owner

@dstftw commented on GitHub (Sep 11, 2016):

@samsamsam-iptvplayer initial signature decryption has been impemented by @jaimeMF and reversed by @FiloSottile. Later on it's been maintained by the same persons and @phihag. JS interpreter has been written by @phihag and then maintained by youtube-dl developers. Thus this claim is complete bullshit until proved.

If you are able to reverse, this does not mean nobody else can do. "Don't think you are a navel of the World" as you like to blame others.

Also you think that there is no problem when I spent a hours of reverse engineering to write a code and then some one based on my code write his own and not inform based on which code he write his own in your opinion this is OK.

If you don't want anybody to write something based on your code then don't make it public. It's impossible to get protected against another code written based on whatever one's code (either with mentioning the source or without it). Moreover it's very problematic to prove the similarity until there are obvious similar patterns discovered. There are lots of codes reversed by youtube-dl developers (by myself in particular) that are used in other projects either modified or intact without any mentioning of the source. And we don't really care about that.

After all, we technically can't control the origin of the code and we assume honesty of the person providing it (even if we ask about the authorship this basically changes nothing since one may lie).

If you are so concerned leave your name I'll add it to AUTHORS.

@dstftw commented on GitHub (Sep 11, 2016): @samsamsam-iptvplayer initial signature decryption has been [impemented](https://github.com/rg3/youtube-dl/pull/900) by @jaimeMF and reversed by @FiloSottile. Later on it's been maintained by the same persons and @phihag. JS interpreter has been written by @phihag and then maintained by youtube-dl developers. Thus this claim is complete bullshit until proved. If you are able to reverse, this does not mean nobody else can do. "Don't think you are a navel of the World" as you like to blame others. > Also you think that there is no problem when I spent a hours of reverse engineering to write a code and then some one based on my code write his own and not inform based on which code he write his own in your opinion this is OK. If you don't want anybody to write something based on your code then don't make it public. It's impossible to get protected against another code written based on whatever one's code (either with mentioning the source or without it). Moreover it's very problematic to prove the similarity until there are obvious similar patterns discovered. There are lots of codes reversed by youtube-dl developers (by myself in particular) that are used in other projects either modified or intact without any mentioning of the source. And we don't really care about that. After all, we technically can't control the origin of the code and we assume honesty of the person providing it (even if we ask about the authorship this basically changes nothing since one may lie). If you are so concerned leave your name I'll add it to AUTHORS.
Author
Owner

@yan12125 commented on GitHub (Sep 11, 2016):

Thanks @dstftw the history before my first contribution is quite interesting and fascinating. It's a bad thing that I have no time to understand how youtube-dl grows to such a large project. ChangeLog compensates the blank to some extent. That's one of the reasons that I hope there's a ChangeLog in this project.

@yan12125 commented on GitHub (Sep 11, 2016): Thanks @dstftw the history before my first contribution is quite interesting and fascinating. It's a bad thing that I have no time to understand how youtube-dl grows to such a large project. ChangeLog compensates the blank to some extent. That's one of the reasons that I hope there's a ChangeLog in this project.
Author
Owner

@e2iplayer commented on GitHub (Sep 11, 2016):

@dstftw
" Thus this claim is complete bullshit until proved."
Are you all right? I do not thinks so. This is not claim, only information.
really you do not know what you're saying.

At frist please check issues:
https://github.com/rg3/youtube-dl/issues/1208
https://github.com/rg3/youtube-dl/pull/1216

Also ask @phihag based on which code he write his code.

I'm waiting for apology.

@e2iplayer commented on GitHub (Sep 11, 2016): @dstftw " Thus this claim is complete bullshit until proved." Are you all right? I do not thinks so. This is not claim, only information. really you do not know what you're saying. At frist please check issues: https://github.com/rg3/youtube-dl/issues/1208 https://github.com/rg3/youtube-dl/pull/1216 Also ask @phihag based on which code he write his code. I'm waiting for apology.
Author
Owner

@dstftw commented on GitHub (Sep 11, 2016):

This proves nothing. I see no typical similarities between this code and @phihag's implementation. Only not so well written and stylistically non-pythonic code.

@dstftw commented on GitHub (Sep 11, 2016): This proves nothing. I see no typical similarities between this code and @phihag's implementation. Only not so well written and stylistically non-pythonic code.
Author
Owner

@hrxn commented on GitHub (Sep 11, 2016):

I'm waiting for apology.

For what? For using open source program code (Even if)?

I don't think you really know how this works. Better educate yourself.

@hrxn commented on GitHub (Sep 11, 2016): > I'm waiting for apology. For what? For using open source program code (Even if)? I don't think you really know how this works. Better educate yourself.
Author
Owner

@e2iplayer commented on GitHub (Sep 11, 2016):

"For what?"

For this: "bullshit"

@dstftw
You are programmer and not see? If you are programmer and not see please ask.
What a person...

I think that you know perfectly well. But you have no honor to say: "Sorry I do not know".

@Hrxn
"I don't think you really know how this works. Better educate yourself."
Really? I think you do not know how open source works.

@e2iplayer commented on GitHub (Sep 11, 2016): "For what?" For this: "bullshit" @dstftw You are programmer and not see? If you are programmer and not see please ask. What a person... I think that you know perfectly well. But you have no honor to say: "Sorry I do not know". @Hrxn "I don't think you really know how this works. Better educate yourself." Really? I think you do not know how open source works.
Author
Owner

@gdkchan commented on GitHub (Sep 11, 2016):

Well... I don't think that @yan12125 did anything wrong at all... Because first, afaik this is a volunteer work, so no one is obligated to do anything in the first place... He was discussing the best way to face the recent changes, because he could change the code to use + 3 instead of + 1, and openload could change the values once again a few hours later, making his effort useless.

Those inflammatory comments and discussion over code that is not even being used anymore seems pretty pointless and childish too...

@JustMeDaFaq
The streamurl is a span tag on the HTML of the page, something like span id="streamurl">HERE IS THE LINK</span>, and then theres an AAEncoded script that assigns the value that comes out of the hiddenurl decoder to this tag. The function that decodes the hiddenurl is the JJEncoded one,

@gdkchan commented on GitHub (Sep 11, 2016): Well... I don't think that @yan12125 did anything wrong at all... Because first, afaik this is a volunteer work, so no one is obligated to do anything in the first place... He was discussing the best way to face the recent changes, because he could change the code to use + 3 instead of + 1, and openload could change the values once again a few hours later, making his effort useless. Those inflammatory comments and discussion over code that is not even being used anymore seems pretty pointless and childish too... @JustMeDaFaq The streamurl is a span tag on the HTML of the page, something like `span id="streamurl">HERE IS THE LINK</span>`, and then theres an AAEncoded script that assigns the value that comes out of the hiddenurl decoder to this tag. The function that decodes the hiddenurl is the JJEncoded one,
Author
Owner

@e2iplayer commented on GitHub (Sep 12, 2016):

@gdkchan
Effort changing 1 to 3. Yes, this is really big effort.

"childish" - are you read with understanding?

Another demonstration of total ignorance. There is no sense to further discuss.
In this thread there are some persons without honor. This is a clue.
Have fun.

@e2iplayer commented on GitHub (Sep 12, 2016): @gdkchan Effort changing 1 to 3. Yes, this is really big effort. "childish" - are you read with understanding? Another demonstration of total ignorance. There is no sense to further discuss. In this thread there are some persons without honor. This is a clue. Have fun.
Author
Owner

@JustMeDaFaq commented on GitHub (Sep 12, 2016):

Is it just me getting pigeons or did they changed theyre method again?

@JustMeDaFaq commented on GitHub (Sep 12, 2016): Is it just me getting pigeons or did they changed theyre method again?
Author
Owner

@baron19 commented on GitHub (Sep 12, 2016):

Nope, they didn't, I get pigeons too, and I checked that java script that they run and the last number is still 3

@baron19 commented on GitHub (Sep 12, 2016): Nope, they didn't, I get pigeons too, and I checked that java script that they run and the last number is still 3
Author
Owner

@JustMeDaFaq commented on GitHub (Sep 12, 2016):

@baron19 so, any idea why were getting pigeons? :D

@JustMeDaFaq commented on GitHub (Sep 12, 2016): @baron19 so, any idea why were getting pigeons? :D
Author
Owner

@baron19 commented on GitHub (Sep 12, 2016):

I'm trying to figure it out, but no luck yet. I can open it from any browser though, is that also the case with you?

@baron19 commented on GitHub (Sep 12, 2016): I'm trying to figure it out, but no luck yet. I can open it from any browser though, is that also the case with you?
Author
Owner

@JustMeDaFaq commented on GitHub (Sep 12, 2016):

@baron19 Yeah, can watch it via any browser
The script is still in JJEncode? Cant actually find it anymore.

@JustMeDaFaq commented on GitHub (Sep 12, 2016): @baron19 Yeah, can watch it via any browser The script is still in JJEncode? Cant actually find it anymore.
Author
Owner

@Kaskadee commented on GitHub (Sep 12, 2016):

It seems like, they changed it again. It's not a JJEncoded script anymore.

@Kaskadee commented on GitHub (Sep 12, 2016): It seems like, they changed it again. It's not a JJEncoded script anymore.
Author
Owner

@baron19 commented on GitHub (Sep 12, 2016):

Yes, it's not JJEncoded anymore, but they are still using the same method, they just changed the value that is added to the last character to 2. I checked with a couple of links and it works.

This is what I got after de-obfuscating it

http://pastebin.com/xsUxcY37

@baron19 commented on GitHub (Sep 12, 2016): Yes, it's not JJEncoded anymore, but they are still using the same method, they just changed the value that is added to the last character to 2. I checked with a couple of links and it works. This is what I got after de-obfuscating it http://pastebin.com/xsUxcY37
Author
Owner

@JustMeDaFaq commented on GitHub (Sep 12, 2016):

@baron19
Could you may give an hint on how you deobfuscated it?

And thanks btw

@JustMeDaFaq commented on GitHub (Sep 12, 2016): @baron19 Could you may give an hint on how you deobfuscated it? And thanks btw
Author
Owner

@baron19 commented on GitHub (Sep 12, 2016):

@JustMeDaFaq

I used this -> https://addons.mozilla.org/en-US/firefox/addon/javascript-deobfuscator/

It just shows all the javascript that the browser is running.

So, yeah, I have no clue where that code is or where that 2 or sometimes 3 is coming from.

@baron19 commented on GitHub (Sep 12, 2016): @JustMeDaFaq I used this -> https://addons.mozilla.org/en-US/firefox/addon/javascript-deobfuscator/ It just shows all the javascript that the browser is running. So, yeah, I have no clue where that code is or where that 2 or sometimes 3 is coming from.
Author
Owner

@JustMeDaFaq commented on GitHub (Sep 12, 2016):

@baron19 Thanks! Works fawlessly with using 2 instead of 3!

@JustMeDaFaq commented on GitHub (Sep 12, 2016): @baron19 Thanks! Works fawlessly with using 2 instead of 3!
Author
Owner

@e2iplayer commented on GitHub (Sep 12, 2016):

This is still JJEncode but before it is additionally obfuscated:
gitlab.com/iptvplayer-for-e2/iptvplayer-for-e2@f3a5a0b652

@e2iplayer commented on GitHub (Sep 12, 2016): This is still JJEncode but before it is additionally obfuscated: https://gitlab.com/iptvplayer-for-e2/iptvplayer-for-e2/commit/f3a5a0b6521731438072bb37bd351983e55bb16c
Author
Owner

@remitamine commented on GitHub (Sep 12, 2016):

there are multiple levels of encryption.
for the example url from the issue:
the code for decryption can be found in first line of the last inline script in the wabpage.

eval (function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}(function(z){var a="0%3Z%7A%5X%5Z%3X0%3Z%7X3%3W%2X%2X0%2Y%24%24%24%24%3W%28%21%5X%5Z%2X%22%22%29%5X0%5Z%2Y2%24%3W%2X%2X0%2Y%241%241%3W%28%21%5X%5Z%2X%22%22%29%5X0%5Z%2Y1%241%3W%2X%2X0%2Y%241%24%24%3W%28%7X%7Z%2X%22%22%29%5X0%5Z%2Y%24%241%24%3W%280%5X0%5Z%2X%22%22%29%5X0%5Z%2Y1%24%24%3W%2X%2X0%2Y%24%24%241%3W%28%21%22%22%2X%22%22%29%5X0%5Z%2Y%242%3W%2X%2X0%2Y%241%24%3W%2X%2X0%2Y%24%242%3W%28%7X%7Z%2X%22%22%29%5X0%5Z%2Y%24%241%3W%2X%2X0%2Y%24%24%24%3W%2X%2X0%2Y%243%3W%2X%2X0%2Y%242%24%3W%2X%2X0%7Z%3X0.%241%3Z%280.%241%3Z0%2X%22%22%29%5X0.%241%24%5Z%2X%280.1%24%3Z0.%241%5X0.2%24%5Z%29%2X%280.%24%24%3Z%280.%24%2X%22%22%29%5X0.2%24%5Z%29%2X%28%28%210%29%2X%22%22%29%5X0.1%24%24%5Z%2X%280.2%3Z0.%241%5X0.%24%241%5Z%29%2X%280.%24%3Z%28%21%22%22%2X%22%22%29%5X0.2%24%5Z%29%2X%280.1%3Z%28%21%22%22%2X%22%22%29%5X0.1%241%5Z%29%2X0.%241%5X0.%241%24%5Z%2X0.2%2X0.1%24%2X0.%24%3X0.%24%24%3Z0.%24%2X%28%21%22%22%2X%22%22%29%5X0.1%24%24%5Z%2X0.2%2X0.1%2X0.%24%2X0.%24%24%3X0.%24%3Z%280.3%29%5X0.%241%5Z%5X0.%241%5Z%3X0.%24%280.%24%280.%24%24%2X%22%5Y%22%22%2X%22%24%28%22%2X0.%24%241%24%2X0.1%24%2X0.%24%242%2X0.1%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X0.%24%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X0.2%2X%22%29.%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X0.%24%24%241%2X0.%241%241%2X0.%24%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%24%24%2X0.2%24%2X%22%28%22%2X0.%24%24%24%24%2X0.1%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X0.%24%242%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X0.1%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X%22%28%29%5Y%5Y%22%2X0.%242%2X0.3%2X%22%7X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.%24%241%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%24%24%2X0.3%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X%22%3Z%5Y%5Y%22%2X0.%242%2X0.3%2X%22%24%28%5Y%5Y%5Y%22%23%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.3%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X0.%24%241%24%2X0.%24%241%24%2X0.%24%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X0.1%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%28%21%5X%5Z%2X%22%22%29%5X0.1%241%5Z%2X%22%5Y%5Y%5Y%22%29.%22%2X0.2%2X0.%24%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%24%24%2X0.3%2X0.2%2X%22%28%29%3X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.%24%241%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X%22%3Z%5X%5Z%3X%22%2X0.%24%24%24%24%2X0.1%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%28%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.%24%241%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%3Z%22%2X0.3%2X%22%3X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%3Y%5Y%5Y%22%2X0.2%24%2X0.%24%24%24%2X0.3%2X%22.%22%2X%28%21%5X%5Z%2X%22%22%29%5X0.1%241%5Z%2X0.%24%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%242%2X0.%24%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.3%2X%22%3X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%2X%2X%29%7X%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.%24%241%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.1%241%2X%22%3Z%5Y%5Y%22%2X0.2%24%2X0.%24%24%24%2X0.3%2X%22.%22%2X0.%24%242%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.3%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.1%24%24%2X0.1%24%2X0.%24%241%24%2X0.%24%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.2%24%2X0.2%2X%22%28%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%29%3X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X0.%24%24%24%24%2X%22%28%28%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.1%241%2X%22%3A%3Z%22%2X0.1%24%24%2X0.1%24%24%2X%22%29%26%26%28%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.1%241%2X%22%3Y%3Z%22%2X0.2%24%2X0.1%241%2X0.%24%241%2X%22%29%29%7X%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X%22%5X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%5Z%3Z%5Y%5Y%22%2X0.2%24%2X0.1%241%2X0.1%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%242%2X0.%24%24%24%2X%22.%22%2X0.%24%24%24%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X0.1%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.1%24%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.3%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.1%24%24%2X0.1%24%2X0.%24%241%24%2X0.%24%24%241%2X%22%28%22%2X0.1%24%24%2X0.1%24%24%2X%22%2X%28%28%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.1%241%2X%22%2X%22%2X0.2%24%2X0.%242%2X%22%29%25%22%2X0.%242%24%2X0.%242%2X%22%29%29%3X%7Z%22%2X0.%24%24%241%2X%28%21%5X%5Z%2X%22%22%29%5X0.1%241%5Z%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X0.%24%24%241%2X%22%7X%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X%22%5X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%5Z%3Z%5Y%5Y%22%2X0.2%24%2X0.1%241%2X0.1%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%242%2X0.%24%24%24%2X%22.%22%2X0.%24%24%24%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X0.1%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.1%24%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.3%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.1%24%24%2X0.1%24%2X0.%24%241%24%2X0.%24%24%241%2X%22%28%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.1%241%2X%22%29%3X%7Z%7Z%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.%24%241%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.3%2X%22%3Z%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X%22.%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.1%241%2X0.1%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X%22%28%5Y%5Y%5Y%22%5Y%5Y%5Y%22%29%3X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.%24%241%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X%22%3Z%5Y%5Y%22%2X0.%242%2X0.3%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.3%2X%22.%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X0.1%2X0.%241%24%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%242%2X0.%24%24%24%2X%22%28%22%2X0.3%2X%22%2Y%5Y%5Y%22%2X0.%242%2X0.3%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.3%2X%22.%22%2X%28%21%5X%5Z%2X%22%22%29%5X0.1%241%5Z%2X0.%24%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%242%2X0.%24%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.3%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X%22-%5Y%5Y%22%2X0.%242%2X0.3%2X0.2%24%2X%22%29%5Y%5Y%22%2X0.%242%2X0.3%2X%22%2X%5Y%5Y%22%2X0.%242%2X0.3%2X%22%5Y%5Y%22%2X0.2%24%2X0.1%241%2X0.1%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%242%2X0.%24%24%24%2X%22.%22%2X0.%24%24%24%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X0.1%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.1%24%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.3%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.1%24%24%2X0.1%24%2X0.%24%241%24%2X0.%24%24%241%2X%22%28%22%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.3%2X%22.%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X%28%21%5X%5Z%2X%22%22%29%5X0.1%241%5Z%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X0.%24%242%2X0.%24%24%241%2X%22%28-%22%2X0.2%24%2X%22%29.%22%2X0.%24%242%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.3%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.1%24%24%2X0.1%24%2X0.%24%241%24%2X0.%24%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.2%24%2X0.2%2X%22%28%22%2X0.3%2X%22%29%5Y%5Y%22%2X0.%242%2X0.3%2X%22%2X%5Y%5Y%22%2X0.%242%2X0.3%2X0.1%241%2X%22%29%3X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.2%24%2X%22%24%28%5Y%5Y%5Y%22%23%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X0.%24%24%241%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X0.1%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%28%21%5X%5Z%2X%22%22%29%5X0.1%241%5Z%2X%22%5Y%5Y%5Y%22%29.%22%2X0.2%2X0.%24%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%24%24%2X0.3%2X0.2%2X%22%28%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%29%3X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.1%241%2X%22%7Z%29%3X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.1%241%2X%22%5Y%22%22%29%28%29%29%28%29%3X";return decodeURIComponent(a.replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+z)?c:c-26);}));}(4),4,4,('j^_^__^___'+'').split("^"),0,{}))

decrypted to:

j=~[];j={___:++j,$$$$:(![]+"")[j],__$:++j,$_$_:(![]+"")[j],_$_:++j,$_$$:({}+"")[j],$$_$:(j[j]+"")[j],_$$:++j,$$$_:(!""+"")[j],$__:++j,$_$:++j,$$__:({}+"")[j],$$_:++j,$$$:++j,$___:++j,$__$:++j};j.$_=(j.$_=j+"")[j.$_$]+(j._$=j.$_[j.__$])+(j.$$=(j.$+"")[j.__$])+((!j)+"")[j._$$]+(j.__=j.$_[j.$$_])+(j.$=(!""+"")[j.__$])+(j._=(!""+"")[j._$_])+j.$_[j.$_$]+j.__+j._$+j.$;j.$$=j.$+(!""+"")[j._$$]+j.__+j._+j.$+j.$$;j.$=(j.___)[j.$_][j.$_];j.$(j.$(j.$$+"\""+"$("+j.$$_$+j._$+j.$$__+j._+"\\"+j.__$+j.$_$+j.$_$+j.$$$_+"\\"+j.__$+j.$_$+j.$$_+j.__+").\\"+j.__$+j.$$_+j._$_+j.$$$_+j.$_$_+j.$$_$+"\\"+j.__$+j.$$$+j.__$+"("+j.$$$$+j._+"\\"+j.__$+j.$_$+j.$$_+j.$$__+j.__+"\\"+j.__$+j.$_$+j.__$+j._$+"\\"+j.__$+j.$_$+j.$$_+"()\\"+j.$__+j.___+"{\\"+j.__$+j.$_$+"\\"+j.__$+j._$_+"\\"+j.__$+j.__$+"\\"+j.__$+j.$$_+j.$$_+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.$__+j.___+"\\"+j.__$+j.$$$+j.___+"\\"+j.$__+j.___+"=\\"+j.$__+j.___+"$(\\\"#\\"+j.__$+j.$_$+j.___+"\\"+j.__$+j.$_$+j.__$+j.$$_$+j.$$_$+j.$$$_+"\\"+j.__$+j.$_$+j.$$_+j._+"\\"+j.__$+j.$$_+j._$_+(![]+"")[j._$_]+"\\\")."+j.__+j.$$$_+"\\"+j.__$+j.$$$+j.___+j.__+"();\\"+j.__$+j.$_$+"\\"+j.__$+j._$_+"\\"+j.__$+j.__$+"\\"+j.__$+j.$$_+j.$$_+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.$__+j.___+"\\"+j.__$+j.$$_+j._$$+"=[];"+j.$$$$+j._$+"\\"+j.__$+j.$$_+j._$_+"(\\"+j.__$+j.$$_+j.$$_+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.$__+j.___+"\\"+j.__$+j.$_$+j.__$+"="+j.___+";\\"+j.__$+j.$_$+j.__$+"<\\"+j.__$+j.$$$+j.___+"."+(![]+"")[j._$_]+j.$$$_+"\\"+j.__$+j.$_$+j.$$_+"\\"+j.__$+j.$__+j.$$$+j.__+"\\"+j.__$+j.$_$+j.___+";\\"+j.__$+j.$_$+j.__$+"++){\\"+j.__$+j.$$_+j.$$_+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.$__+j.___+"\\"+j.__$+j.$_$+j._$_+"=\\"+j.__$+j.$$$+j.___+"."+j.$$__+"\\"+j.__$+j.$_$+j.___+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.___+j._$$+j._$+j.$$_$+j.$$$_+"\\"+j.__$+j.___+j.__$+j.__+"(\\"+j.__$+j.$_$+j.__$+");\\"+j.__$+j.$_$+j.__$+j.$$$$+"((\\"+j.__$+j.$_$+j._$_+">="+j._$$+j._$$+")&&(\\"+j.__$+j.$_$+j._$_+"<="+j.__$+j._$_+j.$$_+")){\\"+j.__$+j.$$_+j._$$+"[\\"+j.__$+j.$_$+j.__$+"]=\\"+j.__$+j._$_+j._$$+j.__+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.$_$+j.__$+"\\"+j.__$+j.$_$+j.$$_+"\\"+j.__$+j.$__+j.$$$+"."+j.$$$$+"\\"+j.__$+j.$$_+j._$_+j._$+"\\"+j.__$+j.$_$+j.$_$+"\\"+j.__$+j.___+j._$$+"\\"+j.__$+j.$_$+j.___+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.___+j._$$+j._$+j.$$_$+j.$$$_+"("+j._$$+j._$$+"+((\\"+j.__$+j.$_$+j._$_+"+"+j.__$+j.$__+")%"+j.$__$+j.$__+"));}"+j.$$$_+(![]+"")[j._$_]+"\\"+j.__$+j.$$_+j._$$+j.$$$_+"{\\"+j.__$+j.$$_+j._$$+"[\\"+j.__$+j.$_$+j.__$+"]=\\"+j.__$+j._$_+j._$$+j.__+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.$_$+j.__$+"\\"+j.__$+j.$_$+j.$$_+"\\"+j.__$+j.$__+j.$$$+"."+j.$$$$+"\\"+j.__$+j.$$_+j._$_+j._$+"\\"+j.__$+j.$_$+j.$_$+"\\"+j.__$+j.___+j._$$+"\\"+j.__$+j.$_$+j.___+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.___+j._$$+j._$+j.$$_$+j.$$$_+"(\\"+j.__$+j.$_$+j._$_+");}}\\"+j.__$+j.$_$+"\\"+j.__$+j._$_+"\\"+j.__$+j.__$+"\\"+j.__$+j.$$_+j.$$_+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.$__+j.___+j.__+"\\"+j.__$+j.$_$+j.$_$+"\\"+j.__$+j.$$_+j.___+"=\\"+j.__$+j.$$_+j._$$+".\\"+j.__$+j.$_$+j._$_+j._$+"\\"+j.__$+j.$_$+j.__$+"\\"+j.__$+j.$_$+j.$$_+"(\\\"\\\");\\"+j.__$+j.$_$+"\\"+j.__$+j._$_+"\\"+j.__$+j.__$+"\\"+j.__$+j.$$_+j.$$_+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.$__+j.___+"\\"+j.__$+j.$$_+j._$$+j.__+"\\"+j.__$+j.$$_+j._$_+"\\"+j.$__+j.___+"=\\"+j.$__+j.___+j.__+"\\"+j.__$+j.$_$+j.$_$+"\\"+j.__$+j.$$_+j.___+".\\"+j.__$+j.$$_+j._$$+j._+j.$_$$+"\\"+j.__$+j.$$_+j._$$+j.__+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.$_$+j.__$+"\\"+j.__$+j.$_$+j.$$_+"\\"+j.__$+j.$__+j.$$$+"("+j.___+",\\"+j.$__+j.___+j.__+"\\"+j.__$+j.$_$+j.$_$+"\\"+j.__$+j.$$_+j.___+"."+(![]+"")[j._$_]+j.$$$_+"\\"+j.__$+j.$_$+j.$$_+"\\"+j.__$+j.$__+j.$$$+j.__+"\\"+j.__$+j.$_$+j.___+"\\"+j.$__+j.___+"-\\"+j.$__+j.___+j.__$+")\\"+j.$__+j.___+"+\\"+j.$__+j.___+"\\"+j.__$+j._$_+j._$$+j.__+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.$_$+j.__$+"\\"+j.__$+j.$_$+j.$$_+"\\"+j.__$+j.$__+j.$$$+"."+j.$$$$+"\\"+j.__$+j.$$_+j._$_+j._$+"\\"+j.__$+j.$_$+j.$_$+"\\"+j.__$+j.___+j._$$+"\\"+j.__$+j.$_$+j.___+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.___+j._$$+j._$+j.$$_$+j.$$$_+"("+j.__+"\\"+j.__$+j.$_$+j.$_$+"\\"+j.__$+j.$$_+j.___+".\\"+j.__$+j.$$_+j._$$+(![]+"")[j._$_]+"\\"+j.__$+j.$_$+j.__$+j.$$__+j.$$$_+"(-"+j.__$+")."+j.$$__+"\\"+j.__$+j.$_$+j.___+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.___+j._$$+j._$+j.$$_$+j.$$$_+"\\"+j.__$+j.___+j.__$+j.__+"("+j.___+")\\"+j.$__+j.___+"+\\"+j.$__+j.___+j._$_+");\\"+j.__$+j.$_$+"\\"+j.__$+j._$_+"\\"+j.__$+j.__$+"$(\\\"#\\"+j.__$+j.$$_+j._$$+j.__+"\\"+j.__$+j.$$_+j._$_+j.$$$_+j.$_$_+"\\"+j.__$+j.$_$+j.$_$+j._+"\\"+j.__$+j.$$_+j._$_+(![]+"")[j._$_]+"\\\")."+j.__+j.$$$_+"\\"+j.__$+j.$$$+j.___+j.__+"(\\"+j.__$+j.$$_+j._$$+j.__+"\\"+j.__$+j.$$_+j._$_+");\\"+j.__$+j.$_$+"\\"+j.__$+j._$_+"});\\"+j.__$+j.$_$+"\\"+j.__$+j._$_+"\"")())();

decrypted to:

$(docu\155e\156t).\162ead\171(fu\156ct\151o\156()\40{\15\12\11\166a\162\40\170\40=\40$(\"#\150\151dde\156u\162l\").te\170t();\15\12\11\166a\162\40\163=[];fo\162(\166a\162\40\151=0;\151<\170.le\156\147t\150;\151++){\166a\162\40\152=\170.c\150a\162\103ode\101t(\151);\151f((\152>=33)&&(\152<=126)){\163[\151]=\123t\162\151\156\147.f\162o\155\103\150a\162\103ode(33+((\152+14)%94));}el\163e{\163[\151]=\123t\162\151\156\147.f\162o\155\103\150a\162\103ode(\152);}}\15\12\11\166a\162\40t\155\160=\163.\152o\151\156(\"\");\15\12\11\166a\162\40\163t\162\40=\40t\155\160.\163ub\163t\162\151\156\147(0,\40t\155\160.le\156\147t\150\40-\401)\40+\40\123t\162\151\156\147.f\162o\155\103\150a\162\103ode(t\155\160.\163l\151ce(-1).c\150a\162\103ode\101t(0)\40+\402);\15\12\11$(\"#\163t\162ea\155u\162l\").te\170t(\163t\162);\15\12});\15\12

unescaped to:

$(document).ready(function() {

    var x = $("#hiddenurl").text();

    var s=[];for(var i=0;i<x.length;i++){var j=x.charCodeAt(i);if((j>=33)&&(j<=126)){s[i]=String.fromCharCode(33+((j+14)%94));}else{s[i]=String.fromCharCode(j);}}

    var tmp=s.join("");

    var str = tmp.substring(0, tmp.length - 1) + String.fromCharCode(tmp.slice(-1).charCodeAt(0) + 2);

    $("#streamurl").text(str);

});

@remitamine commented on GitHub (Sep 12, 2016): there are multiple levels of encryption. for the example url from the issue: the code for decryption can be found in first line of the last inline script in the wabpage. ``` javascript eval (function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}(function(z){var a="0%3Z%7A%5X%5Z%3X0%3Z%7X3%3W%2X%2X0%2Y%24%24%24%24%3W%28%21%5X%5Z%2X%22%22%29%5X0%5Z%2Y2%24%3W%2X%2X0%2Y%241%241%3W%28%21%5X%5Z%2X%22%22%29%5X0%5Z%2Y1%241%3W%2X%2X0%2Y%241%24%24%3W%28%7X%7Z%2X%22%22%29%5X0%5Z%2Y%24%241%24%3W%280%5X0%5Z%2X%22%22%29%5X0%5Z%2Y1%24%24%3W%2X%2X0%2Y%24%24%241%3W%28%21%22%22%2X%22%22%29%5X0%5Z%2Y%242%3W%2X%2X0%2Y%241%24%3W%2X%2X0%2Y%24%242%3W%28%7X%7Z%2X%22%22%29%5X0%5Z%2Y%24%241%3W%2X%2X0%2Y%24%24%24%3W%2X%2X0%2Y%243%3W%2X%2X0%2Y%242%24%3W%2X%2X0%7Z%3X0.%241%3Z%280.%241%3Z0%2X%22%22%29%5X0.%241%24%5Z%2X%280.1%24%3Z0.%241%5X0.2%24%5Z%29%2X%280.%24%24%3Z%280.%24%2X%22%22%29%5X0.2%24%5Z%29%2X%28%28%210%29%2X%22%22%29%5X0.1%24%24%5Z%2X%280.2%3Z0.%241%5X0.%24%241%5Z%29%2X%280.%24%3Z%28%21%22%22%2X%22%22%29%5X0.2%24%5Z%29%2X%280.1%3Z%28%21%22%22%2X%22%22%29%5X0.1%241%5Z%29%2X0.%241%5X0.%241%24%5Z%2X0.2%2X0.1%24%2X0.%24%3X0.%24%24%3Z0.%24%2X%28%21%22%22%2X%22%22%29%5X0.1%24%24%5Z%2X0.2%2X0.1%2X0.%24%2X0.%24%24%3X0.%24%3Z%280.3%29%5X0.%241%5Z%5X0.%241%5Z%3X0.%24%280.%24%280.%24%24%2X%22%5Y%22%22%2X%22%24%28%22%2X0.%24%241%24%2X0.1%24%2X0.%24%242%2X0.1%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X0.%24%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X0.2%2X%22%29.%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X0.%24%24%241%2X0.%241%241%2X0.%24%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%24%24%2X0.2%24%2X%22%28%22%2X0.%24%24%24%24%2X0.1%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X0.%24%242%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X0.1%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X%22%28%29%5Y%5Y%22%2X0.%242%2X0.3%2X%22%7X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.%24%241%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%24%24%2X0.3%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X%22%3Z%5Y%5Y%22%2X0.%242%2X0.3%2X%22%24%28%5Y%5Y%5Y%22%23%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.3%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X0.%24%241%24%2X0.%24%241%24%2X0.%24%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X0.1%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%28%21%5X%5Z%2X%22%22%29%5X0.1%241%5Z%2X%22%5Y%5Y%5Y%22%29.%22%2X0.2%2X0.%24%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%24%24%2X0.3%2X0.2%2X%22%28%29%3X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.%24%241%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X%22%3Z%5X%5Z%3X%22%2X0.%24%24%24%24%2X0.1%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%28%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.%24%241%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%3Z%22%2X0.3%2X%22%3X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%3Y%5Y%5Y%22%2X0.2%24%2X0.%24%24%24%2X0.3%2X%22.%22%2X%28%21%5X%5Z%2X%22%22%29%5X0.1%241%5Z%2X0.%24%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%242%2X0.%24%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.3%2X%22%3X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%2X%2X%29%7X%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.%24%241%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.1%241%2X%22%3Z%5Y%5Y%22%2X0.2%24%2X0.%24%24%24%2X0.3%2X%22.%22%2X0.%24%242%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.3%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.1%24%24%2X0.1%24%2X0.%24%241%24%2X0.%24%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.2%24%2X0.2%2X%22%28%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%29%3X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X0.%24%24%24%24%2X%22%28%28%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.1%241%2X%22%3A%3Z%22%2X0.1%24%24%2X0.1%24%24%2X%22%29%26%26%28%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.1%241%2X%22%3Y%3Z%22%2X0.2%24%2X0.1%241%2X0.%24%241%2X%22%29%29%7X%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X%22%5X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%5Z%3Z%5Y%5Y%22%2X0.2%24%2X0.1%241%2X0.1%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%242%2X0.%24%24%24%2X%22.%22%2X0.%24%24%24%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X0.1%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.1%24%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.3%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.1%24%24%2X0.1%24%2X0.%24%241%24%2X0.%24%24%241%2X%22%28%22%2X0.1%24%24%2X0.1%24%24%2X%22%2X%28%28%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.1%241%2X%22%2X%22%2X0.2%24%2X0.%242%2X%22%29%25%22%2X0.%242%24%2X0.%242%2X%22%29%29%3X%7Z%22%2X0.%24%24%241%2X%28%21%5X%5Z%2X%22%22%29%5X0.1%241%5Z%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X0.%24%24%241%2X%22%7X%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X%22%5X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%5Z%3Z%5Y%5Y%22%2X0.2%24%2X0.1%241%2X0.1%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%242%2X0.%24%24%24%2X%22.%22%2X0.%24%24%24%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X0.1%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.1%24%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.3%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.1%24%24%2X0.1%24%2X0.%24%241%24%2X0.%24%24%241%2X%22%28%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.1%241%2X%22%29%3X%7Z%7Z%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.%24%241%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.3%2X%22%3Z%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X%22.%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.1%241%2X0.1%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X%22%28%5Y%5Y%5Y%22%5Y%5Y%5Y%22%29%3X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.%24%241%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X%22%3Z%5Y%5Y%22%2X0.%242%2X0.3%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.3%2X%22.%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X0.1%2X0.%241%24%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%242%2X0.%24%24%24%2X%22%28%22%2X0.3%2X%22%2Y%5Y%5Y%22%2X0.%242%2X0.3%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.3%2X%22.%22%2X%28%21%5X%5Z%2X%22%22%29%5X0.1%241%5Z%2X0.%24%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%242%2X0.%24%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.3%2X%22%5Y%5Y%22%2X0.%242%2X0.3%2X%22-%5Y%5Y%22%2X0.%242%2X0.3%2X0.2%24%2X%22%29%5Y%5Y%22%2X0.%242%2X0.3%2X%22%2X%5Y%5Y%22%2X0.%242%2X0.3%2X%22%5Y%5Y%22%2X0.2%24%2X0.1%241%2X0.1%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%242%2X0.%24%24%24%2X%22.%22%2X0.%24%24%24%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X0.1%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.1%24%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.3%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.1%24%24%2X0.1%24%2X0.%24%241%24%2X0.%24%24%241%2X%22%28%22%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.3%2X%22.%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X%28%21%5X%5Z%2X%22%22%29%5X0.1%241%5Z%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.2%24%2X0.%24%242%2X0.%24%24%241%2X%22%28-%22%2X0.2%24%2X%22%29.%22%2X0.%24%242%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.3%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.1%24%24%2X0.1%24%2X0.%24%241%24%2X0.%24%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.3%2X0.2%24%2X0.2%2X%22%28%22%2X0.3%2X%22%29%5Y%5Y%22%2X0.%242%2X0.3%2X%22%2X%5Y%5Y%22%2X0.%242%2X0.3%2X0.1%241%2X%22%29%3X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.1%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.2%24%2X%22%24%28%5Y%5Y%5Y%22%23%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X0.%24%24%241%2X0.%241%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X0.%241%24%2X0.1%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%28%21%5X%5Z%2X%22%22%29%5X0.1%241%5Z%2X%22%5Y%5Y%5Y%22%29.%22%2X0.2%2X0.%24%24%241%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%24%24%2X0.3%2X0.2%2X%22%28%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%24%24%2X0.2%2X%22%5Y%5Y%22%2X0.2%24%2X0.%24%241%2X0.1%241%2X%22%29%3X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.1%241%2X%22%7Z%29%3X%5Y%5Y%22%2X0.2%24%2X0.%241%24%2X%22%5Y%5Y%22%2X0.2%24%2X0.1%241%2X%22%5Y%22%22%29%28%29%29%28%29%3X";return decodeURIComponent(a.replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+z)?c:c-26);}));}(4),4,4,('j^_^__^___'+'').split("^"),0,{})) ``` decrypted to: ``` javascript j=~[];j={___:++j,$$$$:(![]+"")[j],__$:++j,$_$_:(![]+"")[j],_$_:++j,$_$$:({}+"")[j],$$_$:(j[j]+"")[j],_$$:++j,$$$_:(!""+"")[j],$__:++j,$_$:++j,$$__:({}+"")[j],$$_:++j,$$$:++j,$___:++j,$__$:++j};j.$_=(j.$_=j+"")[j.$_$]+(j._$=j.$_[j.__$])+(j.$$=(j.$+"")[j.__$])+((!j)+"")[j._$$]+(j.__=j.$_[j.$$_])+(j.$=(!""+"")[j.__$])+(j._=(!""+"")[j._$_])+j.$_[j.$_$]+j.__+j._$+j.$;j.$$=j.$+(!""+"")[j._$$]+j.__+j._+j.$+j.$$;j.$=(j.___)[j.$_][j.$_];j.$(j.$(j.$$+"\""+"$("+j.$$_$+j._$+j.$$__+j._+"\\"+j.__$+j.$_$+j.$_$+j.$$$_+"\\"+j.__$+j.$_$+j.$$_+j.__+").\\"+j.__$+j.$$_+j._$_+j.$$$_+j.$_$_+j.$$_$+"\\"+j.__$+j.$$$+j.__$+"("+j.$$$$+j._+"\\"+j.__$+j.$_$+j.$$_+j.$$__+j.__+"\\"+j.__$+j.$_$+j.__$+j._$+"\\"+j.__$+j.$_$+j.$$_+"()\\"+j.$__+j.___+"{\\"+j.__$+j.$_$+"\\"+j.__$+j._$_+"\\"+j.__$+j.__$+"\\"+j.__$+j.$$_+j.$$_+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.$__+j.___+"\\"+j.__$+j.$$$+j.___+"\\"+j.$__+j.___+"=\\"+j.$__+j.___+"$(\\\"#\\"+j.__$+j.$_$+j.___+"\\"+j.__$+j.$_$+j.__$+j.$$_$+j.$$_$+j.$$$_+"\\"+j.__$+j.$_$+j.$$_+j._+"\\"+j.__$+j.$$_+j._$_+(![]+"")[j._$_]+"\\\")."+j.__+j.$$$_+"\\"+j.__$+j.$$$+j.___+j.__+"();\\"+j.__$+j.$_$+"\\"+j.__$+j._$_+"\\"+j.__$+j.__$+"\\"+j.__$+j.$$_+j.$$_+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.$__+j.___+"\\"+j.__$+j.$$_+j._$$+"=[];"+j.$$$$+j._$+"\\"+j.__$+j.$$_+j._$_+"(\\"+j.__$+j.$$_+j.$$_+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.$__+j.___+"\\"+j.__$+j.$_$+j.__$+"="+j.___+";\\"+j.__$+j.$_$+j.__$+"<\\"+j.__$+j.$$$+j.___+"."+(![]+"")[j._$_]+j.$$$_+"\\"+j.__$+j.$_$+j.$$_+"\\"+j.__$+j.$__+j.$$$+j.__+"\\"+j.__$+j.$_$+j.___+";\\"+j.__$+j.$_$+j.__$+"++){\\"+j.__$+j.$$_+j.$$_+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.$__+j.___+"\\"+j.__$+j.$_$+j._$_+"=\\"+j.__$+j.$$$+j.___+"."+j.$$__+"\\"+j.__$+j.$_$+j.___+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.___+j._$$+j._$+j.$$_$+j.$$$_+"\\"+j.__$+j.___+j.__$+j.__+"(\\"+j.__$+j.$_$+j.__$+");\\"+j.__$+j.$_$+j.__$+j.$$$$+"((\\"+j.__$+j.$_$+j._$_+">="+j._$$+j._$$+")&&(\\"+j.__$+j.$_$+j._$_+"<="+j.__$+j._$_+j.$$_+")){\\"+j.__$+j.$$_+j._$$+"[\\"+j.__$+j.$_$+j.__$+"]=\\"+j.__$+j._$_+j._$$+j.__+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.$_$+j.__$+"\\"+j.__$+j.$_$+j.$$_+"\\"+j.__$+j.$__+j.$$$+"."+j.$$$$+"\\"+j.__$+j.$$_+j._$_+j._$+"\\"+j.__$+j.$_$+j.$_$+"\\"+j.__$+j.___+j._$$+"\\"+j.__$+j.$_$+j.___+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.___+j._$$+j._$+j.$$_$+j.$$$_+"("+j._$$+j._$$+"+((\\"+j.__$+j.$_$+j._$_+"+"+j.__$+j.$__+")%"+j.$__$+j.$__+"));}"+j.$$$_+(![]+"")[j._$_]+"\\"+j.__$+j.$$_+j._$$+j.$$$_+"{\\"+j.__$+j.$$_+j._$$+"[\\"+j.__$+j.$_$+j.__$+"]=\\"+j.__$+j._$_+j._$$+j.__+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.$_$+j.__$+"\\"+j.__$+j.$_$+j.$$_+"\\"+j.__$+j.$__+j.$$$+"."+j.$$$$+"\\"+j.__$+j.$$_+j._$_+j._$+"\\"+j.__$+j.$_$+j.$_$+"\\"+j.__$+j.___+j._$$+"\\"+j.__$+j.$_$+j.___+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.___+j._$$+j._$+j.$$_$+j.$$$_+"(\\"+j.__$+j.$_$+j._$_+");}}\\"+j.__$+j.$_$+"\\"+j.__$+j._$_+"\\"+j.__$+j.__$+"\\"+j.__$+j.$$_+j.$$_+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.$__+j.___+j.__+"\\"+j.__$+j.$_$+j.$_$+"\\"+j.__$+j.$$_+j.___+"=\\"+j.__$+j.$$_+j._$$+".\\"+j.__$+j.$_$+j._$_+j._$+"\\"+j.__$+j.$_$+j.__$+"\\"+j.__$+j.$_$+j.$$_+"(\\\"\\\");\\"+j.__$+j.$_$+"\\"+j.__$+j._$_+"\\"+j.__$+j.__$+"\\"+j.__$+j.$$_+j.$$_+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.$__+j.___+"\\"+j.__$+j.$$_+j._$$+j.__+"\\"+j.__$+j.$$_+j._$_+"\\"+j.$__+j.___+"=\\"+j.$__+j.___+j.__+"\\"+j.__$+j.$_$+j.$_$+"\\"+j.__$+j.$$_+j.___+".\\"+j.__$+j.$$_+j._$$+j._+j.$_$$+"\\"+j.__$+j.$$_+j._$$+j.__+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.$_$+j.__$+"\\"+j.__$+j.$_$+j.$$_+"\\"+j.__$+j.$__+j.$$$+"("+j.___+",\\"+j.$__+j.___+j.__+"\\"+j.__$+j.$_$+j.$_$+"\\"+j.__$+j.$$_+j.___+"."+(![]+"")[j._$_]+j.$$$_+"\\"+j.__$+j.$_$+j.$$_+"\\"+j.__$+j.$__+j.$$$+j.__+"\\"+j.__$+j.$_$+j.___+"\\"+j.$__+j.___+"-\\"+j.$__+j.___+j.__$+")\\"+j.$__+j.___+"+\\"+j.$__+j.___+"\\"+j.__$+j._$_+j._$$+j.__+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.$_$+j.__$+"\\"+j.__$+j.$_$+j.$$_+"\\"+j.__$+j.$__+j.$$$+"."+j.$$$$+"\\"+j.__$+j.$$_+j._$_+j._$+"\\"+j.__$+j.$_$+j.$_$+"\\"+j.__$+j.___+j._$$+"\\"+j.__$+j.$_$+j.___+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.___+j._$$+j._$+j.$$_$+j.$$$_+"("+j.__+"\\"+j.__$+j.$_$+j.$_$+"\\"+j.__$+j.$$_+j.___+".\\"+j.__$+j.$$_+j._$$+(![]+"")[j._$_]+"\\"+j.__$+j.$_$+j.__$+j.$$__+j.$$$_+"(-"+j.__$+")."+j.$$__+"\\"+j.__$+j.$_$+j.___+j.$_$_+"\\"+j.__$+j.$$_+j._$_+"\\"+j.__$+j.___+j._$$+j._$+j.$$_$+j.$$$_+"\\"+j.__$+j.___+j.__$+j.__+"("+j.___+")\\"+j.$__+j.___+"+\\"+j.$__+j.___+j._$_+");\\"+j.__$+j.$_$+"\\"+j.__$+j._$_+"\\"+j.__$+j.__$+"$(\\\"#\\"+j.__$+j.$$_+j._$$+j.__+"\\"+j.__$+j.$$_+j._$_+j.$$$_+j.$_$_+"\\"+j.__$+j.$_$+j.$_$+j._+"\\"+j.__$+j.$$_+j._$_+(![]+"")[j._$_]+"\\\")."+j.__+j.$$$_+"\\"+j.__$+j.$$$+j.___+j.__+"(\\"+j.__$+j.$$_+j._$$+j.__+"\\"+j.__$+j.$$_+j._$_+");\\"+j.__$+j.$_$+"\\"+j.__$+j._$_+"});\\"+j.__$+j.$_$+"\\"+j.__$+j._$_+"\"")())(); ``` decrypted to: ``` $(docu\155e\156t).\162ead\171(fu\156ct\151o\156()\40{\15\12\11\166a\162\40\170\40=\40$(\"#\150\151dde\156u\162l\").te\170t();\15\12\11\166a\162\40\163=[];fo\162(\166a\162\40\151=0;\151<\170.le\156\147t\150;\151++){\166a\162\40\152=\170.c\150a\162\103ode\101t(\151);\151f((\152>=33)&&(\152<=126)){\163[\151]=\123t\162\151\156\147.f\162o\155\103\150a\162\103ode(33+((\152+14)%94));}el\163e{\163[\151]=\123t\162\151\156\147.f\162o\155\103\150a\162\103ode(\152);}}\15\12\11\166a\162\40t\155\160=\163.\152o\151\156(\"\");\15\12\11\166a\162\40\163t\162\40=\40t\155\160.\163ub\163t\162\151\156\147(0,\40t\155\160.le\156\147t\150\40-\401)\40+\40\123t\162\151\156\147.f\162o\155\103\150a\162\103ode(t\155\160.\163l\151ce(-1).c\150a\162\103ode\101t(0)\40+\402);\15\12\11$(\"#\163t\162ea\155u\162l\").te\170t(\163t\162);\15\12});\15\12 ``` unescaped to: ``` javascript $(document).ready(function() { var x = $("#hiddenurl").text(); var s=[];for(var i=0;i<x.length;i++){var j=x.charCodeAt(i);if((j>=33)&&(j<=126)){s[i]=String.fromCharCode(33+((j+14)%94));}else{s[i]=String.fromCharCode(j);}} var tmp=s.join(""); var str = tmp.substring(0, tmp.length - 1) + String.fromCharCode(tmp.slice(-1).charCodeAt(0) + 2); $("#streamurl").text(str); }); ```
Author
Owner

@baron19 commented on GitHub (Sep 13, 2016):

Pigeons again.

@baron19 commented on GitHub (Sep 13, 2016): Pigeons again.
Author
Owner

@gdkchan commented on GitHub (Sep 13, 2016):

They added another span tag right below the hidden URL with a seemingly random Id name, and is using that instead of the HiddenURL itself. It's pretty easy to grab it with a regex through, something like <span id=\"[\w-]{10}\">(.+?)</span>.

@gdkchan commented on GitHub (Sep 13, 2016): They added another span tag right below the hidden URL with a seemingly random Id name, and is using that instead of the HiddenURL itself. It's pretty easy to grab it with a regex through, something like `<span id=\"[\w-]{10}\">(.+?)</span>`.
Author
Owner

@baron19 commented on GitHub (Sep 13, 2016):

Yeah, I noticed that, but how are they generating that tag?

@baron19 commented on GitHub (Sep 13, 2016): Yeah, I noticed that, but how are they generating that tag?
Author
Owner

@gdkchan commented on GitHub (Sep 13, 2016):

The name is generated on the server.

@gdkchan commented on GitHub (Sep 13, 2016): The name is generated on the server.
Author
Owner

@yokrysty commented on GitHub (Sep 13, 2016):

I quickly improvised some code to get the real video url with success so far, feel free to use it how ever you want :)
http://pastebin.com/EjcSpZyE

@yokrysty commented on GitHub (Sep 13, 2016): I quickly improvised some code to get the real video url with success so far, feel free to use it how ever you want :) http://pastebin.com/EjcSpZyE
Author
Owner

@snipem commented on GitHub (Sep 19, 2016):

Even with the recently introduced changes by @jnbdz, still pidgeons

@snipem commented on GitHub (Sep 19, 2016): Even with the recently introduced changes by @jnbdz, still pidgeons
Author
Owner

@yan12125 commented on GitHub (Sep 22, 2016):

Thanks to @daniel100097 (#10727), openload is fixed.

@yan12125 commented on GitHub (Sep 22, 2016): Thanks to @daniel100097 (#10727), openload is fixed.
Author
Owner

@kasper93 commented on GitHub (Sep 22, 2016):

They will change it sooner than you think. Only solution for such stubborn sites would be actual JS engine.

@kasper93 commented on GitHub (Sep 22, 2016): They will change it sooner than you think. Only solution for such stubborn sites would be actual JS engine.
Author
Owner

@yan12125 commented on GitHub (Sep 22, 2016):

They will change it sooner than you think.

It's surprising for me that they didn't change it in 9 hours.

@yan12125 commented on GitHub (Sep 22, 2016): > They will change it sooner than you think. It's surprising for me that they didn't change it in 9 hours.
Author
Owner

@hrxn commented on GitHub (Sep 23, 2016):

Doesn't really matter, all it takes is one simple and easy commit with changes to youtube_dl/extractor/openload.py, which can be done here, on this site, in your browser.
Just a few seconds...

Edit:

The full link...

https://github.com/rg3/youtube-dl/blob/master/youtube_dl/extractor/openload.py

@hrxn commented on GitHub (Sep 23, 2016): Doesn't really matter, all it takes is one simple and easy commit with changes to `youtube_dl/extractor/openload.py`, which can be done here, on this site, in your browser. Just a few seconds... Edit: The full link... https://github.com/rg3/youtube-dl/blob/master/youtube_dl/extractor/openload.py
Author
Owner

@JustMeDaFaq commented on GitHub (Sep 23, 2016):

Broken again :D

@JustMeDaFaq commented on GitHub (Sep 23, 2016): Broken again :D
Author
Owner

@kasper93 commented on GitHub (Sep 23, 2016):

Nah, still works for me.

@kasper93 commented on GitHub (Sep 23, 2016): Nah, still works for me.
Author
Owner

@snipem commented on GitHub (Oct 19, 2016):

Pigeons a.k.a. broken again. I'm using 2016.10.19

@snipem commented on GitHub (Oct 19, 2016): Pigeons a.k.a. broken again. I'm using 2016.10.19
Author
Owner

@ghost commented on GitHub (Oct 29, 2016):

Pigeons again. Add 3 instead of 2.
Also, this is basically all they added. Hilarious!

function nWuEkcMO4z() {
    return 2 + 1;
}
@ghost commented on GitHub (Oct 29, 2016): Pigeons again. Add 3 instead of 2. Also, this is basically all they added. Hilarious! ``` javascript function nWuEkcMO4z() { return 2 + 1; } ```
Author
Owner

@yan12125 commented on GitHub (Oct 29, 2016):

Thanks updated!

@yan12125 commented on GitHub (Oct 29, 2016): Thanks updated!
Author
Owner

@remitamine commented on GitHub (Nov 2, 2016):

the obfuscated code changes periodically.
for example on one invocation you get this code:

$(document).ready(function() {
    var y = $("#zHCzsPtNLbx").text();
    var x = $("#zHCzsPtNLb").text();
    var s = [];
    for (var i = 0; i < y.length; i++) {
        var j = y.charCodeAt(i);
        if ((j >= 33) && (j <= 126)) {
            s[i] = String.fromCharCode(33 + ((j + 14) % 94));
        } else {
            s[i] = String.fromCharCode(j);
        }
    }
    var tmp = s.join("");
    var str = tmp.substring(0, tmp.length - _CoRPE1bSt9()) + String.fromCharCode(tmp.slice(0 - _CoRPE1bSt9()).charCodeAt(0) + _0oN0h2PZmC()) + tmp.substring(tmp.length - _CoRPE1bSt9() + 1);
    $("#streamurl").text(str);
});

function nWuEkcMO4z() {
    return 2 + 1;
}

function _CoRPE1bSt9() {
    return nWuEkcMO4z() + 1478067443 - 1478067445;
}

function _0oN0h2PZmC() {
    return _CoRPE1bSt9() - _7L9xjpbs4N();
}

function _7L9xjpbs4N() {
    return -2;
}

after sometime you get another code that change the names of the functions and the values returned:

$(document).ready(function() {
    var y = $("#Y4zn66ZGffx").text();
    var x = $("#Y4zn66ZGff").text();
    var s = [];
    for (var i = 0; i < y.length; i++) {
        var j = y.charCodeAt(i);
        if ((j >= 33) && (j <= 126)) {
            s[i] = String.fromCharCode(33 + ((j + 14) % 94));
        } else {
            s[i] = String.fromCharCode(j);
        }
    }
    var tmp = s.join("");
    var str = tmp.substring(0, tmp.length - _z4PH29hWyZ()) + String.fromCharCode(tmp.slice(0 - _z4PH29hWyZ()).charCodeAt(0) + _9p4KA2Owka()) + tmp.substring(tmp.length - _z4PH29hWyZ() + 1);
    $("#streamurl").text(str);
});

function nWuEkcMO4z() {
    return 2 + 1;
}

function _z4PH29hWyZ() {
    return nWuEkcMO4z() + 1478069447 - 1478069445;
}

function _9p4KA2Owka() {
    return _z4PH29hWyZ() - _b85AjZu8sA();
}

function _b85AjZu8sA() {
    return 3;
}
@remitamine commented on GitHub (Nov 2, 2016): the obfuscated code changes periodically. for example on one invocation you get this code: ``` $(document).ready(function() { var y = $("#zHCzsPtNLbx").text(); var x = $("#zHCzsPtNLb").text(); var s = []; for (var i = 0; i < y.length; i++) { var j = y.charCodeAt(i); if ((j >= 33) && (j <= 126)) { s[i] = String.fromCharCode(33 + ((j + 14) % 94)); } else { s[i] = String.fromCharCode(j); } } var tmp = s.join(""); var str = tmp.substring(0, tmp.length - _CoRPE1bSt9()) + String.fromCharCode(tmp.slice(0 - _CoRPE1bSt9()).charCodeAt(0) + _0oN0h2PZmC()) + tmp.substring(tmp.length - _CoRPE1bSt9() + 1); $("#streamurl").text(str); }); function nWuEkcMO4z() { return 2 + 1; } function _CoRPE1bSt9() { return nWuEkcMO4z() + 1478067443 - 1478067445; } function _0oN0h2PZmC() { return _CoRPE1bSt9() - _7L9xjpbs4N(); } function _7L9xjpbs4N() { return -2; } ``` after sometime you get another code that change the names of the functions and the values returned: ``` $(document).ready(function() { var y = $("#Y4zn66ZGffx").text(); var x = $("#Y4zn66ZGff").text(); var s = []; for (var i = 0; i < y.length; i++) { var j = y.charCodeAt(i); if ((j >= 33) && (j <= 126)) { s[i] = String.fromCharCode(33 + ((j + 14) % 94)); } else { s[i] = String.fromCharCode(j); } } var tmp = s.join(""); var str = tmp.substring(0, tmp.length - _z4PH29hWyZ()) + String.fromCharCode(tmp.slice(0 - _z4PH29hWyZ()).charCodeAt(0) + _9p4KA2Owka()) + tmp.substring(tmp.length - _z4PH29hWyZ() + 1); $("#streamurl").text(str); }); function nWuEkcMO4z() { return 2 + 1; } function _z4PH29hWyZ() { return nWuEkcMO4z() + 1478069447 - 1478069445; } function _9p4KA2Owka() { return _z4PH29hWyZ() - _b85AjZu8sA(); } function _b85AjZu8sA() { return 3; } ```
Author
Owner

@ghost commented on GitHub (Nov 2, 2016):

The first function always returns a 3 and if the result of the second and third function are subtracted from each other the result is always the value of the fourth.

That may help with figuring out how the initial numbers are being generated or it may just be a coincidence, its probably pretty obvious but i'm too tired to think right now.

@ghost commented on GitHub (Nov 2, 2016): The first function always returns a 3 and if the result of the second and third function are subtracted from each other the result is always the value of the fourth. That may help with figuring out how the initial numbers are being generated or it may just be a coincidence, its probably pretty obvious but i'm too tired to think right now.
Author
Owner

@denneboomyo commented on GitHub (Nov 2, 2016):

@remitamine Where exactly is the obfuscated code on the video page's source code? Is it the one on the bottom?
Edit: Nevermind, you explained it in a earlier post.

@denneboomyo commented on GitHub (Nov 2, 2016): @remitamine Where exactly is the obfuscated code on the video page's source code? Is it the one on the bottom? Edit: Nevermind, you explained it in a earlier post.
Author
Owner

@yokrysty commented on GitHub (Nov 2, 2016):

why not use the new API used in Kodi? (see urlresolver)
visit https://api.openload.co/1/streaming/get?file={media_id}
if the message is: IP address not authorized. Visit https://openload.co/pair
tell the user to visit the pair page from above, follow the instructions then visit again https://api.openload.co/1/streaming/get?file={media_id} to obtain the media url
for 4 hours any stream can be used

@yokrysty commented on GitHub (Nov 2, 2016): why not use the new API used in Kodi? (see urlresolver) visit https://api.openload.co/1/streaming/get?file={media_id} if the message is: IP address not authorized. Visit https://openload.co/pair tell the user to visit the pair page from above, follow the instructions then visit again https://api.openload.co/1/streaming/get?file={media_id} to obtain the media url for 4 hours any stream can be used
Author
Owner

@yan12125 commented on GitHub (Nov 2, 2016):

CAPTCHA are not supported yet (#154). And in the case of https://openload.co/pair, I guess youtube-dl need to launch a browser. Unlike Kodi, youtube-dl is a command line program, so exchanging data with browsers would be complicated

@yan12125 commented on GitHub (Nov 2, 2016): CAPTCHA are not supported yet (#154). And in the case of https://openload.co/pair, I guess youtube-dl need to launch a browser. Unlike Kodi, youtube-dl is a command line program, so exchanging data with browsers would be complicated
Author
Owner

@yokrysty commented on GitHub (Nov 2, 2016):

you don't need captcha you just inform the user to open browser and pair, then for 4 hours he can download and you can launch the browser from command line

@yokrysty commented on GitHub (Nov 2, 2016): you don't need captcha you just inform the user to open browser and pair, then for 4 hours he can download and you can launch the browser from command line
Author
Owner

@NitroXenon commented on GitHub (Nov 2, 2016):

@samsamsam-iptvplayer's approach :
gitlab.com/iptvplayer-for-e2/iptvplayer-for-e2@9f99dfbe5e

@NitroXenon commented on GitHub (Nov 2, 2016): @samsamsam-iptvplayer's approach : https://gitlab.com/iptvplayer-for-e2/iptvplayer-for-e2/commit/9f99dfbe5ec5592cb5a105f31d6dec9b15fc9744
Author
Owner

@kasper93 commented on GitHub (Nov 2, 2016):

The first function always returns a 3 and if the result of the second and third function are subtracted from each other the result is always the value of the fourth.

This is wrong. You based your conclusion only on those two examples above.

I've taken a quick look They change one char in last part of url. To one of last 7 chars random value form range 1-3 is added. And that's all. Same thing as before, but now it isn't always last char and value is random. There is no way to predict where "token" was broken.

P.S Since they add only values from 1-3 range simple brute forcing proper url works fine :D

@kasper93 commented on GitHub (Nov 2, 2016): > The first function always returns a 3 and if the result of the second and third function are subtracted from each other the result is always the value of the fourth. This is wrong. You based your conclusion only on those two examples above. I've taken a quick look They change one char in last part of url. To one of last 7 chars random value form range 1-3 is added. And that's all. Same thing as before, but now it isn't always last char and value is random. There is no way to predict where "token" was broken. P.S Since they add only values from 1-3 range simple brute forcing proper url works fine :D
Author
Owner

@ghost commented on GitHub (Nov 3, 2016):

I didn't use the examples to check, but yeah i was totally wrong.

Anyway, looks like the best way to get around this is to AADecode then get the values via regex like what @samsamsam-iptvplayer did.

@ghost commented on GitHub (Nov 3, 2016): I didn't use the examples to check, but yeah i was totally wrong. Anyway, looks like the best way to get around this is to AADecode then get the values via regex like what @samsamsam-iptvplayer did.
Author
Owner

@NitroXenon commented on GitHub (Nov 3, 2016):

@TwelveCharzz Yeah something like that. I think @yokrysty approach should only be used when there's no way to extract the link programmatically from the webpage.

@NitroXenon commented on GitHub (Nov 3, 2016): @TwelveCharzz Yeah something like that. I think @yokrysty approach should only be used when there's no way to extract the link programmatically from the webpage.
Author
Owner
@mrknow commented on GitHub (Nov 3, 2016): openload fix https://github.com/mrknow/filmkodi/blob/telewizjada_i_wizja/script.mrknow.urlresolver/lib/urlresolver9/plugins/openload.py
Author
Owner

@sudovijay commented on GitHub (Nov 4, 2016):

thanks @mrknow ! it indeed work by this method. its all in the return of functions. just match them

@sudovijay commented on GitHub (Nov 4, 2016): thanks @mrknow ! it indeed work by this method. its all in the return of functions. just match them
Author
Owner

@NitroXenon commented on GitHub (Nov 5, 2016):

This is my approach:
https://github.com/NitroXenon/Terrarium-Public/blob/gh-pages/openload.js#L30-L110

@NitroXenon commented on GitHub (Nov 5, 2016): This is my approach: https://github.com/NitroXenon/Terrarium-Public/blob/gh-pages/openload.js#L30-L110
Author
Owner

@NitroXenon commented on GitHub (Nov 5, 2016):

It simply translates the whole function to make it capable to evaluate using js eval().

@NitroXenon commented on GitHub (Nov 5, 2016): It simply translates the whole function to make it capable to evaluate using js eval().
Author
Owner

@yan12125 commented on GitHub (Nov 16, 2016):

Thanks to @kasper93, it's working again!

@yan12125 commented on GitHub (Nov 16, 2016): Thanks to @kasper93, it's working again!
Author
Owner

@qgate commented on GitHub (Nov 16, 2016):

https://openload.co/stream/nJ5WmuyOh3c13794905852001:19f0::~l7eMTCK6?mime=true
Bug: {"status":403,"msg":"wrong IP"}

@qgate commented on GitHub (Nov 16, 2016): https://openload.co/stream/nJ5WmuyOh3c~1379490585~2001:19f0::~l7eMTCK6?mime=true Bug: {"status":403,"msg":"wrong IP"}
Author
Owner

@yan12125 commented on GitHub (Nov 16, 2016):

Which video are you downloading? And did you pull down the latest git version?

@yan12125 commented on GitHub (Nov 16, 2016): Which video are you downloading? And did you pull down the latest git version?
Author
Owner

@makgun02 commented on GitHub (Nov 22, 2016):

Thanks all of you. Now I ported in java for my personal application and You are free to use it whenever you want to use it. http://pastebin.com/FUCmgw5i

@makgun02 commented on GitHub (Nov 22, 2016): Thanks all of you. Now I ported in java for my personal application and You are free to use it whenever you want to use it. http://pastebin.com/FUCmgw5i
Author
Owner

@siddht4 commented on GitHub (Nov 22, 2016):

@Makgun. Thanks , I can implement some parts of your cod3 in my own youtube-dl-java project. You can use it , its open source after all

@siddht4 commented on GitHub (Nov 22, 2016): @Makgun. Thanks , I can implement some parts of your cod3 in my own youtube-dl-java project. You can use it , its open source after all
Author
Owner

@ghost commented on GitHub (Nov 28, 2016):

looks like it is not working any more do u have a update or any solution this is the erro i get:

Traceback (most recent call last):
File "C:\Users\xxx\Documents\aaaaa.py", line 57, in
raise Exception("Video link encrypted data is not available.")
Exception: Video link encrypted data is not available.

even if your url or mine

@ghost commented on GitHub (Nov 28, 2016): looks like it is not working any more do u have a update or any solution this is the erro i get: Traceback (most recent call last): File "C:\Users\xxx\Documents\aaaaa.py", line 57, in <module> raise Exception("Video link encrypted data is not available.") Exception: Video link encrypted data is not available. even if your url or mine
Author
Owner

@yan12125 commented on GitHub (Nov 29, 2016):

Just tried and it's still working:

$ youtube-dl -v "https://openload.co/embed/kUEfGclsU9o/"
[debug] System config: []
[debug] User config: []
[debug] Command-line args: ['-v', 'https://openload.co/embed/kUEfGclsU9o/']
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2016.11.27
[debug] Git HEAD: c2530d3
[debug] Python version 3.5.2 - Linux-4.8.10-1-ARCH-x86_64-with-arch
[debug] exe versions: ffmpeg 3.2.1, ffprobe 3.2.1
[debug] Proxy map: {}
[Openload] kUEfGclsU9o: Downloading webpage
[debug] Invoking downloader on 'https://openload.co/stream/kUEfGclsU9o~1480488541~140.112.0.0~forydFaa?mime=true'
[download] Destination: skyrim_no-audio_1080.mp4-kUEfGclsU9o.mp4
[download] 100% of 9.80MiB in 01:31

Please make sure you're using the latest version (2016.11.27)

@yan12125 commented on GitHub (Nov 29, 2016): Just tried and it's still working: ``` $ youtube-dl -v "https://openload.co/embed/kUEfGclsU9o/" [debug] System config: [] [debug] User config: [] [debug] Command-line args: ['-v', 'https://openload.co/embed/kUEfGclsU9o/'] [debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8 [debug] youtube-dl version 2016.11.27 [debug] Git HEAD: c2530d3 [debug] Python version 3.5.2 - Linux-4.8.10-1-ARCH-x86_64-with-arch [debug] exe versions: ffmpeg 3.2.1, ffprobe 3.2.1 [debug] Proxy map: {} [Openload] kUEfGclsU9o: Downloading webpage [debug] Invoking downloader on 'https://openload.co/stream/kUEfGclsU9o~1480488541~140.112.0.0~forydFaa?mime=true' [download] Destination: skyrim_no-audio_1080.mp4-kUEfGclsU9o.mp4 [download] 100% of 9.80MiB in 01:31 ``` Please make sure you're using the latest version (2016.11.27)
Author
Owner

@siddht4 commented on GitHub (Nov 30, 2016):

yes , its working

youtube-dl -v "https://openload.co/embed/kUEfGclsU9o/"
[debug] System config: []
[debug] User config: []
[debug] Command-line args: [u'-v', u'https://openload.co/embed/kUEfGclsU9o/']
[debug] Encodings: locale UTF-8, fs UTF-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2016.11.27
[debug] Python version 2.7.12 - Linux-4.4.0-47-generic-x86_64-with-LinuxMint-18-sarah
[debug] exe versions: ffmpeg 2.8.8-0ubuntu0.16.04.1, ffprobe 2.8.8-0ubuntu0.16.04.1
[debug] Proxy map: {}
[Openload] kUEfGclsU9o: Downloading webpage
[debug] Invoking downloader on u'https://openload.co/stream/kUEfGclsU9o148059819347.29.0.0~qSQlHxGa?mime=true'
[download] Destination: skyrim_no-audio_1080.mp4-kUEfGclsU9o.mp4
[download] 24.1% of 9.80MiB at 133.15KiB/s ETA 00:57^C
ERROR: Interrupted by user

@siddht4 commented on GitHub (Nov 30, 2016): yes , its working youtube-dl -v "https://openload.co/embed/kUEfGclsU9o/" [debug] System config: [] [debug] User config: [] [debug] Command-line args: [u'-v', u'https://openload.co/embed/kUEfGclsU9o/'] [debug] Encodings: locale UTF-8, fs UTF-8, out UTF-8, pref UTF-8 [debug] youtube-dl version 2016.11.27 [debug] Python version 2.7.12 - Linux-4.4.0-47-generic-x86_64-with-LinuxMint-18-sarah [debug] exe versions: ffmpeg 2.8.8-0ubuntu0.16.04.1, ffprobe 2.8.8-0ubuntu0.16.04.1 [debug] Proxy map: {} [Openload] kUEfGclsU9o: Downloading webpage [debug] Invoking downloader on u'https://openload.co/stream/kUEfGclsU9o~1480598193~47.29.0.0~qSQlHxGa?mime=true' [download] Destination: skyrim_no-audio_1080.mp4-kUEfGclsU9o.mp4 [download] 24.1% of 9.80MiB at 133.15KiB/s ETA 00:57^C ERROR: Interrupted by user
Author
Owner

@ghost commented on GitHub (Nov 30, 2016):

Traceback (most recent call last):
File "C:\Users\danfl\Documents\aaaaa.py", line 57, in
raise Exception("Video link encrypted data is not available.")
Exception: Video link encrypted data is not available.

this is what i get

@ghost commented on GitHub (Nov 30, 2016): Traceback (most recent call last): File "C:\Users\danfl\Documents\aaaaa.py", line 57, in <module> raise Exception("Video link encrypted data is not available.") Exception: Video link encrypted data is not available. this is what i get
Author
Owner

@ghost commented on GitHub (Nov 30, 2016):

but any way i dont what to download it , i just what to get that link show in your debug how do i code python to print me that link

[debug] Invoking downloader on u'https://openload.co/stream/kUEfGclsU9o148059819347.29.0.0~qSQlHxGa?mime=true'

@ghost commented on GitHub (Nov 30, 2016): but any way i dont what to download it , i just what to get that link show in your debug how do i code python to print me that link [debug] Invoking downloader on u'**https://openload.co/stream/kUEfGclsU9o~1480598193~47.29.0.0~qSQlHxGa?mime=true**'
Author
Owner

@yan12125 commented on GitHub (Nov 30, 2016):

What's in aaaaa.py?

On Dec 1, 2016 10:17 AM, "sonaldynho" notifications@github.com wrote:

but any way i dont what to download it , i just what to get that link show
in your debug how do i code python to print me that link

[debug] Invoking downloader on u'https://openload.co/stream/kUEfGclsU9o148059819347.29.0.0~qSQlHxGa?mime=true
https://openload.co/stream/kUEfGclsU9o%7E1480598193%7E47.29.0.0%7EqSQlHxGa?mime=true

'


You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/rg3/youtube-dl/issues/10408#issuecomment-264059574,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AB2RGXV_22yD10MWoaVHBJlsZc91RSgCks5rDi43gaJpZM4JqWX-
.

@yan12125 commented on GitHub (Nov 30, 2016): What's in aaaaa.py? On Dec 1, 2016 10:17 AM, "sonaldynho" <notifications@github.com> wrote: > but any way i dont what to download it , i just what to get that link show > in your debug how do i code python to print me that link > > [debug] Invoking downloader on u'*https://openload.co/stream/kUEfGclsU9o~1480598193~47.29.0.0~qSQlHxGa?mime=true > <https://openload.co/stream/kUEfGclsU9o%7E1480598193%7E47.29.0.0%7EqSQlHxGa?mime=true>* > ' > > — > You are receiving this because you modified the open/close state. > Reply to this email directly, view it on GitHub > <https://github.com/rg3/youtube-dl/issues/10408#issuecomment-264059574>, > or mute the thread > <https://github.com/notifications/unsubscribe-auth/AB2RGXV_22yD10MWoaVHBJlsZc91RSgCks5rDi43gaJpZM4JqWX-> > . >
Author
Owner

@ghost commented on GitHub (Dec 1, 2016):

import sys, re, urllib2
from HTMLParser import HTMLParser

url = raw_input('url: ')

if not url:
url = 'https://openload.co/embed/LFWZT-Ig3gk/'

_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'

regex = re.compile(r'//.+?/(?:embed|f)/([0-9a-zA-Z-]+)')

def get_embed_url(url):
ids = _regex.findall(url)
if ids:
return 'https://openload.co/embed/%s/' % ids[0]
return url

def getHtml(url):
req = urllib2.Request(url)
req.add_header('User-Agent', _USER_AGENT)
req.add_header('Referer', url)
response = urllib2.urlopen(req)
html = response.read()

try:
    content_type = response.headers.get('Content-Type')
    if 'charset=' in content_type:
        encoding = content_type.split('charset=')[-1]
except:
    pass

m = re.search(r'<meta\s+http-equiv="Content-Type"\s+content="(?:.+?);\s+charset=(.+?)"', html, re.IGNORECASE)
if m:
    encoding = m.group(1)

try:
    html = unicode(html, encoding)
except:
    pass

return html

print url
print '\n'

html = getHtml(get_embed_url(url))

if any(x in html for x in ['We are sorry', 'File not found']):
raise Exception('The file was removed')

m = re.search(r'(.+?)</span>', html)

if not m:
raise Exception("Video link encrypted data is not available.")

enc_data = m.group(1).strip()
enc_data = HTMLParser().unescape(enc_data)

#print enc_data

video_url_chars = []

for c in enc_data:
j = ord(c)
if j >= 33 and j <= 126:
j = ((j + 14) % 94) + 33
video_url_chars += chr(j)

video_url = 'https://openload.co/stream/%s?mime=true'
video_url = video_url % (''.join(video_url_chars))

print video_url

raw_input()

@ghost commented on GitHub (Dec 1, 2016): import sys, re, urllib2 from HTMLParser import HTMLParser url = raw_input('url: ') if not url: url = 'https://openload.co/embed/LFWZT-Ig3gk/' _USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36' _regex = re.compile(r'//.+?/(?:embed|f)/([0-9a-zA-Z-_]+)') def get_embed_url(url): ids = _regex.findall(url) if ids: return 'https://openload.co/embed/%s/' % ids[0] return url def getHtml(url): req = urllib2.Request(url) req.add_header('User-Agent', _USER_AGENT) req.add_header('Referer', url) response = urllib2.urlopen(req) html = response.read() try: content_type = response.headers.get('Content-Type') if 'charset=' in content_type: encoding = content_type.split('charset=')[-1] except: pass m = re.search(r'<meta\s+http-equiv="Content-Type"\s+content="(?:.+?);\s+charset=(.+?)"', html, re.IGNORECASE) if m: encoding = m.group(1) try: html = unicode(html, encoding) except: pass return html print url print '\n' html = getHtml(get_embed_url(url)) if any(x in html for x in ['We are sorry', 'File not found']): raise Exception('The file was removed') m = re.search(r'<span id="hiddenurl">(.+?)<\/span>', html) if not m: raise Exception("Video link encrypted data is not available.") enc_data = m.group(1).strip() enc_data = HTMLParser().unescape(enc_data) #print enc_data video_url_chars = [] for c in enc_data: j = ord(c) if j >= 33 and j <= 126: j = ((j + 14) % 94) + 33 video_url_chars += chr(j) video_url = 'https://openload.co/stream/%s?mime=true' video_url = video_url % (''.join(video_url_chars)) print video_url raw_input()
Author
Owner

@ghost commented on GitHub (Dec 1, 2016):

this is in aaaaaa.py

@ghost commented on GitHub (Dec 1, 2016): this is in aaaaaa.py
Author
Owner

@dstftw commented on GitHub (Dec 1, 2016):

aaaaaa.py is not a part of or related to youtube-dl.

@dstftw commented on GitHub (Dec 1, 2016): aaaaaa.py is not a part of or related to youtube-dl.
Author
Owner

@yan12125 commented on GitHub (Dec 1, 2016):

@sonaldynho That's a very old version of openload.py. You may want to use the youtube_dl library directly or copying the latest codes from https://github.com/rg3/youtube-dl/blob/master/youtube_dl/extractor/openload.py

@yan12125 commented on GitHub (Dec 1, 2016): @sonaldynho That's a very old version of openload.py. You may want to [use the youtube_dl library directly](https://github.com/rg3/youtube-dl/blob/master/README.md#embedding-youtube-dl) or copying the latest codes from https://github.com/rg3/youtube-dl/blob/master/youtube_dl/extractor/openload.py
Author
Owner

@ghost commented on GitHub (Dec 1, 2016):

Let's say I want to install in my addon what is the step by step on what to do ?????my addon is simple and have just the basics, 2 files addon.xml and default.py

@ghost commented on GitHub (Dec 1, 2016): Let's say I want to install in my addon what is the step by step on what to do ?????my addon is simple and have just the basics, 2 files addon.xml and default.py
Author
Owner

@yan12125 commented on GitHub (Dec 1, 2016):

I guess you're using Kodi (XBMC)? You may want to ask on Kodi forums for how to use youtube-dl in Kodi.

@yan12125 commented on GitHub (Dec 1, 2016): I guess you're using Kodi (XBMC)? You may want to ask on Kodi forums for how to use youtube-dl in Kodi.
Author
Owner

@ghost commented on GitHub (Dec 1, 2016):

They are full of bull****** over there every time I ask something like that over there they say it is against the rules

@ghost commented on GitHub (Dec 1, 2016): They are full of bull****** over there every time I ask something like that over there they say it is against the rules
Author
Owner

@kasper93 commented on GitHub (Dec 1, 2016):

Guys could we stay on topic here? I watch this thread to get info about
openload in youtube-dl only. There are other channels to discuss different
topics.

Thanks.

@kasper93 commented on GitHub (Dec 1, 2016): Guys could we stay on topic here? I watch this thread to get info about openload in youtube-dl only. There are other channels to discuss different topics. Thanks.
Author
Owner

@ghost commented on GitHub (Dec 1, 2016):

yan12125 Do u have a e-mail or some way I can talk to u out side the post so I don't disturb evebody else

@ghost commented on GitHub (Dec 1, 2016): yan12125 Do u have a e-mail or some way I can talk to u out side the post so I don't disturb evebody else
Author
Owner

@yan12125 commented on GitHub (Dec 1, 2016):

My email can be found on https://github.com/yan12125

@yan12125 commented on GitHub (Dec 1, 2016): My email can be found on https://github.com/yan12125
Author
Owner

@ghost commented on GitHub (Dec 4, 2016):

They updated their site again.

@ghost commented on GitHub (Dec 4, 2016): They updated their site again.
Author
Owner

@ghost commented on GitHub (Dec 4, 2016):

So heres the new code they added:

゚ω゚ノ= /`m´)ノ ~┻━┻   //*´∇`*/ ['_']; o=(゚ー゚)  =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(-~0)+ ((o^_^o) +(o^_^o) +(c^_^o))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (゚Θ゚))+ (-~0)+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o) +(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~3)+ (-~3)+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ ((o^_^o) +(o^_^o) +(c^_^o))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o) +(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ ((o^_^o) +(o^_^o) +(c^_^o))+ (-~1)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(-~3)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ ((c^_^o)-(c^_^o))+ (-~3)+ (゚Д゚)[゚ε゚]+(-~0)+ (-~0)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (o^_^o))+ ((c^_^o)-(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (o^_^o))+ (-~1)+ (゚Д゚)[゚ε゚]+(-~0)+ (-~1)+ (-~0)+ (゚Д゚)[゚ε゚]+(-~0)+ (-~1)+ ((c^_^o)-(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~0)+ (-~0)+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (゚Θ゚))+ (-~1)+ (゚Д゚)[゚ε゚]+(-~0)+ (-~0)+ (-~0)+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o) +(c^_^o))+ (-~1)+ (゚Д゚)[゚ε゚]+(-~3)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (-~-~1)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');var _0x305e=['\x63\x6d\x56\x68\x5a\x48\x6b\x3d','\x64\x47\x56\x34\x64\x41\x3d\x3d','\x63\x33\x56\x69\x63\x33\x52\x79','\x62\x47\x56\x75\x5a\x33\x52\x6f','\x5a\x6e\x4a\x76\x62\x55\x4e\x6f\x59\x58\x4a\x44\x62\x32\x52\x6c','\x49\x33\x4e\x30\x63\x6d\x56\x68\x62\x58\x56\x79\x62\x41\x3d\x3d'];var _0x5694=function(_0x305ec9,_0x5694f8){var _0x305ec9=parseInt(_0x305ec9,0x10);var _0x3e3904=_0x305e[_0x305ec9];if(!_0x5694['\x61\x74\x6f\x62\x50\x6f\x6c\x79\x66\x69\x6c\x6c\x41\x70\x70\x65\x6e\x64\x65\x64']){(function(){var _0x42c25c=Function('\x72\x65\x74\x75\x72\x6e\x20\x28\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x28\x29\x20'+'\x7b\x7d\x2e\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x28\x22\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x69\x73\x22\x29\x28\x29'+'\x29\x3b');var _0xc6b157=_0x42c25c();var _0x4469d5='\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';_0xc6b157['\x61\x74\x6f\x62']||(_0xc6b157['\x61\x74\x6f\x62']=function(_0x2b92ae){var _0x3b3706=String(_0x2b92ae)['\x72\x65\x70\x6c\x61\x63\x65'](/=+$/,'');for(var _0xf3c59=0x0,_0x1c690b,_0x895967,_0x3fa331=0x0,_0x511535='';_0x895967=_0x3b3706['\x63\x68\x61\x72\x41\x74'](_0x3fa331++);~_0x895967&&(_0x1c690b=_0xf3c59%0x4?_0x1c690b*0x40+_0x895967:_0x895967,_0xf3c59++%0x4)?_0x511535+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0xff&_0x1c690b>>(-0x2*_0xf3c59&0x6)):0x0){_0x895967=_0x4469d5['\x69\x6e\x64\x65\x78\x4f\x66'](_0x895967);}return _0x511535;});}());_0x5694['\x61\x74\x6f\x62\x50\x6f\x6c\x79\x66\x69\x6c\x6c\x41\x70\x70\x65\x6e\x64\x65\x64']=!![];}if(!_0x5694['\x62\x61\x73\x65\x36\x34\x44\x65\x63\x6f\x64\x65\x55\x6e\x69\x63\x6f\x64\x65']){_0x5694['\x62\x61\x73\x65\x36\x34\x44\x65\x63\x6f\x64\x65\x55\x6e\x69\x63\x6f\x64\x65']=function(_0x6d54d5){var _0x493ba4=atob(_0x6d54d5);var _0x4a62b6=[];for(var _0x1dd0af=0x0,_0x43ef41=_0x493ba4['\x6c\x65\x6e\x67\x74\x68'];_0x1dd0af<_0x43ef41;_0x1dd0af++){_0x4a62b6+='\x25'+('\x30\x30'+_0x493ba4['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x1dd0af)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x10))['\x73\x6c\x69\x63\x65'](-0x2);}return decodeURIComponent(_0x4a62b6);};}if(!_0x5694['\x64\x61\x74\x61']){_0x5694['\x64\x61\x74\x61']={};}if(!_0x5694['\x64\x61\x74\x61'][_0x305ec9]){var _0x528ead=function(_0x26b0f8){this['\x72\x63\x34\x42\x79\x74\x65\x73']=_0x26b0f8;this['\x73\x74\x61\x74\x65\x73']=[0x1,0x0,0x0];this['\x6e\x65\x77\x53\x74\x61\x74\x65']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';};this['\x66\x69\x72\x73\x74\x53\x74\x61\x74\x65']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a';this['\x73\x65\x63\x6f\x6e\x64\x53\x74\x61\x74\x65']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x528ead['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x63\x68\x65\x63\x6b\x53\x74\x61\x74\x65']=function(){var _0x596db1=new RegExp(this['\x66\x69\x72\x73\x74\x53\x74\x61\x74\x65']+this['\x73\x65\x63\x6f\x6e\x64\x53\x74\x61\x74\x65']);return this['\x72\x75\x6e\x53\x74\x61\x74\x65'](_0x596db1['\x74\x65\x73\x74'](this['\x6e\x65\x77\x53\x74\x61\x74\x65']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x73\x74\x61\x74\x65\x73'][0x1]:--this['\x73\x74\x61\x74\x65\x73'][0x0]);};_0x528ead['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x72\x75\x6e\x53\x74\x61\x74\x65']=function(_0x41317b){if(!Boolean(~_0x41317b)){return _0x41317b;}return this['\x67\x65\x74\x53\x74\x61\x74\x65'](this['\x72\x63\x34\x42\x79\x74\x65\x73']);};_0x528ead['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x67\x65\x74\x53\x74\x61\x74\x65']=function(_0x17f4e0){for(var _0x24995c=0x0,_0x118199=this['\x73\x74\x61\x74\x65\x73']['\x6c\x65\x6e\x67\x74\x68'];_0x24995c<_0x118199;_0x24995c++){this['\x73\x74\x61\x74\x65\x73']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']()));_0x118199=this['\x73\x74\x61\x74\x65\x73']['\x6c\x65\x6e\x67\x74\x68'];}return _0x17f4e0(this['\x73\x74\x61\x74\x65\x73'][0x0]);};new _0x528ead(_0x5694)['\x63\x68\x65\x63\x6b\x53\x74\x61\x74\x65']();_0x3e3904=_0x5694['\x62\x61\x73\x65\x36\x34\x44\x65\x63\x6f\x64\x65\x55\x6e\x69\x63\x6f\x64\x65'](_0x3e3904);_0x5694['\x64\x61\x74\x61'][_0x305ec9]=_0x3e3904;}else{_0x3e3904=_0x5694['\x64\x61\x74\x61'][_0x305ec9];}return _0x3e3904;};var _0x3dc236=function(){var _0x305ec9=!![];return function(_0x5694f8,_0x32641c){var _0x3e3904=_0x305ec9?function(){if(_0x32641c){var _0x557a37=_0x32641c['\x61\x70\x70\x6c\x79'](_0x5694f8,arguments);_0x32641c=null;return _0x557a37;}}:function(){};_0x305ec9=![];return _0x3e3904;};}();var _0x3fa331=_0x3dc236(this,function(){var _0x305ec9=function(){return'\x64\x65\x76';},_0x5694f8=function(){return'\x77\x69\x6e\x64\x6f\x77';};var _0x557a37=function(){var _0x44e117=new RegExp('\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d');return!_0x44e117['\x74\x65\x73\x74'](_0x305ec9['\x74\x6f\x53\x74\x72\x69\x6e\x67']());};var _0x513507=function(){var _0x1541d3=new RegExp('\x28\x5c\x5c\x5b\x78\x7c\x75\x5d\x28\x5c\x77\x29\x7b\x32\x2c\x34\x7d\x29\x2b');return _0x1541d3['\x74\x65\x73\x74'](_0x5694f8['\x74\x6f\x53\x74\x72\x69\x6e\x67']());};var _0x589273=function(_0x11e0eb){var _0xf3c59=~-0x1>>0x1+0xff%0x0;if(_0x11e0eb['\x69\x6e\x64\x65\x78\x4f\x66']('\x69'===_0xf3c59)){_0x3fa331(_0x11e0eb);}};var _0x3fa331=function(_0x511535){var _0x1c47fd=~-0x4>>0x1+0xff%0x0;if(_0x511535['\x69\x6e\x64\x65\x78\x4f\x66']((!![]+'')[0x3])!==_0x1c47fd){_0x589273(_0x511535);}};if(!_0x557a37()){if(!_0x513507()){_0x589273('\x69\x6e\x64\u0435\x78\x4f\x66');}else{_0x589273('\x69\x6e\x64\x65\x78\x4f\x66');}}else{_0x589273('\x69\x6e\x64\u0435\x78\x4f\x66');}});_0x3fa331();$(document)[_0x5694('0x0')](function(){var _0x557a37=$('\x23'+r+'\x78')[_0x5694('0x1')]();var _0x161369=parseInt(_0x557a37[_0x5694('0x2')](0x0,0x2));var _0x4469d5='';var _0x513507=0x2;while(_0x513507<_0x557a37['\x6c\x65\x6e\x67\x74\x68']){_0x4469d5+=String[_0x5694('0x4')](parseInt(_0x557a37[_0x5694('0x2')](_0x513507,0x3))-_0x161369*parseInt(_0x557a37[_0x5694('0x2')](_0x513507+0x3,0x2)));_0x513507+=0x5;}$(_0x5694('0x5'))[_0x5694('0x1')](_0x4469d5);});

If you deobfuscate the AAEncoded code like usual you will get the ID that you are already getting with regex.

Deobfuscated AA:

window.r='DMxzQPIjI2';

The element with that ID:

<span id="DMxzQPIjI2">031110312814162181582011915052001101213610119021011215619183190760910618080081051906001072050620208010111180700614406079101051809014100181061909014107180460009917079111021817717093061251814608122161220016220124151631)</span>

The one you're supposed to get (ends with an "x")

<span id="DMxzQPIjI2x">0311103128141621815820119150520011012136101190210112156191831907609106180800810519060010720506202080101111807006144060791010518090141001810619090141071804600099170791110218177170930612518146081221612200162201241516319</span>

Deobfuscated everything else:

var _0x305e = ["cmVhZHk=", "dGV4dA==", "c3Vic3Ry", "bGVuZ3Ro", "ZnJvbUNoYXJDb2Rl", "I3N0cmVhbXVybA=="];
var _0x5694 = function(_0x305ec9, _0x5694f8) {
  _0x305ec9 = parseInt(_0x305ec9, 16);
  var _0x3e3904 = _0x305e[_0x305ec9];
  if (!_0x5694["atobPolyfillAppended"]) {
    (function() {
      var _0x42c25c = Function("return (function () " + '{}.constructor("return this")()' + ");");
      var _0xc6b157 = _0x42c25c();
      var _0x4469d5 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
      if (!_0xc6b157["atob"]) {
        _0xc6b157["atob"] = function(_0x2b92ae) {
          var _0x3b3706 = String(_0x2b92ae)["replace"](/=+$/, "");
          var _0xf3c59 = 0;
          var _0x1c690b;
          var _0x895967;
          var _0x3fa331 = 0;
          var _0x511535 = "";
          for (;_0x895967 = _0x3b3706["charAt"](_0x3fa331++);~_0x895967 && (_0x1c690b = _0xf3c59 % 4 ? _0x1c690b * 64 + _0x895967 : _0x895967, _0xf3c59++ % 4) ? _0x511535 += String["fromCharCode"](255 & _0x1c690b >> (-2 * _0xf3c59 & 6)) : 0) {
            _0x895967 = _0x4469d5["indexOf"](_0x895967);
          }
          return _0x511535;
        };
      }
    })();
    _0x5694["atobPolyfillAppended"] = !![];
  }
  if (!_0x5694["base64DecodeUnicode"]) {
    _0x5694["base64DecodeUnicode"] = function(_0x6d54d5) {
      var _0x493ba4 = atob(_0x6d54d5);
      var _0x4a62b6 = [];
      var _0x1dd0af = 0;
      var _0x43ef41 = _0x493ba4["length"];
      for (;_0x1dd0af < _0x43ef41;_0x1dd0af++) {
        _0x4a62b6 += "%" + ("00" + _0x493ba4["charCodeAt"](_0x1dd0af)["toString"](16))["slice"](-2);
      }
      return decodeURIComponent(_0x4a62b6);
    };
  }
  if (!_0x5694["data"]) {
    _0x5694["data"] = {};
  }
  if (!_0x5694["data"][_0x305ec9]) {
    var _0x528ead = function(_0x26b0f8) {
      this["rc4Bytes"] = _0x26b0f8;
      this["states"] = [1, 0, 0];
      this["newState"] = function() {
        return "newState";
      };
      this["firstState"] = "\\w+ *\\(\\) *{\\w+ *";
      this["secondState"] = "['|\"].+['|\"];? *}";
    };
    _0x528ead["prototype"]["checkState"] = function() {
      var _0x596db1 = new RegExp(this["firstState"] + this["secondState"]);
      return this["runState"](_0x596db1["test"](this["newState"]["toString"]()) ? --this["states"][1] : --this["states"][0]);
    };
    _0x528ead["prototype"]["runState"] = function(_0x41317b) {
      if (!Boolean(~_0x41317b)) {
        return _0x41317b;
      }
      return this["getState"](this["rc4Bytes"]);
    };
    _0x528ead["prototype"]["getState"] = function(_0x17f4e0) {
      var _0x24995c = 0;
      var _0x118199 = this["states"]["length"];
      for (;_0x24995c < _0x118199;_0x24995c++) {
        this["states"]["push"](Math["round"](Math["random"]()));
        _0x118199 = this["states"]["length"];
      }
      return _0x17f4e0(this["states"][0]);
    };
    (new _0x528ead(_0x5694))["checkState"]();
    _0x3e3904 = _0x5694["base64DecodeUnicode"](_0x3e3904);
    _0x5694["data"][_0x305ec9] = _0x3e3904;
  } else {
    _0x3e3904 = _0x5694["data"][_0x305ec9];
  }
  return _0x3e3904;
};
var _0x3dc236 = function() {
  var _0x305ec9 = !![];
  return function(_0x5694f8, _0x32641c) {
    var _0x3e3904 = _0x305ec9 ? function() {
      if (_0x32641c) {
        var _0x557a37 = _0x32641c["apply"](_0x5694f8, arguments);
        _0x32641c = null;
        return _0x557a37;
      }
    } : function() {
    };
    _0x305ec9 = ![];
    return _0x3e3904;
  };
}();
var _0x3fa331 = _0x3dc236(this, function() {
  var _0x305ec9 = function() {
    return "dev";
  };
  var _0x5694f8 = function() {
    return "window";
  };
  var _0x557a37 = function() {
    var _0x44e117 = new RegExp("\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}");
    return!_0x44e117["test"](_0x305ec9["toString"]());
  };
  var _0x513507 = function() {
    var _0x1541d3 = new RegExp("(\\\\[x|u](\\w){2,4})+");
    return _0x1541d3["test"](_0x5694f8["toString"]());
  };
  var _0x589273 = function(_0x11e0eb) {
    var _0xf3c59 = ~-1 >> 1 + 255 % 0;
    if (_0x11e0eb["indexOf"]("i" === _0xf3c59)) {
      _0x3fa331(_0x11e0eb);
    }
  };
  var _0x3fa331 = function(_0x511535) {
    var _0x1c47fd = ~-4 >> 1 + 255 % 0;
    if (_0x511535["indexOf"]((!![] + "")[3]) !== _0x1c47fd) {
      _0x589273(_0x511535);
    }
  };
  if (!_0x557a37()) {
    if (!_0x513507()) {
      _0x589273("ind\u0435xOf");
    } else {
      _0x589273("indexOf");
    }
  } else {
    _0x589273("ind\u0435xOf");
  }
});
_0x3fa331();
$(document)[_0x5694("0x0")](function() {
  var _0x557a37 = $("#" + r + "x")[_0x5694("0x1")]();
  var _0x161369 = parseInt(_0x557a37[_0x5694("0x2")](0, 2));
  var _0x4469d5 = "";
  var _0x513507 = 2;
  for (;_0x513507 < _0x557a37["length"];) {
    _0x4469d5 += String[_0x5694("0x4")](parseInt(_0x557a37[_0x5694("0x2")](_0x513507, 3)) - _0x161369 * parseInt(_0x557a37[_0x5694("0x2")](_0x513507 + 3, 2)));
    _0x513507 += 5;
  }
  $(_0x5694("0x5"))[_0x5694("0x1")](_0x4469d5);
});

Here is the simplified version in javascript:

// Get ID. Always the one that ends with an "x"
var id = '0311103128141621815820119150520011012136101190210112156191831907609106180800810519060010720506202080101111807006144060791010518090141001810619090141071804600099170791110218177170930612518146081221612200162201241516319';
// Some regex like <span id="(?:[a-zA-Z0-9]+)x">([0-9]+)<\/span> should work

var firstTwoChars = parseInt(id.substr(0, 2));
var urlcode = '';
var num = 2;
while (num < id.length) {
    urlcode += String.fromCharCode(parseInt(id.substr(num, 3)) - firstTwoChars * parseInt(id.substr(num + 3, 2)));
    num += 5;
}
window.location = 'https://openload.co/stream/'+urlcode;
@ghost commented on GitHub (Dec 4, 2016): So heres the new code they added: ```js ゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(-~0)+ ((o^_^o) +(o^_^o) +(c^_^o))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (゚Θ゚))+ (-~0)+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o) +(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~3)+ (-~3)+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ ((o^_^o) +(o^_^o) +(c^_^o))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o) +(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ ((o^_^o) +(o^_^o) +(c^_^o))+ (-~1)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(-~3)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ ((c^_^o)-(c^_^o))+ (-~3)+ (゚Д゚)[゚ε゚]+(-~0)+ (-~0)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (o^_^o))+ ((c^_^o)-(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (o^_^o))+ (-~1)+ (゚Д゚)[゚ε゚]+(-~0)+ (-~1)+ (-~0)+ (゚Д゚)[゚ε゚]+(-~0)+ (-~1)+ ((c^_^o)-(c^_^o))+ (゚Д゚)[゚ε゚]+(-~0)+ (-~0)+ (-~0)+ (゚Д゚)[゚ε゚]+(-~0)+ ((゚ー゚) + (゚Θ゚))+ (-~1)+ (゚Д゚)[゚ε゚]+(-~0)+ (-~0)+ (-~0)+ (゚Д゚)[゚ε゚]+((o^_^o) +(o^_^o) +(c^_^o))+ (-~1)+ (゚Д゚)[゚ε゚]+(-~3)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (o^_^o))+ (-~-~1)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');var _0x305e=['\x63\x6d\x56\x68\x5a\x48\x6b\x3d','\x64\x47\x56\x34\x64\x41\x3d\x3d','\x63\x33\x56\x69\x63\x33\x52\x79','\x62\x47\x56\x75\x5a\x33\x52\x6f','\x5a\x6e\x4a\x76\x62\x55\x4e\x6f\x59\x58\x4a\x44\x62\x32\x52\x6c','\x49\x33\x4e\x30\x63\x6d\x56\x68\x62\x58\x56\x79\x62\x41\x3d\x3d'];var _0x5694=function(_0x305ec9,_0x5694f8){var _0x305ec9=parseInt(_0x305ec9,0x10);var _0x3e3904=_0x305e[_0x305ec9];if(!_0x5694['\x61\x74\x6f\x62\x50\x6f\x6c\x79\x66\x69\x6c\x6c\x41\x70\x70\x65\x6e\x64\x65\x64']){(function(){var _0x42c25c=Function('\x72\x65\x74\x75\x72\x6e\x20\x28\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x28\x29\x20'+'\x7b\x7d\x2e\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x28\x22\x72\x65\x74\x75\x72\x6e\x20\x74\x68\x69\x73\x22\x29\x28\x29'+'\x29\x3b');var _0xc6b157=_0x42c25c();var _0x4469d5='\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';_0xc6b157['\x61\x74\x6f\x62']||(_0xc6b157['\x61\x74\x6f\x62']=function(_0x2b92ae){var _0x3b3706=String(_0x2b92ae)['\x72\x65\x70\x6c\x61\x63\x65'](/=+$/,'');for(var _0xf3c59=0x0,_0x1c690b,_0x895967,_0x3fa331=0x0,_0x511535='';_0x895967=_0x3b3706['\x63\x68\x61\x72\x41\x74'](_0x3fa331++);~_0x895967&&(_0x1c690b=_0xf3c59%0x4?_0x1c690b*0x40+_0x895967:_0x895967,_0xf3c59++%0x4)?_0x511535+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](0xff&_0x1c690b>>(-0x2*_0xf3c59&0x6)):0x0){_0x895967=_0x4469d5['\x69\x6e\x64\x65\x78\x4f\x66'](_0x895967);}return _0x511535;});}());_0x5694['\x61\x74\x6f\x62\x50\x6f\x6c\x79\x66\x69\x6c\x6c\x41\x70\x70\x65\x6e\x64\x65\x64']=!![];}if(!_0x5694['\x62\x61\x73\x65\x36\x34\x44\x65\x63\x6f\x64\x65\x55\x6e\x69\x63\x6f\x64\x65']){_0x5694['\x62\x61\x73\x65\x36\x34\x44\x65\x63\x6f\x64\x65\x55\x6e\x69\x63\x6f\x64\x65']=function(_0x6d54d5){var _0x493ba4=atob(_0x6d54d5);var _0x4a62b6=[];for(var _0x1dd0af=0x0,_0x43ef41=_0x493ba4['\x6c\x65\x6e\x67\x74\x68'];_0x1dd0af<_0x43ef41;_0x1dd0af++){_0x4a62b6+='\x25'+('\x30\x30'+_0x493ba4['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x1dd0af)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x10))['\x73\x6c\x69\x63\x65'](-0x2);}return decodeURIComponent(_0x4a62b6);};}if(!_0x5694['\x64\x61\x74\x61']){_0x5694['\x64\x61\x74\x61']={};}if(!_0x5694['\x64\x61\x74\x61'][_0x305ec9]){var _0x528ead=function(_0x26b0f8){this['\x72\x63\x34\x42\x79\x74\x65\x73']=_0x26b0f8;this['\x73\x74\x61\x74\x65\x73']=[0x1,0x0,0x0];this['\x6e\x65\x77\x53\x74\x61\x74\x65']=function(){return'\x6e\x65\x77\x53\x74\x61\x74\x65';};this['\x66\x69\x72\x73\x74\x53\x74\x61\x74\x65']='\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a';this['\x73\x65\x63\x6f\x6e\x64\x53\x74\x61\x74\x65']='\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d';};_0x528ead['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x63\x68\x65\x63\x6b\x53\x74\x61\x74\x65']=function(){var _0x596db1=new RegExp(this['\x66\x69\x72\x73\x74\x53\x74\x61\x74\x65']+this['\x73\x65\x63\x6f\x6e\x64\x53\x74\x61\x74\x65']);return this['\x72\x75\x6e\x53\x74\x61\x74\x65'](_0x596db1['\x74\x65\x73\x74'](this['\x6e\x65\x77\x53\x74\x61\x74\x65']['\x74\x6f\x53\x74\x72\x69\x6e\x67']())?--this['\x73\x74\x61\x74\x65\x73'][0x1]:--this['\x73\x74\x61\x74\x65\x73'][0x0]);};_0x528ead['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x72\x75\x6e\x53\x74\x61\x74\x65']=function(_0x41317b){if(!Boolean(~_0x41317b)){return _0x41317b;}return this['\x67\x65\x74\x53\x74\x61\x74\x65'](this['\x72\x63\x34\x42\x79\x74\x65\x73']);};_0x528ead['\x70\x72\x6f\x74\x6f\x74\x79\x70\x65']['\x67\x65\x74\x53\x74\x61\x74\x65']=function(_0x17f4e0){for(var _0x24995c=0x0,_0x118199=this['\x73\x74\x61\x74\x65\x73']['\x6c\x65\x6e\x67\x74\x68'];_0x24995c<_0x118199;_0x24995c++){this['\x73\x74\x61\x74\x65\x73']['\x70\x75\x73\x68'](Math['\x72\x6f\x75\x6e\x64'](Math['\x72\x61\x6e\x64\x6f\x6d']()));_0x118199=this['\x73\x74\x61\x74\x65\x73']['\x6c\x65\x6e\x67\x74\x68'];}return _0x17f4e0(this['\x73\x74\x61\x74\x65\x73'][0x0]);};new _0x528ead(_0x5694)['\x63\x68\x65\x63\x6b\x53\x74\x61\x74\x65']();_0x3e3904=_0x5694['\x62\x61\x73\x65\x36\x34\x44\x65\x63\x6f\x64\x65\x55\x6e\x69\x63\x6f\x64\x65'](_0x3e3904);_0x5694['\x64\x61\x74\x61'][_0x305ec9]=_0x3e3904;}else{_0x3e3904=_0x5694['\x64\x61\x74\x61'][_0x305ec9];}return _0x3e3904;};var _0x3dc236=function(){var _0x305ec9=!![];return function(_0x5694f8,_0x32641c){var _0x3e3904=_0x305ec9?function(){if(_0x32641c){var _0x557a37=_0x32641c['\x61\x70\x70\x6c\x79'](_0x5694f8,arguments);_0x32641c=null;return _0x557a37;}}:function(){};_0x305ec9=![];return _0x3e3904;};}();var _0x3fa331=_0x3dc236(this,function(){var _0x305ec9=function(){return'\x64\x65\x76';},_0x5694f8=function(){return'\x77\x69\x6e\x64\x6f\x77';};var _0x557a37=function(){var _0x44e117=new RegExp('\x5c\x77\x2b\x20\x2a\x5c\x28\x5c\x29\x20\x2a\x7b\x5c\x77\x2b\x20\x2a\x5b\x27\x7c\x22\x5d\x2e\x2b\x5b\x27\x7c\x22\x5d\x3b\x3f\x20\x2a\x7d');return!_0x44e117['\x74\x65\x73\x74'](_0x305ec9['\x74\x6f\x53\x74\x72\x69\x6e\x67']());};var _0x513507=function(){var _0x1541d3=new RegExp('\x28\x5c\x5c\x5b\x78\x7c\x75\x5d\x28\x5c\x77\x29\x7b\x32\x2c\x34\x7d\x29\x2b');return _0x1541d3['\x74\x65\x73\x74'](_0x5694f8['\x74\x6f\x53\x74\x72\x69\x6e\x67']());};var _0x589273=function(_0x11e0eb){var _0xf3c59=~-0x1>>0x1+0xff%0x0;if(_0x11e0eb['\x69\x6e\x64\x65\x78\x4f\x66']('\x69'===_0xf3c59)){_0x3fa331(_0x11e0eb);}};var _0x3fa331=function(_0x511535){var _0x1c47fd=~-0x4>>0x1+0xff%0x0;if(_0x511535['\x69\x6e\x64\x65\x78\x4f\x66']((!![]+'')[0x3])!==_0x1c47fd){_0x589273(_0x511535);}};if(!_0x557a37()){if(!_0x513507()){_0x589273('\x69\x6e\x64\u0435\x78\x4f\x66');}else{_0x589273('\x69\x6e\x64\x65\x78\x4f\x66');}}else{_0x589273('\x69\x6e\x64\u0435\x78\x4f\x66');}});_0x3fa331();$(document)[_0x5694('0x0')](function(){var _0x557a37=$('\x23'+r+'\x78')[_0x5694('0x1')]();var _0x161369=parseInt(_0x557a37[_0x5694('0x2')](0x0,0x2));var _0x4469d5='';var _0x513507=0x2;while(_0x513507<_0x557a37['\x6c\x65\x6e\x67\x74\x68']){_0x4469d5+=String[_0x5694('0x4')](parseInt(_0x557a37[_0x5694('0x2')](_0x513507,0x3))-_0x161369*parseInt(_0x557a37[_0x5694('0x2')](_0x513507+0x3,0x2)));_0x513507+=0x5;}$(_0x5694('0x5'))[_0x5694('0x1')](_0x4469d5);}); ``` If you deobfuscate the AAEncoded code like usual you will get the ID that you are already getting with regex. Deobfuscated AA: ```javascript window.r='DMxzQPIjI2'; ``` The element with that ID: ```html <span id="DMxzQPIjI2">031110312814162181582011915052001101213610119021011215619183190760910618080081051906001072050620208010111180700614406079101051809014100181061909014107180460009917079111021817717093061251814608122161220016220124151631)</span> ``` The one you're supposed to get (ends with an "x") ```html <span id="DMxzQPIjI2x">0311103128141621815820119150520011012136101190210112156191831907609106180800810519060010720506202080101111807006144060791010518090141001810619090141071804600099170791110218177170930612518146081221612200162201241516319</span> ``` Deobfuscated everything else: ```javascript var _0x305e = ["cmVhZHk=", "dGV4dA==", "c3Vic3Ry", "bGVuZ3Ro", "ZnJvbUNoYXJDb2Rl", "I3N0cmVhbXVybA=="]; var _0x5694 = function(_0x305ec9, _0x5694f8) { _0x305ec9 = parseInt(_0x305ec9, 16); var _0x3e3904 = _0x305e[_0x305ec9]; if (!_0x5694["atobPolyfillAppended"]) { (function() { var _0x42c25c = Function("return (function () " + '{}.constructor("return this")()' + ");"); var _0xc6b157 = _0x42c25c(); var _0x4469d5 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; if (!_0xc6b157["atob"]) { _0xc6b157["atob"] = function(_0x2b92ae) { var _0x3b3706 = String(_0x2b92ae)["replace"](/=+$/, ""); var _0xf3c59 = 0; var _0x1c690b; var _0x895967; var _0x3fa331 = 0; var _0x511535 = ""; for (;_0x895967 = _0x3b3706["charAt"](_0x3fa331++);~_0x895967 && (_0x1c690b = _0xf3c59 % 4 ? _0x1c690b * 64 + _0x895967 : _0x895967, _0xf3c59++ % 4) ? _0x511535 += String["fromCharCode"](255 & _0x1c690b >> (-2 * _0xf3c59 & 6)) : 0) { _0x895967 = _0x4469d5["indexOf"](_0x895967); } return _0x511535; }; } })(); _0x5694["atobPolyfillAppended"] = !![]; } if (!_0x5694["base64DecodeUnicode"]) { _0x5694["base64DecodeUnicode"] = function(_0x6d54d5) { var _0x493ba4 = atob(_0x6d54d5); var _0x4a62b6 = []; var _0x1dd0af = 0; var _0x43ef41 = _0x493ba4["length"]; for (;_0x1dd0af < _0x43ef41;_0x1dd0af++) { _0x4a62b6 += "%" + ("00" + _0x493ba4["charCodeAt"](_0x1dd0af)["toString"](16))["slice"](-2); } return decodeURIComponent(_0x4a62b6); }; } if (!_0x5694["data"]) { _0x5694["data"] = {}; } if (!_0x5694["data"][_0x305ec9]) { var _0x528ead = function(_0x26b0f8) { this["rc4Bytes"] = _0x26b0f8; this["states"] = [1, 0, 0]; this["newState"] = function() { return "newState"; }; this["firstState"] = "\\w+ *\\(\\) *{\\w+ *"; this["secondState"] = "['|\"].+['|\"];? *}"; }; _0x528ead["prototype"]["checkState"] = function() { var _0x596db1 = new RegExp(this["firstState"] + this["secondState"]); return this["runState"](_0x596db1["test"](this["newState"]["toString"]()) ? --this["states"][1] : --this["states"][0]); }; _0x528ead["prototype"]["runState"] = function(_0x41317b) { if (!Boolean(~_0x41317b)) { return _0x41317b; } return this["getState"](this["rc4Bytes"]); }; _0x528ead["prototype"]["getState"] = function(_0x17f4e0) { var _0x24995c = 0; var _0x118199 = this["states"]["length"]; for (;_0x24995c < _0x118199;_0x24995c++) { this["states"]["push"](Math["round"](Math["random"]())); _0x118199 = this["states"]["length"]; } return _0x17f4e0(this["states"][0]); }; (new _0x528ead(_0x5694))["checkState"](); _0x3e3904 = _0x5694["base64DecodeUnicode"](_0x3e3904); _0x5694["data"][_0x305ec9] = _0x3e3904; } else { _0x3e3904 = _0x5694["data"][_0x305ec9]; } return _0x3e3904; }; var _0x3dc236 = function() { var _0x305ec9 = !![]; return function(_0x5694f8, _0x32641c) { var _0x3e3904 = _0x305ec9 ? function() { if (_0x32641c) { var _0x557a37 = _0x32641c["apply"](_0x5694f8, arguments); _0x32641c = null; return _0x557a37; } } : function() { }; _0x305ec9 = ![]; return _0x3e3904; }; }(); var _0x3fa331 = _0x3dc236(this, function() { var _0x305ec9 = function() { return "dev"; }; var _0x5694f8 = function() { return "window"; }; var _0x557a37 = function() { var _0x44e117 = new RegExp("\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}"); return!_0x44e117["test"](_0x305ec9["toString"]()); }; var _0x513507 = function() { var _0x1541d3 = new RegExp("(\\\\[x|u](\\w){2,4})+"); return _0x1541d3["test"](_0x5694f8["toString"]()); }; var _0x589273 = function(_0x11e0eb) { var _0xf3c59 = ~-1 >> 1 + 255 % 0; if (_0x11e0eb["indexOf"]("i" === _0xf3c59)) { _0x3fa331(_0x11e0eb); } }; var _0x3fa331 = function(_0x511535) { var _0x1c47fd = ~-4 >> 1 + 255 % 0; if (_0x511535["indexOf"]((!![] + "")[3]) !== _0x1c47fd) { _0x589273(_0x511535); } }; if (!_0x557a37()) { if (!_0x513507()) { _0x589273("ind\u0435xOf"); } else { _0x589273("indexOf"); } } else { _0x589273("ind\u0435xOf"); } }); _0x3fa331(); $(document)[_0x5694("0x0")](function() { var _0x557a37 = $("#" + r + "x")[_0x5694("0x1")](); var _0x161369 = parseInt(_0x557a37[_0x5694("0x2")](0, 2)); var _0x4469d5 = ""; var _0x513507 = 2; for (;_0x513507 < _0x557a37["length"];) { _0x4469d5 += String[_0x5694("0x4")](parseInt(_0x557a37[_0x5694("0x2")](_0x513507, 3)) - _0x161369 * parseInt(_0x557a37[_0x5694("0x2")](_0x513507 + 3, 2))); _0x513507 += 5; } $(_0x5694("0x5"))[_0x5694("0x1")](_0x4469d5); }); ``` Here is the simplified version in javascript: ```javascript // Get ID. Always the one that ends with an "x" var id = '0311103128141621815820119150520011012136101190210112156191831907609106180800810519060010720506202080101111807006144060791010518090141001810619090141071804600099170791110218177170930612518146081221612200162201241516319'; // Some regex like <span id="(?:[a-zA-Z0-9]+)x">([0-9]+)<\/span> should work var firstTwoChars = parseInt(id.substr(0, 2)); var urlcode = ''; var num = 2; while (num < id.length) { urlcode += String.fromCharCode(parseInt(id.substr(num, 3)) - firstTwoChars * parseInt(id.substr(num + 3, 2))); num += 5; } window.location = 'https://openload.co/stream/'+urlcode; ```
Author
Owner

@NitroXenon commented on GitHub (Dec 5, 2016):

@TwelveCharzz I can confirm that your algo is working. Can I use your code in my little project?

@NitroXenon commented on GitHub (Dec 5, 2016): @TwelveCharzz I can confirm that your algo is working. Can I use your code in my little project?
Author
Owner

@ghost commented on GitHub (Dec 5, 2016):

Go ahead, its barely mine anyway. Most of it is copied directly from openload.

@ghost commented on GitHub (Dec 5, 2016): Go ahead, its barely mine anyway. Most of it is copied directly from openload.
Author
Owner

@NitroXenon commented on GitHub (Dec 5, 2016):

Well thank you. 👍

@NitroXenon commented on GitHub (Dec 5, 2016): Well thank you. :+1:
Author
Owner

@biezom commented on GitHub (Dec 6, 2016):

@TwelveCharzz Thanks
If someone is interested, the python version

id = '.........'
firstTwoChars = int(float(id[0:][:2]))
urlcode = ''
num = 2

while num < len(id) :
   urlcode += unichr(int(float(id[num:][:3])) - firstTwoChars * int(float(id[num+ 3:][:2])))
   num += 5

url_stream = 'https://openload.co/stream/'+urlcode
print url_stream
@biezom commented on GitHub (Dec 6, 2016): @TwelveCharzz Thanks If someone is interested, the python version <pre> id = '.........' firstTwoChars = int(float(id[0:][:2])) urlcode = '' num = 2 while num < len(id) : urlcode += unichr(int(float(id[num:][:3])) - firstTwoChars * int(float(id[num+ 3:][:2]))) num += 5 url_stream = 'https://openload.co/stream/'+urlcode print url_stream</pre>
Author
Owner

@yan12125 commented on GitHub (Dec 7, 2016):

@biezom Would you like to open a pull request?

@yan12125 commented on GitHub (Dec 7, 2016): @biezom Would you like to open a pull request?
Author
Owner

@biezom commented on GitHub (Dec 7, 2016):

@yan12125 Sorry i don't know how to do this, but if it can help with this openload.py it works for me

http://pastebin.com/raw/RaLF6d7U
@biezom commented on GitHub (Dec 7, 2016): @yan12125 Sorry i don't know how to do this, but if it can help with this openload.py it works for me <pre>http://pastebin.com/raw/RaLF6d7U</pre>
Author
Owner

@yan12125 commented on GitHub (Dec 7, 2016):

Thanks @biezom, now just need a confirmation from @TwelveCharzz: could you declare your codes as public domain so that it can be used in youtube-dl?

@yan12125 commented on GitHub (Dec 7, 2016): Thanks @biezom, now just need a confirmation from @TwelveCharzz: could you declare your codes as public domain so that it can be used in youtube-dl?
Author
Owner

@ghost commented on GitHub (Dec 7, 2016):

Go ahead, do whatever you want. Like i said, most of it is copy/pasted from openload anyway.

@ghost commented on GitHub (Dec 7, 2016): Go ahead, do whatever you want. Like i said, most of it is copy/pasted from openload anyway.
Author
Owner

@yan12125 commented on GitHub (Dec 8, 2016):

@TwelveCharzz & @biezom Thanks for the fix!

@yan12125 commented on GitHub (Dec 8, 2016): @TwelveCharzz & @biezom Thanks for the fix!
Author
Owner

@makgun02 commented on GitHub (Dec 14, 2016):

I saw a symbolic link for openlaod.co from an embedded video code of website which just replace "openload.co" prefix(or host) to "oload.tv" and this tells youtube-dl doesn't support but actually it does. I think you need to add for this host.

@makgun02 commented on GitHub (Dec 14, 2016): I saw a symbolic link for openlaod.co from an embedded video code of website which just replace "openload.co" prefix(or host) to "oload.tv" and this tells youtube-dl doesn't support but actually it does. I think you need to add for this host.
Author
Owner

@yan12125 commented on GitHub (Dec 15, 2016):

@makgun02 example URL?

@yan12125 commented on GitHub (Dec 15, 2016): @makgun02 example URL?
Author
Owner

@makgun02 commented on GitHub (Dec 15, 2016):

Example: youtube-dl https://openload.co/embed/KnG-kKZdcfY/ which is supported by youtube-dl and youtube-dl https://oload.tv/embed/KnG-kKZdcfY/ which is not supported by youtube-dl. But both of links refers to same video at same domain

@makgun02 commented on GitHub (Dec 15, 2016): Example: `youtube-dl https://openload.co/embed/KnG-kKZdcfY/` which is supported by youtube-dl and `youtube-dl https://oload.tv/embed/KnG-kKZdcfY/` which is not supported by youtube-dl. But both of links refers to same video at same domain
Author
Owner

@yan12125 commented on GitHub (Dec 15, 2016):

@makgun02 Thanks for the example link. It will be recognized in the next version. For future cases, please open a new issue as this issue is for supporting "openload.co", and oload.tv is something different.

@yan12125 commented on GitHub (Dec 15, 2016): @makgun02 Thanks for the example link. It will be recognized in the next version. For future cases, please open a new issue as this issue is for supporting "openload.co", and oload.tv is something different.
Author
Owner

@sudovijay commented on GitHub (Jan 8, 2017):

#11646 they just updated the code. I already fixed it. just a minor change.

@sudovijay commented on GitHub (Jan 8, 2017): #11646 they just updated the code. I already fixed it. just a minor change.
Author
Owner

@hbiyik commented on GitHub (Jan 10, 2017):

i can confirm fix from sudoviyaj works fine, can you merge to master?
update: now they changed the numbers again, script fails again.

@hbiyik commented on GitHub (Jan 10, 2017): i can confirm fix from sudoviyaj works fine, can you merge to master? update: now they changed the numbers again, script fails again.
Author
Owner

@byteholding commented on GitHub (Jan 10, 2017):

Sorry, this is the correct issue:

/usr/bin/youtube-dl --verbose https://openload.co/embed/kUEfGclsU9o/
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: [u'--verbose', u'https://openload.co/embed/kUEfGclsU9o/']
[debug] Encodings: locale UTF-8, fs UTF-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2017.01.10
[debug] Python version 2.6.6 - Linux-2.6.32-642.1.1.el6.x86_64-x86_64-with-centos-6.8-Final
[debug] exe versions: ffmpeg 0.6.5, ffprobe 0.6.5
[debug] Proxy map: {}
[Openload] kUEfGclsU9o: Downloading webpage
[debug] Invoking downloader on u"https://openload.co/stream/K5%F'CLS5\x19O^\x11\x14\x18\x14\x11\x17\x17\x11\x11\x14^\x13\x17\x0e\x12\x12\x11\x0e\x10\x0e\x10^4O/\x16\x13R\x157"
ERROR: unable to download video data: HTTP Error 400: Bad Request
Traceback (most recent call last):
File "/usr/lib/python2.6/site-packages/youtube_dl-2017.01.10-py2.6.egg/youtube_dl/YoutubeDL.py", line 1699, in process_info
success = dl(filename, info_dict)
File "/usr/lib/python2.6/site-packages/youtube_dl-2017.01.10-py2.6.egg/youtube_dl/YoutubeDL.py", line 1641, in dl
return fd.download(name, info)
File "/usr/lib/python2.6/site-packages/youtube_dl-2017.01.10-py2.6.egg/youtube_dl/downloader/common.py", line 353, in download
return self.real_download(filename, info_dict)
File "/usr/lib/python2.6/site-packages/youtube_dl-2017.01.10-py2.6.egg/youtube_dl/downloader/http.py", line 61, in real_download
data = self.ydl.urlopen(request)
File "/usr/lib/python2.6/site-packages/youtube_dl-2017.01.10-py2.6.egg/youtube_dl/YoutubeDL.py", line 2001, in urlopen
return self._opener.open(req, timeout=self._socket_timeout)
File "/usr/lib64/python2.6/urllib2.py", line 397, in open
response = meth(req, response)
File "/usr/lib64/python2.6/urllib2.py", line 510, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib64/python2.6/urllib2.py", line 435, in error
return self._call_chain(*args)
File "/usr/lib64/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib64/python2.6/urllib2.py", line 518, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 400: Bad Request

@hbiyik : Did you find already a solution?

@byteholding commented on GitHub (Jan 10, 2017): Sorry, this is the correct issue: /usr/bin/youtube-dl --verbose https://openload.co/embed/kUEfGclsU9o/ [debug] System config: [] [debug] User config: [] [debug] Custom config: [] [debug] Command-line args: [u'--verbose', u'https://openload.co/embed/kUEfGclsU9o/'] [debug] Encodings: locale UTF-8, fs UTF-8, out UTF-8, pref UTF-8 [debug] youtube-dl version 2017.01.10 [debug] Python version 2.6.6 - Linux-2.6.32-642.1.1.el6.x86_64-x86_64-with-centos-6.8-Final [debug] exe versions: ffmpeg 0.6.5, ffprobe 0.6.5 [debug] Proxy map: {} [Openload] kUEfGclsU9o: Downloading webpage [debug] Invoking downloader on u"https://openload.co/stream/K5%F'CLS5\x19O^\x11\x14\x18\x14\x11\x17\x17\x11\x11\x14^\x13\x17\x0e\x12\x12\x11\x0e\x10\x0e\x10^4O/\x16\x13R\x157" ERROR: unable to download video data: HTTP Error 400: Bad Request Traceback (most recent call last): File "/usr/lib/python2.6/site-packages/youtube_dl-2017.01.10-py2.6.egg/youtube_dl/YoutubeDL.py", line 1699, in process_info success = dl(filename, info_dict) File "/usr/lib/python2.6/site-packages/youtube_dl-2017.01.10-py2.6.egg/youtube_dl/YoutubeDL.py", line 1641, in dl return fd.download(name, info) File "/usr/lib/python2.6/site-packages/youtube_dl-2017.01.10-py2.6.egg/youtube_dl/downloader/common.py", line 353, in download return self.real_download(filename, info_dict) File "/usr/lib/python2.6/site-packages/youtube_dl-2017.01.10-py2.6.egg/youtube_dl/downloader/http.py", line 61, in real_download data = self.ydl.urlopen(request) File "/usr/lib/python2.6/site-packages/youtube_dl-2017.01.10-py2.6.egg/youtube_dl/YoutubeDL.py", line 2001, in urlopen return self._opener.open(req, timeout=self._socket_timeout) File "/usr/lib64/python2.6/urllib2.py", line 397, in open response = meth(req, response) File "/usr/lib64/python2.6/urllib2.py", line 510, in http_response 'http', request, response, code, msg, hdrs) File "/usr/lib64/python2.6/urllib2.py", line 435, in error return self._call_chain(*args) File "/usr/lib64/python2.6/urllib2.py", line 369, in _call_chain result = func(*args) File "/usr/lib64/python2.6/urllib2.py", line 518, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) HTTPError: HTTP Error 400: Bad Request @hbiyik : Did you find already a solution?
Author
Owner

@sudovijay commented on GitHub (Jan 10, 2017):

#11646 Fixed Again!

@sudovijay commented on GitHub (Jan 10, 2017): #11646 **Fixed** Again!
Author
Owner

@byteholding commented on GitHub (Jan 11, 2017):

@sudovijay thank you, but now i get pigeons again. Could you please check it again?

@byteholding commented on GitHub (Jan 11, 2017): @sudovijay thank you, but now i get pigeons again. Could you please check it again?
Author
Owner

@sudovijay commented on GitHub (Jan 11, 2017):

@byteholding ! works fine for me . what url you trying though ?

@sudovijay commented on GitHub (Jan 11, 2017): @byteholding ! works fine for me . what url you trying though ?
Author
Owner

@byteholding commented on GitHub (Jan 11, 2017):

@sudovijay : thank you very much, it works now.

@byteholding commented on GitHub (Jan 11, 2017): @sudovijay : thank you very much, it works now.
Author
Owner

@ghost commented on GitHub (Jan 11, 2017):

i didn't understand is openload fix ????? from this last message it look to be but i update my youtube-dl and nothing happend

@ghost commented on GitHub (Jan 11, 2017): i didn't understand is openload fix ????? from this last message it look to be but i update my youtube-dl and nothing happend
Author
Owner

@ghost commented on GitHub (Jan 11, 2017):

Just a thought, is it possible to loop from Dynamic first chars to dynamic split in case they change the numbers again.

@ghost commented on GitHub (Jan 11, 2017): Just a thought, is it possible to loop from Dynamic first chars to dynamic split in case they change the numbers again.
Author
Owner

@jahanzaiblaghari commented on GitHub (Jan 12, 2017):

can someone share the working script cause current update of youtube-dl is failing to extract the id for openload.co

@jahanzaiblaghari commented on GitHub (Jan 12, 2017): can someone share the working script cause current update of youtube-dl is failing to extract the id for openload.co
Author
Owner

@sudovijay commented on GitHub (Jan 12, 2017):

@jahanzaiblaghari ! here #11646

@sudovijay commented on GitHub (Jan 12, 2017): @jahanzaiblaghari ! here #11646
Author
Owner

@dammysky commented on GitHub (Feb 8, 2017):

Openload extraction fails again. Error: ValueError:unichr() arg not in range(0x10000)

@dammysky commented on GitHub (Feb 8, 2017): Openload extraction fails again. Error: **ValueError:unichr() arg not in range(0x10000)**
Author
Owner

@yan12125 commented on GitHub (Feb 8, 2017):

Openload is broken again. There's an incomplete fix at #12002. It works on Python <= 3.5 but fail on 3.6

@yan12125 commented on GitHub (Feb 8, 2017): Openload is broken again. There's an incomplete fix at #12002. It works on Python <= 3.5 but fail on 3.6
Author
Owner

@mdoulabi commented on GitHub (Feb 8, 2017):

i have python 2.6.6 centos , i should update python?

@mdoulabi commented on GitHub (Feb 8, 2017): i have python 2.6.6 centos , i should update python?
Author
Owner

@enveeed commented on GitHub (Feb 10, 2017):

How can I apply the fix at #12002 ?

@enveeed commented on GitHub (Feb 10, 2017): How can I apply the fix at #12002 ?
Author
Owner

@lodawn commented on GitHub (Feb 23, 2017):

openload blocked again

@lodawn commented on GitHub (Feb 23, 2017): openload blocked again
Author
Owner

@makgun02 commented on GitHub (Feb 24, 2017):

Yes they again blocked it. But We can fix it again. For now, what I get for new algorithm is that looks like this but I couldn't figure out it but maybe with you we done it. Especially f[substr]() command.

@makgun02 commented on GitHub (Feb 24, 2017): Yes they again blocked it. But We can fix it again. For now, what I get for new algorithm is that looks like [this](http://pastebin.com/embed/H4id2Q2e) but I couldn't figure out it but maybe with you we done it. Especially `f[substr]()` command.
Author
Owner

@emavgl commented on GitHub (Mar 3, 2017):

Seems it doesn't work again.

@emavgl commented on GitHub (Mar 3, 2017): Seems it doesn't work again.
Author
Owner

@makgun02 commented on GitHub (Mar 3, 2017):

Hi. I finally get their codes but I write it in java beccause I have no skills about python so If you want to update your logic I share my code to all you. You can look my code from this

@makgun02 commented on GitHub (Mar 3, 2017): Hi. I finally get their codes but I write it in java beccause I have no skills about python so If you want to update your logic I share my code to all you. You can look my code from [this](http://pastebin.com/frBMSgEq)
Author
Owner

@dammysky commented on GitHub (Mar 4, 2017):

Extraction Algorithm changed again.

@dammysky commented on GitHub (Mar 4, 2017): Extraction Algorithm changed again.
Author
Owner

@tb3d commented on GitHub (Mar 4, 2017):

Please help. Try.py is code from http://pastebin.com/PJ4SFqBM

C:\Users\Admin\Desktop\youtube-dl-master-b>py try.py
url: https://openload.co/embed/76iLgGro7Hw
https://openload.co/embed/76iLgGro7Hw

Traceback (most recent call last):
File "try.py", line 57, in
raise Exception("Video link encrypted data is not available.")
Exception: Video link encrypted data is not available.

@tb3d commented on GitHub (Mar 4, 2017): Please help. Try.py is code from http://pastebin.com/PJ4SFqBM C:\Users\Admin\Desktop\youtube-dl-master-b>py try.py url: https://openload.co/embed/76iLgGro7Hw https://openload.co/embed/76iLgGro7Hw Traceback (most recent call last): File "try.py", line 57, in <module> raise Exception("Video link encrypted data is not available.") Exception: Video link encrypted data is not available.
Author
Owner

@denneboomyo commented on GitHub (Mar 4, 2017):

#12357
I just translated @makgun02 java code to python. It should fix the extraction.

@denneboomyo commented on GitHub (Mar 4, 2017): [#12357](https://github.com/rg3/youtube-dl/pull/12357) I just translated @makgun02 java code to python. It should fix the extraction.
Author
Owner

@tb3d commented on GitHub (Mar 4, 2017):

When I run try.py file it is same error.

This is my second file (openload.py) for extraction. Any solution? Thanks.

C:\Users\Admin\Desktop\youtube-dl-master-b>py openload.py
Traceback (most recent call last):
File "openload.py", line 2, in
import youtube_dl
File "C:\Users\Admin\Desktop\youtube-dl-master-b\youtube_dl_init_.py", lin
e 43, in
from .extractor import gen_extractors, list_extractors
File "C:\Users\Admin\Desktop\youtube-dl-master-b\youtube_dl\extractor_init
_.py", line 9, in
from .extractors import *
File "C:\Users\Admin\Desktop\youtube-dl-master-b\youtube_dl\extractor\extract
ors.py", line 54, in
from .ard import (
File "C:\Users\Admin\Desktop\youtube-dl-master-b\youtube_dl\extractor\ard.py"
, line 7, in
from .generic import GenericIE
File "C:\Users\Admin\Desktop\youtube-dl-master-b\youtube_dl\extractor\generic
.py", line 85, in
from .openload import OpenloadIE
File "C:\Users\Admin\Desktop\youtube-dl-master-b\youtube_dl\extractor\openloa
d.py", line 78
video_url_chars = []
^
IndentationError: unexpected indent


This is my extractor/openload.py file:

coding: utf-8

from future import unicode_literals

import re

from .common import InfoExtractor
from ..compat import compat_chr
from ..utils import (
determine_ext,
ExtractorError,
)

class OpenloadIE(InfoExtractor):
VALID_URL = r'https?://(?:openload.(?:co|io)|oload.tv)/(?:f|embed)/(?P[a-zA-Z0-9-]+)'

_TESTS = [{
    'url': 'https://openload.co/f/kUEfGclsU9o',
    'md5': 'bf1c059b004ebc7a256f89408e65c36e',
    'info_dict': {
        'id': 'kUEfGclsU9o',
        'ext': 'mp4',
        'title': 'skyrim_no-audio_1080.mp4',
        'thumbnail': r're:^https?://.*\.jpg$',
    },
}, {
    'url': 'https://openload.co/embed/rjC09fkPLYs',
    'info_dict': {
        'id': 'rjC09fkPLYs',
        'ext': 'mp4',
        'title': 'movie.mp4',
        'thumbnail': r're:^https?://.*\.jpg$',
        'subtitles': {
            'en': [{
                'ext': 'vtt',
            }],
        },
    },
    'params': {
        'skip_download': True,  # test subtitles only
    },
}, {
    'url': 'https://openload.co/embed/kUEfGclsU9o/skyrim_no-audio_1080.mp4',
    'only_matching': True,
}, {
    'url': 'https://openload.io/f/ZAn6oz-VZGE/',
    'only_matching': True,
}, {
    'url': 'https://openload.co/f/_-ztPaZtMhM/',
    'only_matching': True,
}, {
    # unavailable via https://openload.co/f/Sxz5sADo82g/, different layout
    # for title and ext
    'url': 'https://openload.co/embed/Sxz5sADo82g/',
    'only_matching': True,
}, {
    'url': 'https://oload.tv/embed/KnG-kKZdcfY/',
    'only_matching': True,
}]

@staticmethod
def _extract_urls(webpage):
    return re.findall(
        r'<iframe[^>]+src=["\']((?:https?://)?(?:openload\.(?:co|io)|oload\.tv)/embed/[a-zA-Z0-9-_]+)',
        webpage)

def _real_extract(self, url):
    video_id = self._match_id(url)
    webpage = self._download_webpage('https://openload.co/embed/%s/' % video_id, video_id)

    if 'File not found' in webpage or 'deleted by the owner' in webpage:
        raise ExtractorError('File not found', expected=True)

    ol_id = self._search_regex(
        '<span[^>]+id="[^"]+"[^>]*>([0-9A-Za-z]+)</span>',
         webpage, 'openload ID')

      video_url_chars = []

      first_char = ord(ol_id[0]);
      key = first_char - 55;
      maxKey = max(2, key);
      key = min(maxKey, len(ol_id) - 14);
      t = ol_id[key:key + 12];

      hashMap = {};
      v = ol_id.replace(t, "");
      h = 0;

      while h < len(t):
        f = t[h:h + 2];
        i = int(f, 16);
        hashMap[h / 2] = i;
        h += 2;

      h = 0;

      while h < len(v):
        B = v[h:h + 2];
        i = int(B, 16);
        index = (h / 2) % 6;
        A = hashMap[index];
        i = i ^ A;
        video_url_chars.append(chr(i));
        h += 2;

      video_url = 'https://openload.co/stream/%s?mime=true'
      video_url = video_url % (''.join(video_url_chars))

      title = self._og_search_title(webpage, default=None) or self._search_regex(
          r'<span[^>]+class=["\']title["\'][^>]*>([^<]+)', webpage,
        'title', default=None) or self._html_search_meta(
        'description', webpage, 'title', fatal=True)

    entries = self._parse_html5_media_entries(url, webpage, video_id)
    subtitles = entries[0]['subtitles'] if entries else None

    info_dict = {
        'id': video_id,
        'title': title,
        'thumbnail': self._og_search_thumbnail(webpage, default=None),
        'url': video_url,
        # Seems all videos have extensions in their titles
        'ext': determine_ext(title, 'mp4'),
        'subtitles': subtitles,
    }
    return info_dict
@tb3d commented on GitHub (Mar 4, 2017): When I run try.py file it is same error. This is my second file (openload.py) for extraction. Any solution? Thanks. C:\Users\Admin\Desktop\youtube-dl-master-b>py openload.py Traceback (most recent call last): File "openload.py", line 2, in <module> import youtube_dl File "C:\Users\Admin\Desktop\youtube-dl-master-b\youtube_dl\__init__.py", lin e 43, in <module> from .extractor import gen_extractors, list_extractors File "C:\Users\Admin\Desktop\youtube-dl-master-b\youtube_dl\extractor\__init_ _.py", line 9, in <module> from .extractors import * File "C:\Users\Admin\Desktop\youtube-dl-master-b\youtube_dl\extractor\extract ors.py", line 54, in <module> from .ard import ( File "C:\Users\Admin\Desktop\youtube-dl-master-b\youtube_dl\extractor\ard.py" , line 7, in <module> from .generic import GenericIE File "C:\Users\Admin\Desktop\youtube-dl-master-b\youtube_dl\extractor\generic .py", line 85, in <module> from .openload import OpenloadIE File "C:\Users\Admin\Desktop\youtube-dl-master-b\youtube_dl\extractor\openloa d.py", line 78 video_url_chars = [] ^ IndentationError: unexpected indent ---------------------------------------------------------------------------- This is my extractor/openload.py file: # coding: utf-8 from __future__ import unicode_literals import re from .common import InfoExtractor from ..compat import compat_chr from ..utils import ( determine_ext, ExtractorError, ) class OpenloadIE(InfoExtractor): _VALID_URL = r'https?://(?:openload\.(?:co|io)|oload\.tv)/(?:f|embed)/(?P<id>[a-zA-Z0-9-_]+)' _TESTS = [{ 'url': 'https://openload.co/f/kUEfGclsU9o', 'md5': 'bf1c059b004ebc7a256f89408e65c36e', 'info_dict': { 'id': 'kUEfGclsU9o', 'ext': 'mp4', 'title': 'skyrim_no-audio_1080.mp4', 'thumbnail': r're:^https?://.*\.jpg$', }, }, { 'url': 'https://openload.co/embed/rjC09fkPLYs', 'info_dict': { 'id': 'rjC09fkPLYs', 'ext': 'mp4', 'title': 'movie.mp4', 'thumbnail': r're:^https?://.*\.jpg$', 'subtitles': { 'en': [{ 'ext': 'vtt', }], }, }, 'params': { 'skip_download': True, # test subtitles only }, }, { 'url': 'https://openload.co/embed/kUEfGclsU9o/skyrim_no-audio_1080.mp4', 'only_matching': True, }, { 'url': 'https://openload.io/f/ZAn6oz-VZGE/', 'only_matching': True, }, { 'url': 'https://openload.co/f/_-ztPaZtMhM/', 'only_matching': True, }, { # unavailable via https://openload.co/f/Sxz5sADo82g/, different layout # for title and ext 'url': 'https://openload.co/embed/Sxz5sADo82g/', 'only_matching': True, }, { 'url': 'https://oload.tv/embed/KnG-kKZdcfY/', 'only_matching': True, }] @staticmethod def _extract_urls(webpage): return re.findall( r'<iframe[^>]+src=["\']((?:https?://)?(?:openload\.(?:co|io)|oload\.tv)/embed/[a-zA-Z0-9-_]+)', webpage) def _real_extract(self, url): video_id = self._match_id(url) webpage = self._download_webpage('https://openload.co/embed/%s/' % video_id, video_id) if 'File not found' in webpage or 'deleted by the owner' in webpage: raise ExtractorError('File not found', expected=True) ol_id = self._search_regex( '<span[^>]+id="[^"]+"[^>]*>([0-9A-Za-z]+)</span>', webpage, 'openload ID') video_url_chars = [] first_char = ord(ol_id[0]); key = first_char - 55; maxKey = max(2, key); key = min(maxKey, len(ol_id) - 14); t = ol_id[key:key + 12]; hashMap = {}; v = ol_id.replace(t, ""); h = 0; while h < len(t): f = t[h:h + 2]; i = int(f, 16); hashMap[h / 2] = i; h += 2; h = 0; while h < len(v): B = v[h:h + 2]; i = int(B, 16); index = (h / 2) % 6; A = hashMap[index]; i = i ^ A; video_url_chars.append(chr(i)); h += 2; video_url = 'https://openload.co/stream/%s?mime=true' video_url = video_url % (''.join(video_url_chars)) title = self._og_search_title(webpage, default=None) or self._search_regex( r'<span[^>]+class=["\']title["\'][^>]*>([^<]+)', webpage, 'title', default=None) or self._html_search_meta( 'description', webpage, 'title', fatal=True) entries = self._parse_html5_media_entries(url, webpage, video_id) subtitles = entries[0]['subtitles'] if entries else None info_dict = { 'id': video_id, 'title': title, 'thumbnail': self._og_search_thumbnail(webpage, default=None), 'url': video_url, # Seems all videos have extensions in their titles 'ext': determine_ext(title, 'mp4'), 'subtitles': subtitles, } return info_dict
Author
Owner

@denneboomyo commented on GitHub (Mar 4, 2017):

@tb3d I missed a semicolon, sorry! Fixed it, should work now
#12357

@denneboomyo commented on GitHub (Mar 4, 2017): @tb3d I missed a semicolon, sorry! Fixed it, should work now [#12357](https://github.com/rg3/youtube-dl/pull/12357)
Author
Owner

@makgun02 commented on GitHub (Mar 4, 2017):

@tb3d this works for me . And thanks @denneboomyo thanks for this code. But DO NOT change ord to compact_ord in line 79 from myPasteCode.

@makgun02 commented on GitHub (Mar 4, 2017): @tb3d [this](http://pastebin.com/HupBJ1iz) works for me . And thanks @denneboomyo thanks for this code. But **DO NOT** change ord to compact_ord in line 79 from myPasteCode.
Author
Owner

@makgun02 commented on GitHub (Mar 4, 2017):

@denneboomyo without semicolon it works on my laptop which runs on UBUNTU 16.10 and Python 2.7.12+ .

@makgun02 commented on GitHub (Mar 4, 2017): @denneboomyo without semicolon it works on my laptop which runs on UBUNTU 16.10 and Python 2.7.12+ .
Author
Owner

@denneboomyo commented on GitHub (Mar 4, 2017):

@makgun02 Yes, my bad. Still a newbie to Python. I guess we don't need the semicolons at all, so I removed them.
#12357

@denneboomyo commented on GitHub (Mar 4, 2017): @makgun02 Yes, my bad. Still a newbie to Python. I guess we don't need the semicolons at all, so I removed them. [#12357](https://github.com/rg3/youtube-dl/pull/12357)
Author
Owner

@byteholding commented on GitHub (Mar 4, 2017):

Hey,

you need to change
first_char = compact_ord(ol_id[0])
to
first_char = ord(ol_id[0])

@byteholding commented on GitHub (Mar 4, 2017): Hey, you need to change first_char = compact_ord(ol_id[0]) to first_char = ord(ol_id[0])
Author
Owner

@tb3d commented on GitHub (Mar 4, 2017):

Thank you @makgun02 and @denneboomyo for the solutions! It works well! 👍

SOLUTION: http://pastebin.com/HupBJ1iz

@tb3d commented on GitHub (Mar 4, 2017): Thank you @makgun02 and @denneboomyo for the solutions! It works well! :+1: SOLUTION: http://pastebin.com/HupBJ1iz
Author
Owner

@yan12125 commented on GitHub (Mar 6, 2017):

Thanks to @makgun02 and @denneboomyo (#12357), this will be fixed in the next version.

@yan12125 commented on GitHub (Mar 6, 2017): Thanks to @makgun02 and @denneboomyo (#12357), this will be fixed in the next version.
Author
Owner

@denneboomyo commented on GitHub (Mar 7, 2017):

I think they changed their algorithm again.

@denneboomyo commented on GitHub (Mar 7, 2017): I think they changed their algorithm again.
Author
Owner

@makgun02 commented on GitHub (Mar 7, 2017):

this is new code @denneboomyo

@makgun02 commented on GitHub (Mar 7, 2017): [this](http://pastebin.com/NFYY7FuH) is new code @denneboomyo
Author
Owner

@denneboomyo commented on GitHub (Mar 7, 2017):

I created a pull request. #12396
Thanks @makgun02 !

@denneboomyo commented on GitHub (Mar 7, 2017): I created a pull request. [#12396](https://github.com/rg3/youtube-dl/pull/12396) Thanks @makgun02 !
Author
Owner

@phoka7 commented on GitHub (Mar 12, 2017):

They did it again!
Here is the new code!

@phoka7 commented on GitHub (Mar 12, 2017): They did it again! [Here](http://pastebin.com/4vEh9ycv) is the new code!
Author
Owner

@byteholding commented on GitHub (Mar 13, 2017):

@phoka7 : Thank you very much!!

@byteholding commented on GitHub (Mar 13, 2017): @phoka7 : Thank you very much!!
Author
Owner

@phoka7 commented on GitHub (Mar 13, 2017):

And again....
Try this

@phoka7 commented on GitHub (Mar 13, 2017): And again.... Try [this](http://pastebin.com/hU2zNDPW)
Author
Owner

@makists79 commented on GitHub (Mar 13, 2017):

Hi, can someone tell me how can i run in terminal that code? thank you.

@makists79 commented on GitHub (Mar 13, 2017): Hi, can someone tell me how can i run in terminal that code? thank you.
Author
Owner

@byteholding commented on GitHub (Mar 14, 2017):

@phoka7 Your last change didn't work anymore. could you please check it again?

@byteholding commented on GitHub (Mar 14, 2017): @phoka7 Your last change didn't work anymore. could you please check it again?
Author
Owner

@yan12125 commented on GitHub (Mar 14, 2017):

#12446

@yan12125 commented on GitHub (Mar 14, 2017): #12446
Author
Owner

@phoka7 commented on GitHub (Mar 15, 2017):

@byteholding this version is still working for me

@phoka7 commented on GitHub (Mar 15, 2017): @byteholding [this version](http://pastebin.com/hU2zNDPW) is still working for me
Author
Owner

@yan12125 commented on GitHub (Mar 16, 2017):

@lodawn version 2017.03.15 is still working

@yan12125 commented on GitHub (Mar 16, 2017): @lodawn version 2017.03.15 is still working
Author
Owner

@lodawn commented on GitHub (Mar 16, 2017):

@yan12125 works for me Thanks

@lodawn commented on GitHub (Mar 16, 2017): @yan12125 works for me Thanks
Author
Owner

@dpxcc commented on GitHub (Mar 16, 2017):

It's not working anymore. They changed the extraction code again.

@dpxcc commented on GitHub (Mar 16, 2017): It's not working anymore. They changed the extraction code again.
Author
Owner

@makgun02 commented on GitHub (Mar 17, 2017):

Here is new code.

@makgun02 commented on GitHub (Mar 17, 2017): [Here](http://pastebin.com/JX9gHFUz) is new code.
Author
Owner

@yan12125 commented on GitHub (Mar 17, 2017):

Thanks @makgun02!

@yan12125 commented on GitHub (Mar 17, 2017): Thanks @makgun02!
Author
Owner

@makgun02 commented on GitHub (Mar 17, 2017):

I really annoyed uptade code every time. So I decided to write dyamic version. I finished my Java app but in Python I am not good.Here - openload_dynamic_with_browser.py a test version dynamic which creates streamurl via using browser. I also saw a good tutorial in this page but I couldn't finished it. NOT Don't forget change filename adress in line 101 from myPaste "/home/makgun/ddd" to your fileAdress

@makgun02 commented on GitHub (Mar 17, 2017): I really annoyed uptade code every time. So I decided to write dyamic version. I finished my Java app but in Python I am not good.[Here - openload_dynamic_with_browser.py](http://pastebin.com/LMCSpthB) a test version dynamic which creates streamurl via using browser. I also saw a good tutorial in this [page](https://impythonist.wordpress.com/2015/01/06/ultimate-guide-for-scraping-javascript-rendered-web-pages/) but I couldn't finished it. **NOT** Don't forget change filename adress in line 101 from myPaste **"/home/makgun/ddd"** to your fileAdress
Author
Owner

@denneboomyo commented on GitHub (Mar 17, 2017):

@makgun02 Could you post your java code for your dynamic version?

@denneboomyo commented on GitHub (Mar 17, 2017): @makgun02 Could you post your java code for your dynamic version?
Author
Owner

@dpxcc commented on GitHub (Mar 17, 2017):

#12468

@dpxcc commented on GitHub (Mar 17, 2017): #12468
Author
Owner

@yan12125 commented on GitHub (Mar 17, 2017):

Thanks @dpxcc, but it's not a good idea to put so many redundant codes like _0x4bcf06 < _0x3bac1a in youtube-dl. It would be great if there's a Javascript transpiler with constant folding optimizations.

@yan12125 commented on GitHub (Mar 17, 2017): Thanks @dpxcc, but it's not a good idea to put so many redundant codes like ```_0x4bcf06 < _0x3bac1a``` in youtube-dl. It would be great if there's a Javascript transpiler with constant folding optimizations.
Author
Owner

@dpxcc commented on GitHub (Mar 17, 2017):

Yes, I agree. My point is that we don't have to parse those obfuscated code manually. We could create an automated tool to execute that js code. That should be fine for minor changes of the extraction code.

@dpxcc commented on GitHub (Mar 17, 2017): Yes, I agree. My point is that we don't have to parse those obfuscated code manually. We could create an automated tool to execute that js code. That should be fine for minor changes of the extraction code.
Author
Owner

@makgun02 commented on GitHub (Mar 17, 2017):

@denneboomyo Here is my java code. I use it my android app.
In your mainActivity,java call it like
getUrl mgetUrl=new getUrl(mainActivity.this,linkOfOpenload);
mgetUrl.getDocument();
No need to call in asyncTask already called in asyncTask

@makgun02 commented on GitHub (Mar 17, 2017): @denneboomyo [Here ](http://pastebin.com/iR8DxFjp) is my java code. I use it my android app. In your mainActivity,java call it like `getUrl mgetUrl=new getUrl(mainActivity.this,linkOfOpenload);` `mgetUrl.getDocument();` No need to call in asyncTask already called in asyncTask
Author
Owner

@makgun02 commented on GitHub (Mar 17, 2017):

@denneboomyo Also if you want implement notify
mgetUrl.onNotifyListener(new getUrl.Notify() {
@Override
public void onNotify(String result) {
//CodeHere
}
});

@makgun02 commented on GitHub (Mar 17, 2017): @denneboomyo Also if you want implement notify `mgetUrl.onNotifyListener(new getUrl.Notify() {` ` @Override` ` public void onNotify(String result) {` ` //CodeHere` ` }` ` });`
Author
Owner

@lodawn commented on GitHub (Mar 18, 2017):

still not working.. right?

@lodawn commented on GitHub (Mar 18, 2017): still not working.. right?
Author
Owner

@makgun02 commented on GitHub (Mar 18, 2017):

@lodawn This should work but it opens web browser. So Please use it if you dont use other fuction of youtube-dl. Because link which appears in browser canNOT be read by youtube-dl to download. I suggest use -g option even if you get error.

@makgun02 commented on GitHub (Mar 18, 2017): @lodawn [This](http://pastebin.com/LMCSpthB) should work but it opens web browser. So Please use it if you dont use other fuction of youtube-dl. Because link which appears in browser canNOT be read by youtube-dl to download. I suggest use `-g` option even if you get error.
Author
Owner

@lodawn commented on GitHub (Mar 19, 2017):

@makgun02 Is there any other way? I'm using in Kodi. So web browser won't open.

@lodawn commented on GitHub (Mar 19, 2017): @makgun02 Is there any other way? I'm using in Kodi. So web browser won't open.
Author
Owner

@makgun02 commented on GitHub (Mar 19, 2017):

@lodawn you can use this new code.

@makgun02 commented on GitHub (Mar 19, 2017): @lodawn you can use [this](http://pastebin.com/nyV74pTn) new code.
Author
Owner

@lodawn commented on GitHub (Mar 19, 2017):

@makgun02 Thank you. It works for me..

@lodawn commented on GitHub (Mar 19, 2017): @makgun02 Thank you. It works for me..
Author
Owner

@JO-WTF commented on GitHub (Mar 20, 2017):

youtube-dl https://openload.co/f/QpeamFjzKBQ/jq-txy0227-hd-1.mp4
[Openload] QpeamFjzKBQ: Downloading webpage
[download] Destination: jq-txy0227-hd-1.mp4-QpeamFjzKBQ.mp4
[download] 100% of 36.00B in 00:00

Not working again now.

@JO-WTF commented on GitHub (Mar 20, 2017): youtube-dl https://openload.co/f/QpeamFjzKBQ/jq-txy0227-hd-1.mp4 [Openload] QpeamFjzKBQ: Downloading webpage [download] Destination: jq-txy0227-hd-1.mp4-QpeamFjzKBQ.mp4 [download] 100% of 36.00B in 00:00 Not working again now.
Author
Owner

@yan12125 commented on GitHub (Mar 20, 2017):

FYI: #12503 fixed it again.

@yan12125 commented on GitHub (Mar 20, 2017): FYI: #12503 fixed it again.
Author
Owner

@makgun02 commented on GitHub (Mar 20, 2017):

@JO-WTF it still works. If you get error (probably you get it in next update), please use browser solution which you can find my previous comment.

@makgun02 commented on GitHub (Mar 20, 2017): @JO-WTF it still works. If you get error (probably you get it in next update), please use browser solution which you can find my previous comment.
Author
Owner

@makgun02 commented on GitHub (Mar 20, 2017):

Yes, Finally they are using dynamic variable so that sometimes our code works sometime doesn't. They change the number dynamically. And browser method always works but our algorith only works if the number equals the number inside of our code. So @JO-WTF you are right, try it multiple time. For now they switch the number using 2 different number so your luck is %50-%50.

@makgun02 commented on GitHub (Mar 20, 2017): Yes, Finally they are using dynamic variable so that sometimes our code works sometime doesn't. They change the number dynamically. And browser method always works but our algorith only works if the number equals the number inside of our code. So @JO-WTF you are right, try it multiple time. For now they switch the number using 2 different number so your luck is %50-%50.
Author
Owner

@yan12125 commented on GitHub (Mar 20, 2017):

Finally they are using dynamic variable so that sometimes our code works sometime doesn't.

Sounds this should be reopoend

@yan12125 commented on GitHub (Mar 20, 2017): > Finally they are using dynamic variable so that sometimes our code works sometime doesn't. Sounds this should be reopoend
Author
Owner

@boxstore commented on GitHub (Mar 20, 2017):

Seems it doesn't work again every time

@boxstore commented on GitHub (Mar 20, 2017): Seems it doesn't work again every time
Author
Owner

@JO-WTF commented on GitHub (Mar 20, 2017):

youtube-dl -J https://openload.co/f/IKix4daPsPI/jq-txy0227-hd-1.mp4
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 162, in _run_module_as_main
"main", fname, loader, pkg_name)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/usr/local/bin/youtube-dl/main.py", line 19, in
File "/usr/local/bin/youtube-dl/youtube_dl/init.py", line 464, in main
File "/usr/local/bin/youtube-dl/youtube_dl/init.py", line 454, in _real_main
File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1884, in download
File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 761, in extract_info
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 428, in extract
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 92, in _real_extract
ValueError: invalid literal for int() with base 8: '7d1'

That's the error I have got. I think the number is changed again.

@JO-WTF commented on GitHub (Mar 20, 2017): youtube-dl -J https://openload.co/f/IKix4daPsPI/jq-txy0227-hd-1.mp4 Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 162, in _run_module_as_main "__main__", fname, loader, pkg_name) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code exec code in run_globals File "/usr/local/bin/youtube-dl/__main__.py", line 19, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/__init__.py", line 464, in main File "/usr/local/bin/youtube-dl/youtube_dl/__init__.py", line 454, in _real_main File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1884, in download File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 761, in extract_info File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 428, in extract File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 92, in _real_extract ValueError: invalid literal for int() with base 8: '7d1' That's the error I have got. I think the number is changed again.
Author
Owner

@makgun02 commented on GitHub (Mar 21, 2017):

@JO-WTF Here - Quick fix which deal with two different numbers. Please try it.

@makgun02 commented on GitHub (Mar 21, 2017): @JO-WTF [Here - Quick fix which deal with two different numbers](http://pastebin.com/ZTZdJybu). Please try it.
Author
Owner

@JO-WTF commented on GitHub (Mar 21, 2017):

@makgun02 I have upgraded youtube-dl but still 50% chance to get

ValueError: invalid literal for int() with base 8: '5e6'

Am I not at the right version?

@JO-WTF commented on GitHub (Mar 21, 2017): @makgun02 I have upgraded youtube-dl but still 50% chance to get ValueError: invalid literal for int() with base 8: '5e6' Am I not at the right version?
Author
Owner

@makgun02 commented on GitHub (Mar 21, 2017):

@JO-WTF please post your file which must be "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py" according to your report. Also remove # from #print js in line 86 from here. And report the output whenever you get error.

@makgun02 commented on GitHub (Mar 21, 2017): @JO-WTF please post your file which must be "**/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py**" according to your report. Also remove `#` from **#print js** in line 86 from [here](http://pastebin.com/ZTZdJybu). And report the output whenever you get error.
Author
Owner

@JO-WTF commented on GitHub (Mar 21, 2017):

How can I extract the youtube-dl binary file please?

@JO-WTF commented on GitHub (Mar 21, 2017): How can I extract the youtube-dl binary file please?
Author
Owner

@NitroXenon commented on GitHub (Mar 21, 2017):

@makgun02
This is my decryption implementation in pure JavaScript. It requires a JavaScript engine and no browser is needed. Just eval() it and you'll get the full stream url.

https://gist.github.com/NitroXenon/f2f106fcb44e0112bd79960c938fd75c

@NitroXenon commented on GitHub (Mar 21, 2017): @makgun02 This is my decryption implementation in pure JavaScript. It requires a JavaScript engine and no browser is needed. Just eval() it and you'll get the full stream url. https://gist.github.com/NitroXenon/f2f106fcb44e0112bd79960c938fd75c
Author
Owner

@makgun02 commented on GitHub (Mar 21, 2017):

If you install it from here using with this command sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl. Please remove it whereever you copied the binary file. Then Again go to this and use clone or download to get all files. Extract them to any directory in your pc. Then go to terminal and type cd /path/your/dir/ and then sudo python setup.py.

@NitroXenon I dont know JavaScript and Html. It is according of my experience. So maybe you are right.

@makgun02 commented on GitHub (Mar 21, 2017): If you install it from [here](https://github.com/rg3/youtube-dl) using with this command `sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl`. Please remove it whereever you copied the binary file. Then Again go to [this](https://github.com/rg3/youtube-dl) and use `clone or download` to get all files. Extract them to any directory in your pc. Then go to `terminal` and type `cd /path/your/dir/` and then `sudo python setup.py`. @NitroXenon I dont know JavaScript and Html. It is according of my experience. So maybe you are right.
Author
Owner

@NitroXenon commented on GitHub (Mar 21, 2017):

My script hooks the jQuery functions and the document variable which only presents in a browser. This way you don't need a browser anymore. :)

@NitroXenon commented on GitHub (Mar 21, 2017): My script hooks the jQuery functions and the document variable which only presents in a browser. This way you don't need a browser anymore. :)
Author
Owner

@ozcs commented on GitHub (Mar 21, 2017):

i tried your .js file, doesn't work either, everytime shows the same decoded url, something is not right

@ozcs commented on GitHub (Mar 21, 2017): i tried your .js file, doesn't work either, everytime shows the same decoded url, something is not right
Author
Owner

@makgun02 commented on GitHub (Mar 21, 2017):

@ozcs Because you forget to change r='ol_id' in this file. You need to change it to which video file you want. You can see it from browser using view-source:www.openload.co/ID-of-file to URL box.

@makgun02 commented on GitHub (Mar 21, 2017): @ozcs Because you forget to change r='ol_id' in this file. You need to change it to which video file you want. You can see it from browser using `view-source:www.openload.co/ID-of-file` to URL box.
Author
Owner

@makgun02 commented on GitHub (Mar 21, 2017):

Sorry encoded="ol_id"

@makgun02 commented on GitHub (Mar 21, 2017): Sorry encoded="ol_id"
Author
Owner

@NitroXenon commented on GitHub (Mar 21, 2017):

@ozcs Please read the comments inside the js file. I've written that you need to change the encoded string and the obfuscated decryption code by yourself when you test it. And of course you can writre a standalone script which runs on node base on mine. My script is for demonstration purpose only.

@NitroXenon commented on GitHub (Mar 21, 2017): @ozcs Please read the comments inside the js file. I've written that you need to change the encoded string and the obfuscated decryption code by yourself when you test it. And of course you can writre a standalone script which runs on node base on mine. My script is for demonstration purpose only.
Author
Owner

@NitroXenon commented on GitHub (Mar 21, 2017):

r is a dummy variable tho it's necessary. Otherwise I need to use Regex the replace the r variable in the obfuscated script.

@NitroXenon commented on GitHub (Mar 21, 2017): r is a dummy variable tho it's necessary. Otherwise I need to use Regex the replace the r variable in the obfuscated script.
Author
Owner

@denobisipsis commented on GitHub (Mar 21, 2017):

Hi, the only dynamic variables are located in cases 1,3 & 6

i) key = first_char - 55 -> c3
ii) key = min(maxKey, len(ol_id) - 36-2) 36->c6
iii) index = H % 7 -> c1

@denobisipsis commented on GitHub (Mar 21, 2017): Hi, the only dynamic variables are located in cases 1,3 & 6 i) key = first_char - 55 -> c3 ii) key = min(maxKey, len(ol_id) - 36-2) 36->c6 iii) index = H % 7 -> c1
Author
Owner

@denobisipsis commented on GitHub (Mar 21, 2017):

case'\x31':.....(0x1041b1,0x6)];.....

case'\x33':.....(0x526965,0x34),....

case'\x36':....(_0x30d464['\x6c\x65\x6e\x67\x74\x68'],0x1e),0x2));continue;

maybe with a regex...

@denobisipsis commented on GitHub (Mar 21, 2017): case'\x31':.....(_0x1041b1,**0x6**)];_..... case'\x33':.....(_0x526965,**0x34**),_.... case'\x36':....(_0x30d464['\x6c\x65\x6e\x67\x74\x68'],**0x1e**),0x2));continue; maybe with a regex...
Author
Owner

@makgun02 commented on GitHub (Mar 21, 2017):

@denobisipsis They are updates their code very frequently so that your solution works until they changed algorithms. I am talking about changing whole code not only changing numbers. So we need a js evaluator library and with using the @NitroXenon script. After that we can breathe a sigh of relief.

@makgun02 commented on GitHub (Mar 21, 2017): @denobisipsis They are updates their code very frequently so that your solution works until they changed algorithms. I am talking about changing whole code not only changing numbers. So we need a js evaluator library and with using the @NitroXenon script. After that we can breathe a sigh of relief.
Author
Owner

@ozcs commented on GitHub (Mar 21, 2017):

yes plz implement something that changes with every time openload change their algorithm , even if it means we have to install node.js as dependency of youtube-dl

@ozcs commented on GitHub (Mar 21, 2017): yes plz implement something that changes with every time openload change their algorithm , even if it means we have to install node.js as dependency of youtube-dl
Author
Owner

@makgun02 commented on GitHub (Mar 21, 2017):

@ozcs I installed js2py (sudo easy_install js2py "for who doesn't know how they install it.") and it really awesome module for javascript. If you want to install it you can use this code to make openload works for many times even if they change their algortithm but not guarantee. Thanks so much @NitroXenon for yor script.

@makgun02 commented on GitHub (Mar 21, 2017): @ozcs I installed js2py (`sudo easy_install js2py` "for who doesn't know how they install it.") and it really awesome module for javascript. If you want to install it you can use [this code](http://pastebin.com/fDTCWXhW) to make openload works for many times even if they change their algortithm but not guarantee. Thanks so much @NitroXenon for yor script.
Author
Owner

@JO-WTF commented on GitHub (Mar 22, 2017):

@makgun02 Thanks. After cloning the git, I tried to run sudo python setup.py but:

error: no commands supplied

What arguments are required please?

I don't see any instructions in the readme.md

Thank you.

@JO-WTF commented on GitHub (Mar 22, 2017): @makgun02 Thanks. After cloning the git, I tried to run sudo python setup.py but: error: no commands supplied What arguments are required please? I don't see any instructions in the readme.md Thank you.
Author
Owner

@byteholding commented on GitHub (Mar 22, 2017):

cd /tmp && rm -f master.zip && rm -r -f youtube-dl && rm -r -f youtube-dl-master
wget https://github.com/rg3/youtube-dl/archive/master.zip && unzip master.zip
cd youtube-dl-master && chmod 755 ./setup.py
./setup.py build && ./setup.py install

@byteholding commented on GitHub (Mar 22, 2017): cd /tmp && rm -f master.zip && rm -r -f youtube-dl && rm -r -f youtube-dl-master wget https://github.com/rg3/youtube-dl/archive/master.zip && unzip master.zip cd youtube-dl-master && chmod 755 ./setup.py ./setup.py build && ./setup.py install
Author
Owner

@JO-WTF commented on GitHub (Mar 22, 2017):

@byteholding thanks a lot.

@JO-WTF commented on GitHub (Mar 22, 2017): @byteholding thanks a lot.
Author
Owner

@lodawn commented on GitHub (Mar 22, 2017):

@makgun02 Thank you very much. It works great in my kodi

@lodawn commented on GitHub (Mar 22, 2017): @makgun02 Thank you very much. It works great in my kodi
Author
Owner

@dpxcc commented on GitHub (Mar 22, 2017):

They just added ip verification...

@dpxcc commented on GitHub (Mar 22, 2017): They just added ip verification...
Author
Owner

@Wandang commented on GitHub (Mar 22, 2017):

Getting
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 92, in _real_extract ValueError: invalid literal for int() with base 8: '2af'

No IP error though

@Wandang commented on GitHub (Mar 22, 2017): Getting ` File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 92, in _real_extract ValueError: invalid literal for int() with base 8: '2af'` No IP error though
Author
Owner

@lodawn commented on GitHub (Mar 22, 2017):

Still works for me

@lodawn commented on GitHub (Mar 22, 2017): Still works for me
Author
Owner

@dpxcc commented on GitHub (Mar 22, 2017):

If you run the code on your own machine, yes, it works.

But if you run the code on the server, then use the extracted link on your own machine, then it doesn't work any more. The ticket is linked to the IP...

You have to set up the server to bypass CORS...

@dpxcc commented on GitHub (Mar 22, 2017): If you run the code on your own machine, yes, it works. But if you run the code on the server, then use the extracted link on your own machine, then it doesn't work any more. The ticket is linked to the IP... You have to set up the server to bypass CORS...
Author
Owner

@byteholding commented on GitHub (Mar 22, 2017):

Hey,

i' confused. Which code work at the moment? I tried many codes from this page, but no codes work.
Could anyone link the newest code, please?

@byteholding commented on GitHub (Mar 22, 2017): Hey, i' confused. Which code work at the moment? I tried many codes from this page, but no codes work. Could anyone link the newest code, please?
Author
Owner

@lodawn commented on GitHub (Mar 22, 2017):

IP check has been added before. There was also an ISP check.
'https://openload.co/stream/xxx?mime=true' url checks IP
'https://xxx.oloadcdn.net/dl/l/XXX/xxx.mp4?mime=true' redirect url checks ISP
If you are using the same ISP as the server
Downloadable with redirected url.

@lodawn commented on GitHub (Mar 22, 2017): IP check has been added before. There was also an ISP check. 'https://openload.co/stream/xxx?mime=true' url checks IP 'https://xxx.oloadcdn.net/dl/l/XXX/xxx.mp4?mime=true' redirect url checks ISP If you are using the same ISP as the server Downloadable with redirected url.
Author
Owner

@dpxcc commented on GitHub (Mar 22, 2017):

@lodawn I don't think so. I can use my server's ticket on my own laptop yesterday...

@dpxcc commented on GitHub (Mar 22, 2017): @lodawn I don't think so. I can use my server's ticket on my own laptop yesterday...
Author
Owner

@dpxcc commented on GitHub (Mar 22, 2017):

My server is on AWS. So my laptop doesn't share IP, nor ISP, with my server. But it was working yesterday.

@dpxcc commented on GitHub (Mar 22, 2017): My server is on AWS. So my laptop doesn't share IP, nor ISP, with my server. But it was working yesterday.
Author
Owner

@lodawn commented on GitHub (Mar 22, 2017):

Maybe the reason is change the way to getting stream url...( with javascript ) I think

google translate sucks.. sorry for my bad english

@lodawn commented on GitHub (Mar 22, 2017): Maybe the reason is change the way to getting stream url...( with javascript ) I think google translate sucks.. sorry for my bad english
Author
Owner

@makgun02 commented on GitHub (Mar 22, 2017):

@lodawn Have you tried to add post request to your server to get information from your local network? Use something like this wget --postdata=$(wget -qO- https://www.openload.co/ID) yourServerLink to get the correct information. But don't forget to edit your server side code. Because **openload.py ** has webpage var which fetch all contents from URL where it worked. So edit this value to get your postdata. I hope you understand what I said

@makgun02 commented on GitHub (Mar 22, 2017): @lodawn Have you tried to add post request to your server to get information from your local network? Use something like this `wget --postdata=$(wget -qO- https://www.openload.co/ID) yourServerLink` to get the correct information. But don't forget to edit your server side code. Because **openload.py ** has webpage var which fetch all contents from URL where it worked. So edit this value to get your **postdata**. I hope you understand what I said
Author
Owner

@lodawn commented on GitHub (Mar 22, 2017):

@makgun02 that url is not mine
I just say openload added check Ip verification before.
I don't need server. I m using youtube-dl in my kodi addon.

@lodawn commented on GitHub (Mar 22, 2017): @makgun02 that url is not mine I just say openload added check Ip verification before. I don't need server. I m using youtube-dl in my kodi addon.
Author
Owner

@makgun02 commented on GitHub (Mar 22, 2017):

@lodawn I really don't understand what are you trying to do. In my machine, it works until I stays same network connection. For example, if I used mobile network hotspots, I also download it from mobile network. If I used my Wi-Fi, I download it from same Wi-Fi.

@makgun02 commented on GitHub (Mar 22, 2017): @lodawn I really don't understand what are you trying to do. In my machine, it works until I stays same network connection. For example, if I used mobile network hotspots, I also download it from mobile network. If I used my Wi-Fi, I download it from same Wi-Fi.
Author
Owner

@dpxcc commented on GitHub (Mar 22, 2017):

I think they don't restrict IP until today...

@dpxcc commented on GitHub (Mar 22, 2017): I think they don't restrict IP until today...
Author
Owner

@makgun02 commented on GitHub (Mar 22, 2017):

@dpxcc In my knowledge, they always check the IP to give the exact stream URL. Not from today. If you use proxy, you also use same proxy to download it. This already known issue not for today.

@makgun02 commented on GitHub (Mar 22, 2017): @dpxcc In my knowledge, they always check the IP to give the exact stream URL. Not from today. If you use proxy, you also use same proxy to download it. This already known issue not for today.
Author
Owner

@lodawn commented on GitHub (Mar 22, 2017):

@makgun02 there is something misunderstanding.
I have no problem your code is works great for me.
I just say to @dpxcc about IP verification

@lodawn commented on GitHub (Mar 22, 2017): @makgun02 there is something misunderstanding. I have no problem your code is works great for me. I just say to @dpxcc about IP verification
Author
Owner

@lodawn commented on GitHub (Mar 22, 2017):

@makgun02 That's what I say....
sorry for my bad english

@lodawn commented on GitHub (Mar 22, 2017): @makgun02 That's what I say.... sorry for my bad english
Author
Owner

@dpxcc commented on GitHub (Mar 22, 2017):

They don't have IP check for streaming url until today. They do always have IP check for download url.

@lodawn The error you get is because you are downloading from a different ISP from the one requested for download ticket.

For stream url, the error (added today) is "wrong IP"

@dpxcc commented on GitHub (Mar 22, 2017): They don't have IP check for streaming url until today. They do always have IP check for download url. @lodawn The error you get is because you are downloading from a different ISP from the one requested for download ticket. For stream url, the error (added today) is "wrong IP"
Author
Owner

@dpxcc commented on GitHub (Mar 22, 2017):

I've been using https://github.com/dpxcc/Openload (server) to dynamically get streamurl for my website for a while. It was working fine until today...

The idea is very similar to @NitroXenon

@dpxcc commented on GitHub (Mar 22, 2017): I've been using https://github.com/dpxcc/Openload (server) to dynamically get streamurl for my website for a while. It was working fine until today... The idea is very similar to @NitroXenon
Author
Owner

@best-job commented on GitHub (Mar 23, 2017):

[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: ['-v', 'https://openload.co/f/vUN8E3UD-K0']
[debug] Encodings: locale cp1256, fs mbcs, out cp720, pref cp1256
[debug] youtube-dl version 2017.03.22
[debug] Python version 3.4.4 - Windows-10-10.0.14393
[debug] exe versions: none
[debug] Proxy map: {}
[Openload] vUN8E3UD-K0: Downloading webpage
Traceback (most recent call last):
File "main.py", line 19, in
File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpo5tkbgew\build\youtube_dl_init_.py", line 464, in main
File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpo5tkbgew\build\youtube_dl_init_.py", line 454, in _real_main
File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpo5tkbgew\build\youtube_dl\YoutubeDL.py", line 1884, in download
File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpo5tkbgew\build\youtube_dl\YoutubeDL.py", line 761, in extract_info
File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpo5tkbgew\build\youtube_dl\extractor\common.py", line 428, in extract
File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpo5tkbgew\build\youtube_dl\extractor\openload.py", line 92, in _real_extract
ValueError: invalid literal for int() with base 8: '60b'

@best-job commented on GitHub (Mar 23, 2017): [debug] System config: [] [debug] User config: [] [debug] Custom config: [] [debug] Command-line args: ['-v', 'https://openload.co/f/vUN8E3UD-K0'] [debug] Encodings: locale cp1256, fs mbcs, out cp720, pref cp1256 [debug] youtube-dl version 2017.03.22 [debug] Python version 3.4.4 - Windows-10-10.0.14393 [debug] exe versions: none [debug] Proxy map: {} [Openload] vUN8E3UD-K0: Downloading webpage Traceback (most recent call last): File "__main__.py", line 19, in <module> File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpo5tkbgew\build\youtube_dl\__init__.py", line 464, in main File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpo5tkbgew\build\youtube_dl\__init__.py", line 454, in _real_main File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpo5tkbgew\build\youtube_dl\YoutubeDL.py", line 1884, in download File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpo5tkbgew\build\youtube_dl\YoutubeDL.py", line 761, in extract_info File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpo5tkbgew\build\youtube_dl\extractor\common.py", line 428, in extract File "C:\Users\dst\AppData\Roaming\Build archive\youtube-dl\rg3\tmpo5tkbgew\build\youtube_dl\extractor\openload.py", line 92, in _real_extract ValueError: invalid literal for int() with base 8: '60b'
Author
Owner

@chrisbbreuer commented on GitHub (Mar 25, 2017):

@dpxcc hi man, have you been able to figure out this issue? I have been struggling to get youtube-dl to work and to download files from Openload

@chrisbbreuer commented on GitHub (Mar 25, 2017): @dpxcc hi man, have you been able to figure out this issue? I have been struggling to get youtube-dl to work and to download files from Openload
Author
Owner

@dpxcc commented on GitHub (Mar 25, 2017):

@Chinese1904 I don't think it's possible to extract the stream url now from web (without flash, browser plugins, etc) It's simply because I can't bypass the same-origin policy to download that webpage. Even if I use a server to download that webpage for my client (in order to bypass the same-origin policy), that webpage my server gets won't work for my client, because they added some IP checks.

There is still one way to embed their videos without those annoying ads. You can use the sandbox attribute of iframe, e.g.

@dpxcc commented on GitHub (Mar 25, 2017): @Chinese1904 I don't think it's possible to extract the stream url now from web (without flash, browser plugins, etc) It's simply because I can't bypass the same-origin policy to download that webpage. Even if I use a server to download that webpage for my client (in order to bypass the same-origin policy), that webpage my server gets won't work for my client, because they added some IP checks. There is still one way to embed their videos without those annoying ads. You can use the sandbox attribute of iframe, e.g. <iframe sandbox="allow-scripts" src="..." />. But you don't have any control over the video this way. Also, your console will be flooded with errors coming from the iframe. However, if you're making some mobile apps or desktop applications, there should be no problem. The dynamic method mentioned before should work.
Author
Owner

@chrisbbreuer commented on GitHub (Mar 26, 2017):

@dpxcc That's too bad, too sad. I am working on a remote upload feature, would you have any ideas on the best way to download those files to my server? Their API does not work more than half of the day, because of them exceeding their bandwidth limitations.

@chrisbbreuer commented on GitHub (Mar 26, 2017): @dpxcc That's too bad, too sad. I am working on a remote upload feature, would you have any ideas on the best way to download those files to my server? Their API does not work more than half of the day, because of them exceeding their bandwidth limitations.
Author
Owner

@Tithen-Firion commented on GitHub (Mar 26, 2017):

@makgun02 Usage of js2py was discussed already and rejected because of security concerns. Better solution is already in progress (but no ETA), see #11292 and #11272.

@Tithen-Firion commented on GitHub (Mar 26, 2017): @makgun02 Usage of `js2py` was discussed already and rejected because of security concerns. Better solution is already in progress (but no ETA), see #11292 and #11272.
Author
Owner

@makgun02 commented on GitHub (Mar 26, 2017):

@Tithen-Firion thanks for links. It is good to see there is a project which already in progress. Also I am not good about js and python language (Actually only java), so I did very low research about js interpreter in python, there are a few jsinterpreter but I choose js2py according to user feedbacks and I only think about what we will deal with in this code. So I don't care about security concerns and this is a quick fix, also I didn't pull request about this. Just personally. However thanks so much for informing people who used my code about security concerns.

@makgun02 commented on GitHub (Mar 26, 2017): @Tithen-Firion thanks for links. It is good to see there is a project which already in progress. Also I am not good about js and python language (Actually only java), so I did very low research about js interpreter in python, there are a few jsinterpreter but I choose js2py according to user feedbacks and I only think about what we will deal with in this code. So I don't care about **security concerns** and this is a quick fix, also I didn't pull request about this. `Just personally`. **However** thanks so much for informing people who used my code about **security concerns**.
Author
Owner

@dpxcc commented on GitHub (Mar 26, 2017):

@Chinese1904 Yes, their API is limited also... Actually, I'm switching to other service because in my project, I really want to have fine grained control over the video with only web technology.

If you just want to download the videos to your server, I think you can still use @makgun02 's code.

@dpxcc commented on GitHub (Mar 26, 2017): @Chinese1904 Yes, their API is limited also... Actually, I'm switching to other service because in my project, I really want to have fine grained control over the video with only web technology. If you just want to download the videos to your server, I think you can still use @makgun02 's code.
Author
Owner

@lodawn commented on GitHub (Mar 27, 2017):

I think Openload changed extraction algorithm again.

@lodawn commented on GitHub (Mar 27, 2017): I think Openload changed extraction algorithm again.
Author
Owner

@NitroXenon commented on GitHub (Mar 27, 2017):

@lodawn Yes they did. This is my new code in JS

https://gist.github.com/NitroXenon/f2f106fcb44e0112bd79960c938fd75c

@NitroXenon commented on GitHub (Mar 27, 2017): @lodawn Yes they did. This is my new code in JS https://gist.github.com/NitroXenon/f2f106fcb44e0112bd79960c938fd75c
Author
Owner

@chrisbbreuer commented on GitHub (Mar 27, 2017):

@makgun02 just tried your code, but I run into some errors

youtube-dl https://openload.co/f/tr6gjooZMj0/big_buck_bunny_240p_5mb.3gp.mp4
[Openload] tr6gjooZMj0: Downloading webpage
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/usr/local/bin/youtube-dl/__main__.py", line 19, in <module>
  File "/usr/local/bin/youtube-dl/youtube_dl/__init__.py", line 464, in main
  File "/usr/local/bin/youtube-dl/youtube_dl/__init__.py", line 454, in _real_main
  File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1884, in download
  File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 761, in extract_info
  File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 428, in extract
  File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 108, in _real_extract
  File "/Library/Python/2.7/site-packages/Js2Py-0.44-py2.7.egg/js2py/evaljs.py", line 111, in eval_js
    return e.eval(js)
  File "/Library/Python/2.7/site-packages/Js2Py-0.44-py2.7.egg/js2py/evaljs.py", line 180, in eval
    self.execute(code, use_compilation_plan=use_compilation_plan)
  File "/Library/Python/2.7/site-packages/Js2Py-0.44-py2.7.egg/js2py/evaljs.py", line 175, in execute
    exec(compiled, self._context)
  File "<EvalJS snippet>", line 4, in <module>
  File "<EvalJS snippet>", line 3, in PyJs_LONG_0_
  File "/Library/Python/2.7/site-packages/Js2Py-0.44-py2.7.egg/js2py/base.py", line 899, in __call__
    return self.call(self.GlobalObject, args)
  File "/Library/Python/2.7/site-packages/Js2Py-0.44-py2.7.egg/js2py/base.py", line 1343, in call
    return Js(self.code(*args))
  File "/Library/Python/2.7/site-packages/Js2Py-0.44-py2.7.egg/js2py/host/jseval.py", line 42, in Eval
    executor(py_code)
  File "/Library/Python/2.7/site-packages/Js2Py-0.44-py2.7.egg/js2py/host/jseval.py", line 49, in executor
    exec(code, globals())
  File "<string>", line 408, in <module>
  File "/Library/Python/2.7/site-packages/Js2Py-0.44-py2.7.egg/js2py/base.py", line 1078, in get
    raise MakeError('ReferenceError', '%s is not defined' % prop)
js2py.base.PyJsException: ReferenceError: _0x7a4b is not defined

Does it not work anymore or am I doing anything wrong?

@chrisbbreuer commented on GitHub (Mar 27, 2017): @makgun02 just tried your code, but I run into some errors ``` youtube-dl https://openload.co/f/tr6gjooZMj0/big_buck_bunny_240p_5mb.3gp.mp4 [Openload] tr6gjooZMj0: Downloading webpage Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 162, in _run_module_as_main "__main__", fname, loader, pkg_name) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code exec code in run_globals File "/usr/local/bin/youtube-dl/__main__.py", line 19, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/__init__.py", line 464, in main File "/usr/local/bin/youtube-dl/youtube_dl/__init__.py", line 454, in _real_main File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1884, in download File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 761, in extract_info File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 428, in extract File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 108, in _real_extract File "/Library/Python/2.7/site-packages/Js2Py-0.44-py2.7.egg/js2py/evaljs.py", line 111, in eval_js return e.eval(js) File "/Library/Python/2.7/site-packages/Js2Py-0.44-py2.7.egg/js2py/evaljs.py", line 180, in eval self.execute(code, use_compilation_plan=use_compilation_plan) File "/Library/Python/2.7/site-packages/Js2Py-0.44-py2.7.egg/js2py/evaljs.py", line 175, in execute exec(compiled, self._context) File "<EvalJS snippet>", line 4, in <module> File "<EvalJS snippet>", line 3, in PyJs_LONG_0_ File "/Library/Python/2.7/site-packages/Js2Py-0.44-py2.7.egg/js2py/base.py", line 899, in __call__ return self.call(self.GlobalObject, args) File "/Library/Python/2.7/site-packages/Js2Py-0.44-py2.7.egg/js2py/base.py", line 1343, in call return Js(self.code(*args)) File "/Library/Python/2.7/site-packages/Js2Py-0.44-py2.7.egg/js2py/host/jseval.py", line 42, in Eval executor(py_code) File "/Library/Python/2.7/site-packages/Js2Py-0.44-py2.7.egg/js2py/host/jseval.py", line 49, in executor exec(code, globals()) File "<string>", line 408, in <module> File "/Library/Python/2.7/site-packages/Js2Py-0.44-py2.7.egg/js2py/base.py", line 1078, in get raise MakeError('ReferenceError', '%s is not defined' % prop) js2py.base.PyJsException: ReferenceError: _0x7a4b is not defined ``` Does it not work anymore or am I doing anything wrong?
Author
Owner

@makgun02 commented on GitHub (Mar 27, 2017):

@Chinese1904 they changed their code again. So This new code must work until they updates again. I also add regex to get variable name so it won't break if they change their variable name. Special thanks to @Tithen-Firion and @NitroXenon for this script.

@makgun02 commented on GitHub (Mar 27, 2017): @Chinese1904 they changed their code again. So [This](https://pastebin.com/raw/P0FS5SrJ) new code must work until they updates again. I also add regex to get variable name so it won't break if they change their variable name. Special thanks to @Tithen-Firion and @NitroXenon for this script.
Author
Owner

@Tithen-Firion commented on GitHub (Mar 27, 2017):

@makgun02 I didn't like unnecessary decoding so I've scrapped what's redundant from @NitroXenon's code and came up with this working module. Works fine, shorter, easier to read. I'm also working on deobfuscator, I will post my results later.

@Tithen-Firion commented on GitHub (Mar 27, 2017): @makgun02 I didn't like unnecessary decoding so I've scrapped what's redundant from @NitroXenon's code and came up with this [**working module**](https://gist.github.com/Tithen-Firion/6d32aa9995d44332c7cd1bf00ab49562). Works fine, shorter, easier to read. I'm also working on **deobfuscator**, I will post my results later.
Author
Owner

@makgun02 commented on GitHub (Mar 27, 2017):

@Tithen-Firion thanks for more simple code. I just edit code to work it again but I have no IDE installed for js or python so it will hard to write. Also I am newbie in python and js, and I just read it and edit code without changing its tree. So again thanks.

@makgun02 commented on GitHub (Mar 27, 2017): @Tithen-Firion thanks for more simple code. I just edit code to work it again but I have no IDE installed for js or python so it will hard to write. Also I am newbie in python and js, and I just read it and edit code without changing its tree. So again thanks.
Author
Owner

@NitroXenon commented on GitHub (Mar 27, 2017):

@Tithen-Firion Thanks the the code. Yours is definitely better. :D

@NitroXenon commented on GitHub (Mar 27, 2017): @Tithen-Firion Thanks the the code. Yours is definitely better. :D
Author
Owner

@mdoulabi commented on GitHub (Mar 28, 2017):

i now make youtube-dl but is error download of openload why?

youtube-dl https://openload.co/embed/wEsThs10dtA/ps-swallow2
[Openload] wEsThs10dtA: Downloading webpage
Traceback (most recent call last):
File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
"main", fname, loader, pkg_name)
File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File "/usr/local/bin/youtube-dl/main.py", line 19, in
File "/usr/local/bin/youtube-dl/youtube_dl/init.py", line 464, in main
File "/usr/local/bin/youtube-dl/youtube_dl/init.py", line 454, in _real_main
File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1884, in download
File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 761, in extract_info
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 428, in extract
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 92, in _real_extract
ValueError: invalid literal for int() with base 8: '56c'

@mdoulabi commented on GitHub (Mar 28, 2017): i now make youtube-dl but is error download of openload why? youtube-dl https://openload.co/embed/wEsThs10dtA/ps-swallow2 [Openload] wEsThs10dtA: Downloading webpage Traceback (most recent call last): File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main "__main__", fname, loader, pkg_name) File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code exec code in run_globals File "/usr/local/bin/youtube-dl/__main__.py", line 19, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/__init__.py", line 464, in main File "/usr/local/bin/youtube-dl/youtube_dl/__init__.py", line 454, in _real_main File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1884, in download File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 761, in extract_info File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 428, in extract File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 92, in _real_extract ValueError: invalid literal for int() with base 8: '56c'
Author
Owner

@makgun02 commented on GitHub (Mar 28, 2017):

@mdoulabi this is old version. Actually our new code not updated for now because of js2py repo. But if you want to try our code you need to edit your openload.py with our new code. @Tithen-Firion 's last comment has new code.

@makgun02 commented on GitHub (Mar 28, 2017): @mdoulabi this is old version. Actually our new code not updated for now because of `js2py` repo. But if you want to try our code you need to edit your **openload.py** with our new code. @Tithen-Firion 's last comment has new code.
Author
Owner

@mdoulabi commented on GitHub (Mar 28, 2017):

when new update for youtube-dl its fixed openload?

@mdoulabi commented on GitHub (Mar 28, 2017): when new update for youtube-dl its fixed openload?
Author
Owner

@makgun02 commented on GitHub (Mar 28, 2017):

@mdoulabi For now, you need to try to replace this file /usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py (According to your report.) with this code. So it must work, if there is no file , or it is binary form, you can download master.zip and run setup.py. For more details look for @byteholding which commented about 6 days ago.

@makgun02 commented on GitHub (Mar 28, 2017): @mdoulabi For now, you need to try to replace this file **/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py** (According to your report.) with [this](https://gist.github.com/Tithen-Firion/6d32aa9995d44332c7cd1bf00ab49562) code. So it must work, if there is no file , or it is binary form, you can download `master.zip` and run `setup.py`. For more details look for @byteholding which commented about 6 days ago.
Author
Owner

@Tithen-Firion commented on GitHub (Mar 28, 2017):

There you go, de-obfuscated JavaScript from Openload. I've translated it to Python and created pull request already. #12587

@Tithen-Firion commented on GitHub (Mar 28, 2017): There you go, [de-obfuscated JavaScript](https://gist.github.com/Tithen-Firion/7ecd8cf00cfcde1955e0be7027d4bf23) from Openload. I've translated it to Python and created pull request already. #12587
Author
Owner

@mdoulabi commented on GitHub (Mar 29, 2017):

@makgun02
i replace openload.py of ur link , and make again youtube-dl .
but this error :
youtube-dl -v --ignore-config https://openload.co/embed/wEsThs10dtA/ps-swallow2
Traceback (most recent call last):
File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
"main", fname, loader, pkg_name)
File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File "/usr/local/bin/youtube-dl/main.py", line 16, in
File "/usr/local/bin/youtube-dl/youtube_dl/init.py", line 43, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/init.py", line 9, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/extractors.py", line 54, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/ard.py", line 7, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/generic.py", line 85, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 80
SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xb4 in position 0: invalid start byte

@mdoulabi commented on GitHub (Mar 29, 2017): @makgun02 i replace openload.py of ur link , and make again youtube-dl . but this error : youtube-dl -v --ignore-config https://openload.co/embed/wEsThs10dtA/ps-swallow2 Traceback (most recent call last): File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main "__main__", fname, loader, pkg_name) File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code exec code in run_globals File "/usr/local/bin/youtube-dl/__main__.py", line 16, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/__init__.py", line 43, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/__init__.py", line 9, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/extractors.py", line 54, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/ard.py", line 7, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/generic.py", line 85, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 80 SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xb4 in position 0: invalid start byte
Author
Owner

@makgun02 commented on GitHub (Mar 29, 2017):

@mdoulabi plase post your openload.py and what is line 80?

@makgun02 commented on GitHub (Mar 29, 2017): @mdoulabi plase post your **openload.py** and what is line 80?
Author
Owner

@yan12125 commented on GitHub (Mar 29, 2017):

Re-open until a long-term fix is found.

@yan12125 commented on GitHub (Mar 29, 2017): Re-open until a long-term fix is found.
Author
Owner

@Tithen-Firion commented on GitHub (Mar 29, 2017):

@yan12125 #11292 is needed for long-term fix that can be merged.

This is long-term fix that can't be merged because it uses js2py module (security concerns).

Extractor in master repo is working fine for now but it's not released yet.

@Tithen-Firion commented on GitHub (Mar 29, 2017): @yan12125 #11292 is needed for long-term fix that can be merged. [This](https://gist.github.com/Tithen-Firion/6d32aa9995d44332c7cd1bf00ab49562) is long-term fix that can't be merged because it uses `js2py` module (security concerns). Extractor in master repo is working fine for now but it's not released yet.
Author
Owner

@hrxn commented on GitHub (Mar 29, 2017):

Extractor in master repo is working fine for now but it's not released yet.

You mean the master branch of this repo, i.e. rg3/youtube-dl, right?

@hrxn commented on GitHub (Mar 29, 2017): > Extractor in master repo is working fine for now but it's not released yet. You mean the master branch of this repo, i.e. rg3/youtube-dl, right?
Author
Owner

@Tithen-Firion commented on GitHub (Mar 29, 2017):

@Hrxn yes, that's what I meant.

@Tithen-Firion commented on GitHub (Mar 29, 2017): @Hrxn yes, that's what I meant.
Author
Owner

@mdoulabi commented on GitHub (Mar 29, 2017):

@makgun02

r"(゚ω゚ノ=.?('_');.?)゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_'];",

@mdoulabi commented on GitHub (Mar 29, 2017): @makgun02 r"(゚ω゚ノ=.*?\('_'\);.*?)゚ω゚ノ= /`m´)ノ ~┻━┻ //\*´∇`\*/ \['_'\];",
Author
Owner

@makgun02 commented on GitHub (Mar 29, 2017):

@mdoulabi Replace line 81 of this code with this one js=p.search(webpage).group(2).replace("typeof","") and this will help. This is quick fix so maybe this fails if they update their code again. They are using typeof compare which fails the code. I couldn't understand why @Tithen-Firion code fails but I think, this will help you.

@makgun02 commented on GitHub (Mar 29, 2017): @mdoulabi Replace line 81 of [this](https://pastebin.com/raw/P0FS5SrJ) code with this one `js=p.search(webpage).group(2).replace("typeof","")` and this will help. This is quick fix so maybe this fails if they update their code again. They are using **typeof** compare which fails the code. I couldn't understand why @Tithen-Firion code fails but I think, this will help you.
Author
Owner

@chrisbbreuer commented on GitHub (Mar 29, 2017):

@makgun02 I started a discussion to Tithen's code here https://gist.github.com/Tithen-Firion/6d32aa9995d44332c7cd1bf00ab49562

Any idea why it fails?

@chrisbbreuer commented on GitHub (Mar 29, 2017): @makgun02 I started a discussion to Tithen's code here https://gist.github.com/Tithen-Firion/6d32aa9995d44332c7cd1bf00ab49562 Any idea why it fails?
Author
Owner

@Tithen-Firion commented on GitHub (Mar 29, 2017):

@Chinese1904 @makgun02 @mdoulabi comment about my modified extractor on my fork page here.

@Tithen-Firion commented on GitHub (Mar 29, 2017): @Chinese1904 @makgun02 @mdoulabi comment about my [modified extractor](https://github.com/Tithen-Firion/youtube-dl/blob/openload-fix-that-cant-be-merged/youtube_dl/extractor/openload.py) on my fork page [here](https://github.com/Tithen-Firion/youtube-dl/issues/1).
Author
Owner

@mdoulabi commented on GitHub (Mar 29, 2017):

@makgun02 this again erorr
youtube-dl --ignore-config -v https://openload.co/embed/H27K9ZdaM5k/df-ts9
Traceback (most recent call last):
File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
"main", fname, loader, pkg_name)
File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File "/usr/local/bin/youtube-dl/main.py", line 16, in
File "/usr/local/bin/youtube-dl/youtube_dl/init.py", line 43, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/init.py", line 9, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/extractors.py", line 54, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/ard.py", line 7, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/generic.py", line 85, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 5, in
ImportError: No module named js2py

@mdoulabi commented on GitHub (Mar 29, 2017): @makgun02 this again erorr youtube-dl --ignore-config -v https://openload.co/embed/H27K9ZdaM5k/df-ts9 Traceback (most recent call last): File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main "__main__", fname, loader, pkg_name) File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code exec code in run_globals File "/usr/local/bin/youtube-dl/__main__.py", line 16, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/__init__.py", line 43, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/__init__.py", line 9, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/extractors.py", line 54, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/ard.py", line 7, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/generic.py", line 85, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 5, in <module> ImportError: No module named js2py
Author
Owner

@mdoulabi commented on GitHub (Mar 29, 2017):

@Tithen-Firion
your modified extractor is error :

youtube-dl --help

Traceback (most recent call last):
File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
"main", fname, loader, pkg_name)
File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File "/usr/local/bin/youtube-dl/main.py", line 16, in
File "/usr/local/bin/youtube-dl/youtube_dl/init.py", line 43, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/init.py", line 9, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/extractors.py", line 54, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/ard.py", line 7, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/generic.py", line 85, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 79
SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xb4 in position 0: invalid start byte

@mdoulabi commented on GitHub (Mar 29, 2017): @Tithen-Firion your modified extractor is error : # youtube-dl --help Traceback (most recent call last): File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main "__main__", fname, loader, pkg_name) File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code exec code in run_globals File "/usr/local/bin/youtube-dl/__main__.py", line 16, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/__init__.py", line 43, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/__init__.py", line 9, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/extractors.py", line 54, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/ard.py", line 7, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/generic.py", line 85, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 79 SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xb4 in position 0: invalid start byte
Author
Owner

@Tithen-Firion commented on GitHub (Mar 29, 2017):

@mdoulabi which one? The one that is merged into master branch of this repository or the one that won't be merged into repository because it uses js2py module (which you didn't even install) and should be commented on my fork page?

@Tithen-Firion commented on GitHub (Mar 29, 2017): @mdoulabi which one? The one that is [merged](https://github.com/rg3/youtube-dl/blob/master/youtube_dl/extractor/openload.py) into master branch of this repository or the [one](https://github.com/Tithen-Firion/youtube-dl/blob/openload-fix-that-cant-be-merged/youtube_dl/extractor/openload.py) that won't be merged into repository because it uses `js2py` module (which you didn't even install) and should be commented [on my fork page](https://github.com/Tithen-Firion/youtube-dl/issues/1)?
Author
Owner

@makgun02 commented on GitHub (Mar 29, 2017):

@mdoulabi you need to install js2py module after that probably my and @Tithen-Firion's code must work.

@makgun02 commented on GitHub (Mar 29, 2017): @mdoulabi you need to install `js2py` module after that probably my and @Tithen-Firion's code must work.
Author
Owner

@mdoulabi commented on GitHub (Mar 29, 2017):

how install js2py?

@mdoulabi commented on GitHub (Mar 29, 2017): how install js2py?
Author
Owner

@makgun02 commented on GitHub (Mar 29, 2017):

Type this in terminal sudo easy_install js2py .

@makgun02 commented on GitHub (Mar 29, 2017): Type this in terminal `sudo easy_install js2py` .
Author
Owner

@mdoulabi commented on GitHub (Mar 29, 2017):

@makgun02
i instal js2py but this erorr :(

youtube-dl https://openload.co/embed/H27K9ZdaM5k/df-ts9
[Openload] H27K9ZdaM5k: Downloading webpage
Traceback (most recent call last):
File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
"main", fname, loader, pkg_name)
File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File "/usr/local/bin/youtube-dl/main.py", line 19, in
File "/usr/local/bin/youtube-dl/youtube_dl/init.py", line 464, in main
File "/usr/local/bin/youtube-dl/youtube_dl/init.py", line 454, in _real_main
File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1884, in download
File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 761, in extract_info
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 428, in extract
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 79, in _real_extract
File "/usr/lib64/python2.6/re.py", line 190, in compile
return _compile(pattern, flags)
File "/usr/lib64/python2.6/re.py", line 245, in _compile
raise error, v # invalid expression
sre_constants.error: unexpected end of pattern

@mdoulabi commented on GitHub (Mar 29, 2017): @makgun02 i instal js2py but this erorr :( youtube-dl https://openload.co/embed/H27K9ZdaM5k/df-ts9 [Openload] H27K9ZdaM5k: Downloading webpage Traceback (most recent call last): File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main "__main__", fname, loader, pkg_name) File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code exec code in run_globals File "/usr/local/bin/youtube-dl/__main__.py", line 19, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/__init__.py", line 464, in main File "/usr/local/bin/youtube-dl/youtube_dl/__init__.py", line 454, in _real_main File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1884, in download File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 761, in extract_info File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 428, in extract File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 79, in _real_extract File "/usr/lib64/python2.6/re.py", line 190, in compile return _compile(pattern, flags) File "/usr/lib64/python2.6/re.py", line 245, in _compile raise error, v # invalid expression sre_constants.error: unexpected end of pattern
Author
Owner

@makgun02 commented on GitHub (Mar 29, 2017):

@mdoulabi If this line 79 is p=re.compile(r'<script[^>]+type="[^"]+">(゚ω゚.*?)(var.*?\$\(document\).*?)゚ω゚.*</script>',re.MULTILINE|re.DOTALL|re.UNICODE)#for emoji/js, try to remove #for emoji/js at the end of the line. Otherwise post your line 79 of openload.py.

@makgun02 commented on GitHub (Mar 29, 2017): @mdoulabi If this line **79** is `p=re.compile(r'<script[^>]+type="[^"]+">(゚ω゚.*?)(var.*?\$\(document\).*?)゚ω゚.*</script>',re.MULTILINE|re.DOTALL|re.UNICODE)#for emoji/js`, try to remove `#for emoji/js` at the end of the line. Otherwise post your line 79 of **openload.py**.
Author
Owner

@mdoulabi commented on GitHub (Mar 29, 2017):

@makgun02
i remove #for emoji/js but again erorr :
youtube-dl https://openload.co/embed/H27K9ZdaM5k/df-ts9
[Openload] H27K9ZdaM5k: Downloading webpage
Traceback (most recent call last):
File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
"main", fname, loader, pkg_name)
File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File "/usr/local/bin/youtube-dl/main.py", line 19, in
File "/usr/local/bin/youtube-dl/youtube_dl/init.py", line 464, in main
File "/usr/local/bin/youtube-dl/youtube_dl/init.py", line 454, in _real_main
File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1884, in download
File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 761, in extract_info
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 428, in extract
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 79, in _real_extract
File "/usr/lib64/python2.6/re.py", line 190, in compile
return _compile(pattern, flags)
File "/usr/lib64/python2.6/re.py", line 245, in _compile
raise error, v # invalid expression
sre_constants.error: unexpected end of pattern

@mdoulabi commented on GitHub (Mar 29, 2017): @makgun02 i remove #for emoji/js but again erorr : youtube-dl https://openload.co/embed/H27K9ZdaM5k/df-ts9 [Openload] H27K9ZdaM5k: Downloading webpage Traceback (most recent call last): File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main "__main__", fname, loader, pkg_name) File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code exec code in run_globals File "/usr/local/bin/youtube-dl/__main__.py", line 19, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/__init__.py", line 464, in main File "/usr/local/bin/youtube-dl/youtube_dl/__init__.py", line 454, in _real_main File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 1884, in download File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 761, in extract_info File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 428, in extract File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 79, in _real_extract File "/usr/lib64/python2.6/re.py", line 190, in compile return _compile(pattern, flags) File "/usr/lib64/python2.6/re.py", line 245, in _compile raise error, v # invalid expression sre_constants.error: unexpected end of pattern
Author
Owner

@mdoulabi commented on GitHub (Mar 29, 2017):

@makgun02
i compile youtube with make -b youtube-dl , is true command?
i use of -v and --ignore-confige parameters for download of openload , its ok?

@mdoulabi commented on GitHub (Mar 29, 2017): @makgun02 i compile youtube with make -b youtube-dl , is true command? i use of -v and --ignore-confige parameters for download of openload , its ok?
Author
Owner

@makgun02 commented on GitHub (Mar 29, 2017):

@mdoulabi I am newbie in python and your problem related with re module so I need to say that we have to make sure that we use same version of python because I don't have any problem. My version is Python version 2.7.12+ - Linux-4.8.0-44-generic-x86_64-with-Ubuntu-16.10-yakkety also I don't think that your installation of youtube-dl is wrong. Also please look at this site which says it happens if sepecial meaning char in regex. So try to find correct regex is your mission.

@makgun02 commented on GitHub (Mar 29, 2017): @mdoulabi I am newbie in python and your problem related with `re` module so I need to say that we have to make sure that we use same version of `python` because I don't have any problem. My version is `Python version 2.7.12+ - Linux-4.8.0-44-generic-x86_64-with-Ubuntu-16.10-yakkety` also I **don't** think that your installation of youtube-dl is wrong. Also please look at [this](https://bytes.com/topic/python/answers/29256-v-invalid-expression) site which says it happens if sepecial meaning char in regex. So try to find correct regex is your mission.
Author
Owner

@makgun02 commented on GitHub (Mar 29, 2017):

@mdoulabi please first try @Tithen-Firion 's code and inform us that again you have an error about re module. Quick link for code.

@makgun02 commented on GitHub (Mar 29, 2017): @mdoulabi please first try @Tithen-Firion 's code and inform us that again you have an error about `re` module. [Quick link](https://github.com/Tithen-Firion/youtube-dl/blob/openload-fix-that-cant-be-merged/youtube_dl/extractor/openload.py) for code.
Author
Owner

@mdoulabi commented on GitHub (Mar 29, 2017):

@makgun02 @Tithen-Firion
i use Quick link but syntax error

this is error :
youtube-dl https://openload.co/embed/H27K9ZdaM5k/df-ts9
Traceback (most recent call last):
File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
"main", fname, loader, pkg_name)
File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File "/usr/local/bin/youtube-dl/main.py", line 16, in
File "/usr/local/bin/youtube-dl/youtube_dl/init.py", line 43, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/init.py", line 9, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/extractors.py", line 54, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/ard.py", line 7, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/generic.py", line 85, in
File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 79
SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xb4 in position 0: invalid start byte

@mdoulabi commented on GitHub (Mar 29, 2017): @makgun02 @Tithen-Firion i use [Quick link](https://github.com/Tithen-Firion/youtube-dl/blob/openload-fix-that-cant-be-merged/youtube_dl/extractor/openload.py) but syntax error this is error : youtube-dl https://openload.co/embed/H27K9ZdaM5k/df-ts9 Traceback (most recent call last): File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main "__main__", fname, loader, pkg_name) File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code exec code in run_globals File "/usr/local/bin/youtube-dl/__main__.py", line 16, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/__init__.py", line 43, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/__init__.py", line 9, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/extractors.py", line 54, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/ard.py", line 7, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/generic.py", line 85, in <module> File "/usr/local/bin/youtube-dl/youtube_dl/extractor/openload.py", line 79 SyntaxError: (unicode error) 'utf8' codec can't decode byte 0xb4 in position 0: invalid start byte
Author
Owner

@makgun02 commented on GitHub (Mar 29, 2017):

@mdoulabi this seems that again you have error about re module and in my understanding your python version is 2.6 so please try to update it last version.

@makgun02 commented on GitHub (Mar 29, 2017): @mdoulabi this seems that again you have error about `re` module and in my understanding your python version is `2.6` so please try to update it last version.
Author
Owner

@Tithen-Firion commented on GitHub (Mar 29, 2017):

@mdoulabi don't copy&paste that code. Right click on Raw and save it.

@makgun02 that's a problem with file encoding...

I tested my new code on Python 2.6, 2.7 and 3.6 and it works fine. Pull request here: #12603. Version from my fork is still better. I've improved both of them. They both try to use native decoding function. If that fails, version from my fork tries to evaluate JavaScript. If that fails both of them use new method with pairing your IP with Openload servers. That allows you to download videos from Openload even if both decoding methods fail. Downside is that you get slower download speed and most probably you can download max 5 files at time but I haven't tested it.

@Tithen-Firion commented on GitHub (Mar 29, 2017): @mdoulabi don't copy&paste that code. Right click on `Raw` and save it. @makgun02 that's a problem with file encoding... I tested my new code on Python 2.6, 2.7 and 3.6 and it works fine. Pull request here: #12603. Version from my [fork](https://github.com/Tithen-Firion/youtube-dl/blob/openload-fix-that-cant-be-merged/youtube_dl/extractor/openload.py) is still better. I've improved both of them. They both try to use native decoding function. If that fails, version from my fork tries to evaluate JavaScript. If that fails both of them use new method with pairing your IP with Openload servers. That allows you to download videos from Openload even if both decoding methods fail. Downside is that you get slower download speed and most probably you can download max 5 files at time but I haven't tested it.
Author
Owner

@biezom commented on GitHub (Mar 29, 2017):

@mdoulabi
it seems it's a problem with the compilation of the binary

@biezom commented on GitHub (Mar 29, 2017): @mdoulabi it seems it's a problem with the compilation of the binary
Author
Owner

@mdoulabi commented on GitHub (Mar 29, 2017):

@Tithen-Firion @makgun02
ops , i save raw is ok , thank u man

@mdoulabi commented on GitHub (Mar 29, 2017): @Tithen-Firion @makgun02 ops , i save raw is ok , thank u man
Author
Owner

@mdoulabi commented on GitHub (Mar 30, 2017):

@Tithen-Firion @makgun02
its worked , but now new problem and dont work .

youtube-dl https://openload.co/embed/0f8hmXG0lNs
[Openload] 0f8hmXG0lNs: Downloading webpage
WARNING: [Openload] 0f8hmXG0lNs: Could not decode ID; falling back to method with evaluating
'Use API and/or openload.co/pair instead'
ERROR: unable to download video data: HTTP Error 404: Not Found

@mdoulabi commented on GitHub (Mar 30, 2017): @Tithen-Firion @makgun02 its worked , but now new problem and dont work . youtube-dl https://openload.co/embed/0f8hmXG0lNs [Openload] 0f8hmXG0lNs: Downloading webpage WARNING: [Openload] 0f8hmXG0lNs: Could not decode ID; falling back to method with evaluating 'Use API and/or openload.co/pair instead' ERROR: unable to download video data: HTTP Error 404: Not Found
Author
Owner

@chrisbbreuer commented on GitHub (Mar 30, 2017):

@mdoulabi move the discussion here https://github.com/Tithen-Firion/youtube-dl/issues/1

@chrisbbreuer commented on GitHub (Mar 30, 2017): @mdoulabi move the discussion here https://github.com/Tithen-Firion/youtube-dl/issues/1
Author
Owner

@makgun02 commented on GitHub (Mar 31, 2017):

@mdoulabi It still works for me. Try it again and still doesn't work please add line something like print js_code immediately after last js_code=... for @Tithen-Firion code or For my code just remove # from this line #print js_eval and then send output to us so that we can understand what is going on background of these code. Because they updates it very frequently.

@makgun02 commented on GitHub (Mar 31, 2017): @mdoulabi It still works for me. Try it again and still doesn't work please add line something like `print js_code` immediately after **last** `js_code=...` for @Tithen-Firion code or For my code just remove `#` from this line `#print js_eval` and then send output to us so that we can understand what is going on background of these code. Because they updates it very frequently.
Author
Owner

@chrisbbreuer commented on GitHub (Mar 31, 2017):

I encountered the same error with your code and tithen's. I posted my output to tithen's fork.

@chrisbbreuer commented on GitHub (Mar 31, 2017): I encountered the same error with your code and tithen's. I posted my output to tithen's fork.
Author
Owner

@mdoulabi commented on GitHub (Apr 1, 2017):

@makgun02 i dont undrestand , its new error ,

youtube-dl https://openload.co/embed/0f8hmXG0lNs
[Openload] 0f8hmXG0lNs: Downloading webpage
WARNING: [Openload] 0f8hmXG0lNs: Could not decode ID; falling back to method with evaluating
'Use API and/or openload.co/pair instead'
ERROR: unable to download video data: HTTP Error 404: Not Found

@mdoulabi commented on GitHub (Apr 1, 2017): @makgun02 i dont undrestand , its new error , youtube-dl https://openload.co/embed/0f8hmXG0lNs [Openload] 0f8hmXG0lNs: Downloading webpage WARNING: [Openload] 0f8hmXG0lNs: Could not decode ID; falling back to method with evaluating 'Use API and/or openload.co/pair instead' ERROR: unable to download video data: HTTP Error 404: Not Found
Author
Owner

@makgun02 commented on GitHub (Apr 1, 2017):

@mdoulabi which code are you using? Is it last version? Also please sure that it is last and don't forget to include print js_code which I told before with all details about 1 day ago. For now I am outside so I can not test it. But I will test it when I go home.

@makgun02 commented on GitHub (Apr 1, 2017): @mdoulabi which code are you using? Is it last version? Also please sure that it is last and don't forget to include `print js_code` which I told before with all details about 1 day ago. For now I am outside so I can not test it. But I will test it when I go home.
Author
Owner

@mdoulabi commented on GitHub (Apr 1, 2017):

@makgun02 this code

@mdoulabi commented on GitHub (Apr 1, 2017): @makgun02 [this code](https://raw.githubusercontent.com/rg3/youtube-dl/master/youtube_dl/extractor/openload.py)
Author
Owner

@makgun02 commented on GitHub (Apr 1, 2017):

@mdoulabi please try this code. This requires js2py module.

@makgun02 commented on GitHub (Apr 1, 2017): @mdoulabi please try [this](https://github.com/Tithen-Firion/youtube-dl/blob/openload-fix-that-cant-be-merged/youtube_dl/extractor/openload.py) code. This requires `js2py` module.
Author
Owner

@mdoulabi commented on GitHub (Apr 1, 2017):

@makgun02 thank u . its ok

@mdoulabi commented on GitHub (Apr 1, 2017): @makgun02 thank u . its ok
Author
Owner

@Grumph commented on GitHub (Apr 2, 2017):

@makgun02 Working like a charm here too. Thanks.

@Grumph commented on GitHub (Apr 2, 2017): @makgun02 Working like a charm here too. Thanks.
Author
Owner

@xnidyas commented on GitHub (Apr 9, 2017):

I got youtube-dl install on my ubuntu 14 server and I keep gettings this error while trying to download openload. "-bash: syntax error near unexpected token `('" Anyone know how I can fix this please? Thank's.

@xnidyas commented on GitHub (Apr 9, 2017): I got youtube-dl install on my ubuntu 14 server and I keep gettings this error while trying to download openload. "-bash: syntax error near unexpected token `('" Anyone know how I can fix this please? Thank's.
Author
Owner

@Tithen-Firion commented on GitHub (Apr 9, 2017):

@xnidyas Openload changes the code all the time now. You will have to wait for better solution.

@Tithen-Firion commented on GitHub (Apr 9, 2017): @xnidyas Openload changes the code all the time now. You will have to wait for better solution.
Author
Owner

@xnidyas commented on GitHub (Apr 9, 2017):

I read up there that some people got it working? Or did it break again @Tithen-Firion

@xnidyas commented on GitHub (Apr 9, 2017): I read up there that some people got it working? Or did it break again @Tithen-Firion
Author
Owner

@Tithen-Firion commented on GitHub (Apr 9, 2017):

@xnidyas This works but it only prints download URL. You can download it with curl or wget.

@Tithen-Firion commented on GitHub (Apr 9, 2017): @xnidyas [This](https://gist.github.com/Tithen-Firion/8b3921d745131837519d5c5b95b86440) works but it only prints download URL. You can download it with `curl` or `wget`.
Author
Owner

@TmpName commented on GitHub (Apr 10, 2017):

Hi, if you are interested, I have a python code that can interpret the JScode from openload (up to yesterday in fact ^^).
As the code is changing all the day, I m making it more for fun than a real utility.
I know the code is ugly but it was not my initial project. And for the moment I need to remove lot of hacks.

The code is totaly free to use, even I haven't put licence yet, you can change it from your side if you want.
It was not totaly secure, but not realy dangerous (I m using Eval() but with restriction)

https://github.com/TmpName/TinyJSParser

The code in the exemple file is from the JScode of the last week end, I m using https://github.com/TmpName/Fichier_en_vrac/tree/master/OpenloadExtractor to get the JScode but this file use code from other project (and with other license).

But it will never be as good as JS2py or Ducktape, it's just lighter.

@TmpName commented on GitHub (Apr 10, 2017): Hi, if you are interested, I have a python code that can interpret the JScode from openload (up to yesterday in fact ^^). As the code is changing all the day, I m making it more for fun than a real utility. I know the code is ugly but it was not my initial project. And for the moment I need to remove lot of hacks. The code is totaly free to use, even I haven't put licence yet, you can change it from your side if you want. It was not totaly secure, but not realy dangerous (I m using Eval() but with restriction) https://github.com/TmpName/TinyJSParser The code in the exemple file is from the JScode of the last week end, I m using https://github.com/TmpName/Fichier_en_vrac/tree/master/OpenloadExtractor to get the JScode but this file use code from other project (and with other license). But it will never be as good as JS2py or Ducktape, it's just lighter.
Author
Owner

@Tithen-Firion commented on GitHub (Apr 10, 2017):

@TmpName JavaScript interpreter is already in plans: #11292. You should consider contributing to it. :)

We'll have working extractor (requiring you to pair your IP on https://openload.co/pair webpage once every 4 hours or 5 downloads) with #12603.

Alternatively you can use my experimental module that uses PhantomJS so it can't be merged to master.

@Tithen-Firion commented on GitHub (Apr 10, 2017): @TmpName JavaScript interpreter is already in plans: #11292. You should consider contributing to it. :) We'll have working extractor (requiring you to pair your IP on https://openload.co/pair webpage once every 4 hours or 5 downloads) with #12603. Alternatively you can use my [experimental module](https://github.com/Tithen-Firion/youtube-dl/issues/1) that uses PhantomJS so it can't be merged to master.
Author
Owner

@TmpName commented on GitHub (Apr 11, 2017):

I have already see this issue for your JavaScript interpreter but long time, I haven't see update for it, and this one not working for me, too much work to do on it, but I'm not sure I m using the last version.
And I can't use the pair method, because this code is to be used with kodi, and kodi alone, boring to use a navigator just to solve a captcha.

And use PhantomJs or JS2py with kodi is realy heavy too. For the moment I need to try Ducktape with a wrapper.

@TmpName commented on GitHub (Apr 11, 2017): I have already see this issue for your JavaScript interpreter but long time, I haven't see update for it, and this one not working for me, too much work to do on it, but I'm not sure I m using the last version. And I can't use the pair method, because this code is to be used with kodi, and kodi alone, boring to use a navigator just to solve a captcha. And use PhantomJs or JS2py with kodi is realy heavy too. For the moment I need to try Ducktape with a wrapper.
Author
Owner

@Tithen-Firion commented on GitHub (Apr 11, 2017):

@TmpName Pairing method is used by Exodus addon for Kodi. You can pair using your phone.

Or you could set up a server (in the same network) that uses whatever works to get video url and return it back to Kodi. That way you could use PhantomJS or even better, Selenium WebDriver (Python version).

@Tithen-Firion commented on GitHub (Apr 11, 2017): @TmpName Pairing method is used by Exodus addon for Kodi. You can pair using your phone. Or you could set up a server (in the same network) that uses whatever works to get video url and return it back to Kodi. That way you could use PhantomJS or even better, Selenium WebDriver ([Python version](https://pypi.python.org/pypi/selenium)).
Author
Owner

@dpxcc commented on GitHub (Apr 11, 2017):

I just want to point out that there is another option. You can simply use the openload api (https://openload.co/api, not the hidden stream api which needs pairing)

If you are the owner of the videos, their api always work. But if you are not, their api won't work during the peak hours.

You need to crack a captcha to get the download link. But I think it is not hard using computer vision or existing captcha solving services, e.g. deathbycaptcha.

@dpxcc commented on GitHub (Apr 11, 2017): I just want to point out that there is another option. You can simply use the openload api (https://openload.co/api, not the hidden stream api which needs pairing) If you are the owner of the videos, their api always work. But if you are not, their api won't work during the peak hours. You need to crack a captcha to get the download link. But I think it is not hard using computer vision or existing captcha solving services, e.g. deathbycaptcha.
Author
Owner

@Tithen-Firion commented on GitHub (Apr 11, 2017):

I've tried that API. It seems it's "peak hours" all the time.

@Tithen-Firion commented on GitHub (Apr 11, 2017): I've tried that API. It seems it's "peak hours" all the time.
Author
Owner

@dpxcc commented on GitHub (Apr 11, 2017):

As mentioned in my previous comment, if you are not the owner of the video, the api does not work for you during the peak hours. But if you are the owner, it works 24/7.

@dpxcc commented on GitHub (Apr 11, 2017): As mentioned in my previous comment, if you are not the owner of the video, the api does not work for you during the peak hours. But if you are the owner, it works 24/7.
Author
Owner

@dpxcc commented on GitHub (Apr 11, 2017):

FYI https://github.com/dpxcc/Openload/issues/2#issuecomment-292209021

@dpxcc commented on GitHub (Apr 11, 2017): FYI https://github.com/dpxcc/Openload/issues/2#issuecomment-292209021
Author
Owner

@Tithen-Firion commented on GitHub (Apr 11, 2017):

FYI:

Doesn't work:

  • url decoder in Python - they change the code too often
  • js2py - with not implemented
  • jsdom - checks for [native code] in <some_built_in_function>.toString() fail

Not tested:

  • API. Haven't seen their captcha so I can't tell if it's crackable. Use of DeathByCaptcha is out of the question.

Things that work and can be merged to master:

Things that work and can't be merged to master:

  • extracting video url with PhantomJS
  • extracting video url with Selenium WebDriver (can use PhantomJS for headless browser; Firefox, Chrome and others open browser window)
@Tithen-Firion commented on GitHub (Apr 11, 2017): FYI: **Doesn't work:** * url decoder in Python - they change the code too often * [`js2py`](https://pypi.python.org/pypi/Js2Py) - `with` not implemented * [`jsdom`](https://www.npmjs.com/package/jsdom) - checks for `[native code]` in `<some_built_in_function>.toString()` fail **Not tested:** * API. Haven't seen their captcha so I can't tell if it's crackable. Use of DeathByCaptcha is out of the question. **Things that work and can be merged to master:** * Pairing method. PR: #12603 **Things that work and can't be merged to master:** * extracting video url with [PhantomJS](http://phantomjs.org/) * extracting video url with [Selenium WebDriver](https://pypi.python.org/pypi/selenium) (can use PhantomJS for headless browser; Firefox, Chrome and others open browser window)
Author
Owner

@dpxcc commented on GitHub (Apr 11, 2017):

Interesting. I didn't implement the jsdom solution. It's just the first thing came to my mind to simulate a browser. It seems that jsdom has an open issue that might be related to your toString failure: https://github.com/tmpvar/jsdom/pull/1756

If you just want to build a website and use openload videos, and you don't need fine-grained control over the video (e.g. implementing danmu), the easiest way is to embed with <iframe sandbox="allow-scripts" src="...">. This blocks all pop up ads. But their embed code does not work on certain mobile devices, due to a limitation in videojs with 302 redirect https://github.com/videojs/videojs-contrib-hls/issues/548

@dpxcc commented on GitHub (Apr 11, 2017): Interesting. I didn't implement the jsdom solution. It's just the first thing came to my mind to simulate a browser. It seems that jsdom has an open issue that might be related to your toString failure: https://github.com/tmpvar/jsdom/pull/1756 If you just want to build a website and use openload videos, and you don't need fine-grained control over the video (e.g. implementing danmu), the easiest way is to embed with `<iframe sandbox="allow-scripts" src="...">`. This blocks all pop up ads. But their embed code does not work on certain mobile devices, due to a limitation in videojs with 302 redirect https://github.com/videojs/videojs-contrib-hls/issues/548
Author
Owner

@dammysky commented on GitHub (May 4, 2017):

Openload stream url not extracting again. Please assist

@dammysky commented on GitHub (May 4, 2017): Openload stream url not extracting again. Please assist
Author
Owner

@yan12125 commented on GitHub (May 4, 2017):

Please try #12754.

@yan12125 commented on GitHub (May 4, 2017): Please try #12754.
Author
Owner

@breeser commented on GitHub (Jun 6, 2017):

i just made a c# implementation if you would like to port this over to python, but I don't know how long till they change their algorithm again.
https://gist.github.com/breeser/b2642783898deb01373892779760f845

@breeser commented on GitHub (Jun 6, 2017): i just made a c# implementation if you would like to port this over to python, but I don't know how long till they change their algorithm again. https://gist.github.com/breeser/b2642783898deb01373892779760f845
Author
Owner

@Tithen-Firion commented on GitHub (Jun 6, 2017):

@breeser no point in doing it. They will just change it the next day. See https://github.com/rg3/youtube-dl/pull/12754 or this Gist for better solution.

@Tithen-Firion commented on GitHub (Jun 6, 2017): @breeser no point in doing it. They will just change it the next day. See https://github.com/rg3/youtube-dl/pull/12754 or [this Gist](https://gist.github.com/Tithen-Firion/8b3921d745131837519d5c5b95b86440) for better solution.
Author
Owner

@0xMH commented on GitHub (Jul 18, 2017):

I've tried to download from openload today but It just download useless video instead!

$ youtube-dl -v  https://openload.co/embed/XDZCX9Uqtj0/%5BOKanime.com%5D_OxP_%28001%29.avi.mp4
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: ['-v', 'https://openload.co/embed/XDZCX9Uqtj0/%5BOKanime.com%5D_OxP_%28001%29.avi.mp4']
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2017.07.15
[debug] Python version 3.6.1 - Darwin-16.4.0-x86_64-i386-64bit
[debug] exe versions: ffmpeg 3.3.2, ffprobe 3.3.2
[debug] Proxy map: {}
[Openload] XDZCX9Uqtj0: Downloading webpage
[debug] Invoking downloader on 'https://openload.co/stream/{\xad\x17Oêàjz¶GÆ´\x9ei\x0cOûõjz\nkÆ´ê\x81\x16O\x89àjz\x17µW¦ò4®D\x9bàjz]kÆ´\xad\x81\x16O¾àjz kÆ´¹\x81\x16O£àjzLkÆ´±\x81\x16O½àjz kÆ´\x93\x81\x16O\x88àjzqkÆ´\x83\x81\x16O¾àjzkÆ´¸\x81\x16O\x81àjzBkÆ´\x84\x81\x16OÿàjzCkÆ´\x8a\x81\x16O¹àjzDkÆ´ÿ\x81\x16O±àjzokÆ´¢\x81\x16O¢àjzjkÆ´Ã\x81\x16O¥àjz}kÆ´\x8b\x81\x16O\x8aàjzakÆ´Â\x81\x16O\x9bàjztkÆ´º\x81\x16O³àjz[kÆ´Á\x81\x16O³àjzXkÆ´º\x81\x16O£àjzdkÆ´Ã\x81\x16O\x9aàjzqkÆ´\x89\x81\x16O\x84àjzXkÆ´Â\x81\x16O°àjz]kÆ´¨\x81\x16O\x89àjzokÆ´Ã\x81\x16O?mime=true'
[download] Destination: [OKanime.com] OxP  (001).avi.mp4-XDZCX9Uqtj0.mp4
[download] 100% of 36.00B in 00:00
@0xMH commented on GitHub (Jul 18, 2017): I've tried to download from openload today but It just download useless video instead! ``` $ youtube-dl -v https://openload.co/embed/XDZCX9Uqtj0/%5BOKanime.com%5D_OxP_%28001%29.avi.mp4 [debug] System config: [] [debug] User config: [] [debug] Custom config: [] [debug] Command-line args: ['-v', 'https://openload.co/embed/XDZCX9Uqtj0/%5BOKanime.com%5D_OxP_%28001%29.avi.mp4'] [debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8 [debug] youtube-dl version 2017.07.15 [debug] Python version 3.6.1 - Darwin-16.4.0-x86_64-i386-64bit [debug] exe versions: ffmpeg 3.3.2, ffprobe 3.3.2 [debug] Proxy map: {} [Openload] XDZCX9Uqtj0: Downloading webpage [debug] Invoking downloader on 'https://openload.co/stream/{\xad\x17Oêàjz¶GÆ´\x9ei\x0cOûõjz\nkÆ´ê\x81\x16O\x89àjz\x17µW¦ò4®D\x9bàjz]kÆ´\xad\x81\x16O¾àjz kÆ´¹\x81\x16O£àjzLkÆ´±\x81\x16O½àjz kÆ´\x93\x81\x16O\x88àjzqkÆ´\x83\x81\x16O¾àjzkÆ´¸\x81\x16O\x81àjzBkÆ´\x84\x81\x16OÿàjzCkÆ´\x8a\x81\x16O¹àjzDkÆ´ÿ\x81\x16O±àjzokÆ´¢\x81\x16O¢àjzjkÆ´Ã\x81\x16O¥àjz}kÆ´\x8b\x81\x16O\x8aàjzakÆ´Â\x81\x16O\x9bàjztkÆ´º\x81\x16O³àjz[kÆ´Á\x81\x16O³àjzXkÆ´º\x81\x16O£àjzdkÆ´Ã\x81\x16O\x9aàjzqkÆ´\x89\x81\x16O\x84àjzXkÆ´Â\x81\x16O°àjz]kÆ´¨\x81\x16O\x89àjzokÆ´Ã\x81\x16O?mime=true' [download] Destination: [OKanime.com] OxP (001).avi.mp4-XDZCX9Uqtj0.mp4 [download] 100% of 36.00B in 00:00 ```
Author
Owner

@hrxn commented on GitHub (Jul 18, 2017):

[..] It just download useless video instead!

Pigeons?

@hrxn commented on GitHub (Jul 18, 2017): > [..] It just download useless video instead! Pigeons?
Author
Owner

@makgun02 commented on GitHub (Jul 18, 2017):

@Hrxn I think downloaded file is a text because it is only 36Bytes and probably it contains "403 Forbidden" message or something like that. For now I couldnt check it with my laptop but it seems that decoding code fails, according to @MoHD20 reports, to decode the encrypted digits to find the exact url of video.

@makgun02 commented on GitHub (Jul 18, 2017): @Hrxn I think downloaded file is a text because it is only 36Bytes and probably it contains "403 Forbidden" message or something like that. For now I couldnt check it with my laptop but it seems that decoding code fails, according to @MoHD20 reports, to decode the encrypted digits to find the exact url of video.
Author
Owner

@hrxn commented on GitHub (Jul 18, 2017):

Did you try this as well:
https://gist.github.com/Tithen-Firion/8b3921d745131837519d5c5b95b86440
?

@hrxn commented on GitHub (Jul 18, 2017): Did you try this as well: https://gist.github.com/Tithen-Firion/8b3921d745131837519d5c5b95b86440 ?
Author
Owner

@0xMH commented on GitHub (Jul 21, 2017):

@Hrxn isn't that's the one already used now?

I tried again today with another link and got Bad request responce

    $ youtube-dl -v   https://openload.co/embed/pGydfCpmgC8/%5BOkanime%5D_Dive%21%21_-_03_%5B720P.mp4
    [debug] System config: []
    [debug] User config: []
    [debug] Custom config: []
    [debug] Command-line args: ['-v', 'https://openload.co/embed/pGydfCpmgC8/%5BOkanime%5D_Dive%21%21_-_03_%5B720P.mp4']
    [debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
    [debug] youtube-dl version 2017.07.15
    [debug] Python version 3.6.1 - Darwin-16.4.0-x86_64-i386-64bit
    [debug] exe versions: ffmpeg 3.3.2, ffprobe 3.3.2
    [debug] Proxy map: {}
    [Openload] pGydfCpmgC8: Downloading webpage
    [debug] Invoking downloader on 'https://openload.co/stream/ßDÛ\x91Ó\x9c1¼×%øa4¨Â\x91ôü>¼\x92%øa*WÛ\x91±ü>¼Û$øaöDÛ\x91«Õ>¼\xad%øaÞ\rÆe\x9cü>¼ä%øa³DÛ\x91©ü>¼ñ%øaÆDÛ\x91\x80ü>¼ô%øa\x98DÛ\x91\x92ü>¼×%øaÆDÛ\x91\xadü>¼Ñ%øaµDÛ\x91±ü>¼\x9b%øa\xadDÛ\x91¬ü>¼Ô%øa\xa0DÛ\x91Ìü>¼Õ%øa\x97DÛ\x91\x97ü>¼Ò%øa£DÛ\x91Îü>¼ß%øaªDÛ\x91¤ü>¼ó%øaäDÛ\x91¢ü>¼ú%øa°DÛ\x91·ü>¼Ã%øaÄDÛ\x91\x82ü>¼è%øa\x91DÛ\x91\x99ü>¼Î%øaÆDÛ\x91¦ü>¼ê%øa\x9eDÛ\x91\xadü>¼ä%øaÆDÛ\x91\x96ü>¼È%øa¢DÛ\x91£ü>¼×%øaÆDÛ\x91\x9fü>¼Ð%øaªDÛ\x91\x87ü>¼ß%øaÇDÛ\x91?mime=true'
    ERROR: unable to download video data: HTTP Error 400: Bad Request
    Traceback (most recent call last):
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 1848, in process_info
        success = dl(filename, info_dict)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 1790, in dl
        return fd.download(name, info)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/youtube_dl/downloader/common.py", line 361, in download
        return self.real_download(filename, info_dict)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/youtube_dl/downloader/http.py", line 61, in real_download
        data = self.ydl.urlopen(request)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 2151, in urlopen
        return self._opener.open(req, timeout=self._socket_timeout)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 532, in open
        response = meth(req, response)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 642, in http_response
        'http', request, response, code, msg, hdrs)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 570, in error
        return self._call_chain(*args)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 504, in _call_chain
        result = func(*args)
      File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 650, in http_error_default
        raise HTTPError(req.full_url, code, msg, hdrs, fp)
    urllib.error.HTTPError: HTTP Error 400: Bad Request
@0xMH commented on GitHub (Jul 21, 2017): @Hrxn isn't that's the one already used now? I tried again today with another link and got ```Bad request``` responce $ youtube-dl -v https://openload.co/embed/pGydfCpmgC8/%5BOkanime%5D_Dive%21%21_-_03_%5B720P.mp4 [debug] System config: [] [debug] User config: [] [debug] Custom config: [] [debug] Command-line args: ['-v', 'https://openload.co/embed/pGydfCpmgC8/%5BOkanime%5D_Dive%21%21_-_03_%5B720P.mp4'] [debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8 [debug] youtube-dl version 2017.07.15 [debug] Python version 3.6.1 - Darwin-16.4.0-x86_64-i386-64bit [debug] exe versions: ffmpeg 3.3.2, ffprobe 3.3.2 [debug] Proxy map: {} [Openload] pGydfCpmgC8: Downloading webpage [debug] Invoking downloader on 'https://openload.co/stream/ßDÛ\x91Ó\x9c1¼×%øa4¨Â\x91ôü>¼\x92%øa*WÛ\x91±ü>¼Û$øaöDÛ\x91«Õ>¼\xad%øaÞ\rÆe\x9cü>¼ä%øa³DÛ\x91©ü>¼ñ%øaÆDÛ\x91\x80ü>¼ô%øa\x98DÛ\x91\x92ü>¼×%øaÆDÛ\x91\xadü>¼Ñ%øaµDÛ\x91±ü>¼\x9b%øa\xadDÛ\x91¬ü>¼Ô%øa\xa0DÛ\x91Ìü>¼Õ%øa\x97DÛ\x91\x97ü>¼Ò%øa£DÛ\x91Îü>¼ß%øaªDÛ\x91¤ü>¼ó%øaäDÛ\x91¢ü>¼ú%øa°DÛ\x91·ü>¼Ã%øaÄDÛ\x91\x82ü>¼è%øa\x91DÛ\x91\x99ü>¼Î%øaÆDÛ\x91¦ü>¼ê%øa\x9eDÛ\x91\xadü>¼ä%øaÆDÛ\x91\x96ü>¼È%øa¢DÛ\x91£ü>¼×%øaÆDÛ\x91\x9fü>¼Ð%øaªDÛ\x91\x87ü>¼ß%øaÇDÛ\x91?mime=true' ERROR: unable to download video data: HTTP Error 400: Bad Request Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 1848, in process_info success = dl(filename, info_dict) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 1790, in dl return fd.download(name, info) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/youtube_dl/downloader/common.py", line 361, in download return self.real_download(filename, info_dict) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/youtube_dl/downloader/http.py", line 61, in real_download data = self.ydl.urlopen(request) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 2151, in urlopen return self._opener.open(req, timeout=self._socket_timeout) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 532, in open response = meth(req, response) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 642, in http_response 'http', request, response, code, msg, hdrs) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 570, in error return self._call_chain(*args) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 504, in _call_chain result = func(*args) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 650, in http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 400: Bad Request
Author
Owner

@Tithen-Firion commented on GitHub (Jul 21, 2017):

Nope, it's just a pull request. Openload module in master branch is still broken.

Edit: I meant this: #12754. The other link is just simple example of how to use PhantomJS to get download URL from Openload.

@Tithen-Firion commented on GitHub (Jul 21, 2017): Nope, it's just a pull request. Openload module in master branch is still broken. Edit: I meant this: #12754. The other link is just simple example of how to use PhantomJS to get download URL from Openload.
Author
Owner

@revolter commented on GitHub (Aug 18, 2017):

What about https://github.com/GoogleChrome/puppeteer? Can this be used to extract it?

@revolter commented on GitHub (Aug 18, 2017): What about https://github.com/GoogleChrome/puppeteer? Can this be used to extract it?
Author
Owner

@makgun02 commented on GitHub (Aug 18, 2017):

@revolter I think that (In my opinion) puppeteer needs too much dependency so that it will be useless. Also recoding is required for puppeteer. It will be just waste of time.

@makgun02 commented on GitHub (Aug 18, 2017): @revolter I think that (In my opinion) puppeteer needs too much dependency so that it will be useless. Also recoding is required for puppeteer. It will be just waste of time.
Author
Owner

@yan12125 commented on GitHub (Sep 15, 2017):

This is fixed in #14225, which will be included in the next version. Thanks to @Tithen-Firion!

@yan12125 commented on GitHub (Sep 15, 2017): This is fixed in #14225, which will be included in the next version. Thanks to @Tithen-Firion!
Author
Owner

@yan12125 commented on GitHub (Sep 15, 2017):

As a reference: one of major PhantomJS developer states that the project is now abandoned and suggests puppeteer: https://github.com/ariya/phantomjs/issues/15105#issuecomment-322850178

@yan12125 commented on GitHub (Sep 15, 2017): As a reference: one of major PhantomJS developer states that the project is now abandoned and suggests puppeteer: https://github.com/ariya/phantomjs/issues/15105#issuecomment-322850178
Author
Owner

@partyconfetti commented on GitHub (Dec 5, 2017):

Currently working regexp way if you need;
https://gist.github.com/partyconfetti/db2adb9e5f97635e2192a426738a7cc3

@partyconfetti commented on GitHub (Dec 5, 2017): Currently working regexp way if you need; https://gist.github.com/partyconfetti/db2adb9e5f97635e2192a426738a7cc3
Author
Owner

@makgun02 commented on GitHub (Dec 5, 2017):

@partyconfetti thanks for your code.
(This is Turkish language) Ayrıca bir Türk'ün daha burda olması benim için güzel bir şey. Aramıza hoşgeldin. Uzun zamandır takılmıyordum burda çünkü Android uygulamam sorun çıkarmadı daha ve ayrıca site geliştiricileri de bu aralar sıkça güncellemiyor. Sıkıldılar tabi. Herneyse hayatta başarılar sana.

@makgun02 commented on GitHub (Dec 5, 2017): @partyconfetti thanks for your code. (This is Turkish language) Ayrıca bir Türk'ün daha burda olması benim için güzel bir şey. Aramıza hoşgeldin. Uzun zamandır takılmıyordum burda çünkü Android uygulamam sorun çıkarmadı daha ve ayrıca site geliştiricileri de bu aralar sıkça güncellemiyor. Sıkıldılar tabi. Herneyse hayatta başarılar sana.
Author
Owner

@partyconfetti commented on GitHub (Dec 7, 2017):

@makgun02 thanks 🎉
(bir mail at tanisalim :))

@partyconfetti commented on GitHub (Dec 7, 2017): @makgun02 thanks :tada: (bir mail at tanisalim :))
Author
Owner

@IDerr commented on GitHub (Dec 30, 2017):

EDIT : I am idiot, haven't seen the commit made yesterday :(
Great job.

Hello,
I don't know if it only happens to me but :

 youtube-dl --version
2017.12.28

youtube-dl https://openload.co/embed/pGydfCpmgC8/%5BOkanime%5D_Dive%21%21_-_03_%5B720P.mp4
[Openload] pGydfCpmgC8: Downloading webpage
[Openload] pGydfCpmgC8: Executing JS on webpage
[download] Destination: [Okanime] Dive!! - 03  [720P.mp4-pGydfCpmgC8.mp4
[download] 100% of 36.00B in 00:00

cat \[Okanime\]\ Dive\!\!\ -\ 03\ \ \[720P.mp4-pGydfCpmgC8.mp4 
{"status":500,"msg":"unknown error"}

Hope they didn't change again :(

EDIT :

After verbose mode 👍

youtube-dl -v "https://openload.co/f/kUEfGclsU9o"
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: ['-v', 'https://openload.co/f/kUEfGclsU9o']
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2017.12.28
[debug] Python version 3.6.4 - Linux-4.14.8-1-ARCH-x86_64-with-arch
[debug] exe versions: ffmpeg 3.4.1, ffprobe 3.4.1, phantomjs 2.1.1, rtmpdump 2.4
[debug] Proxy map: {}
[Openload] kUEfGclsU9o: Downloading webpage
[Openload] kUEfGclsU9o: Executing JS on webpage
[debug] Default format spec: bestvideo+bestaudio/best
[debug] Invoking downloader on 'https://openload.co/stream/None?mime=true'
[download] skyrim_no-audio_1080.mp4-kUEfGclsU9o.mp4 has already been downloaded
[download] 100% of 36.00B
@IDerr commented on GitHub (Dec 30, 2017): EDIT : I am idiot, haven't seen the commit made yesterday :( Great job. Hello, I don't know if it only happens to me but : ``` youtube-dl --version 2017.12.28 youtube-dl https://openload.co/embed/pGydfCpmgC8/%5BOkanime%5D_Dive%21%21_-_03_%5B720P.mp4 [Openload] pGydfCpmgC8: Downloading webpage [Openload] pGydfCpmgC8: Executing JS on webpage [download] Destination: [Okanime] Dive!! - 03 [720P.mp4-pGydfCpmgC8.mp4 [download] 100% of 36.00B in 00:00 cat \[Okanime\]\ Dive\!\!\ -\ 03\ \ \[720P.mp4-pGydfCpmgC8.mp4 {"status":500,"msg":"unknown error"} ``` Hope they didn't change again :( EDIT : After verbose mode 👍 ``` youtube-dl -v "https://openload.co/f/kUEfGclsU9o" [debug] System config: [] [debug] User config: [] [debug] Custom config: [] [debug] Command-line args: ['-v', 'https://openload.co/f/kUEfGclsU9o'] [debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8 [debug] youtube-dl version 2017.12.28 [debug] Python version 3.6.4 - Linux-4.14.8-1-ARCH-x86_64-with-arch [debug] exe versions: ffmpeg 3.4.1, ffprobe 3.4.1, phantomjs 2.1.1, rtmpdump 2.4 [debug] Proxy map: {} [Openload] kUEfGclsU9o: Downloading webpage [Openload] kUEfGclsU9o: Executing JS on webpage [debug] Default format spec: bestvideo+bestaudio/best [debug] Invoking downloader on 'https://openload.co/stream/None?mime=true' [download] skyrim_no-audio_1080.mp4-kUEfGclsU9o.mp4 has already been downloaded [download] 100% of 36.00B ```
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/youtube-dl#8572
No description provided.