bvanheu / pytoutv Goto Github PK
View Code? Open in Web Editor NEWTOU.TV client library and user interfaces written in Python 3
TOU.TV client library and user interfaces written in Python 3
toutv fetch -q MAX "Unite 9" S05E11
Cannot find "Unite 9"
Did you mean "UNITÉ 9"?
toutv fetch -q MAX "Unité 9" S05E11
Unknown error: 'NoneType' object has no attribute 'uri'
toutv fetch -q MAX "Unité 9" S05E10
Destination file exists (use -f to force)
toutv fetch -q MAX "Unité 9" S05E11
Unknown error: 'NoneType' object has no attribute 'uri'
This is the same issue as #19, but for macOS. We need to find the appropriate place to put our cache file.
This link could help: https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW1
The m3u8 lists the resolution along with the bitrate. We should use it to display in the bitrate chooser, instead of hardcoded values.
Example:
It would be nicer if they were in the same order as they appear in the list.
There is a problem with Unicode support on Windows. It might be the fact that the terminal is not in UTF8?
To reproduce:
C:\Users\Gabriel\Desktop\Tou.tv-console-application-master>toutv-cli.py fetch --bitrate 790000 "Découverte" S2012E04 unable to find 'DÚcouverte' did you mean one of the following? D├®COUVERTE BAR OUVERT C:\Users\Gabriel\Desktop\Tou.tv-console-application-master>
Looks like the problem is with how newlines are handled with python and Windows (\r\n vs \n).
Although i don't know why it would cause a problem, it looks like mplayer and VLC fail to play the downloaded file.
Oï!
I can get to install version 2 under Debian Linux...
Here is what I get when using pip:
root@zapata:/home/emiliano/.pytoutv/pytoutv# pip install pytoutv
Downloading/unpacking pytoutv
Downloading pytoutv-2.1.1.tar.gz
Running setup.py egg_info for package pytoutv
Sorry, pytoutv needs Python 3.3+
Complete output from command python setup.py egg_info:
Sorry, pytoutv needs Python 3.3+
----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /tmp/pip_build_root/pytoutv
Storing complete log in /root/.pip/pip.log
And yet, python3.3 is installed:
root@zapata:/home/emiliano/.pytoutv/pytoutv# apt-get install python3.3
Reading package lists... Done
Building dependency tree
Reading state information... Done
python3.3 is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
The right dependencies (Python3 ones) are installed.
I'm not used to use pip, but I think the problem might come from the fact that pip tries to use the Python 2 deps by default and thus fails because they are not the required Python3 deps. If it is simply me not using pip right, maybe you should specify how to in the README.
Using setup.py works though.
I kinda miss the simple "clone & run" version 1.
(but Yay! for the cleaner rewrite!)
Search results include lots of details but lack the episode reference which is essential to download.
Perhaps include the same format as in the "list" option.
I've installed pytoutv v 2.3.0 on Debian Jessie, following instructions at https://github.com/bvanheu/pytoutv#ubuntu-and-debian
After a few succesful downloads, I tried a third simultaneous fetch, I now get this error for any operation (list, search, etc):
Unknown error: unpickling stack underflow
It seems like the HTML sources of TOU.TV episode pages do not contain the emission ID anymore.
ERROR:root:Unsupported list of bitrates
when trying to download some episodes using qtoutv.
This is the same issue as #19, but for Windows. We need to find the appropriate place to put our cache file.
I encountered a case where a title contains a ?
character, which is reserved in Unix and Illegal in Windows.
To reproduce:
PS C:\Code\Toutv> toutv-cli.py fetch -q MAX Infoman S14E14
Emission and episode:
Infoman - Quest-il advenu de? (S14E14)
Fetching video with bitrate 1324000 bit/s
Downloading 130 segments...
Traceback (most recent call last):
File "toutv-cli.py", line 548, in <module>
app.run()
File "toutv-cli.py", line 58, in run
args.func(args)
File "toutv-cli.py", line 131, in command_fetch
self.fetch_episode(args.emission, args.episode, args.directory, quality=args.quality, bitrate=args.bitrate)
File "toutv-cli.py", line 410, in fetch_episode
output_file = open(os.path.join(os.path.expanduser(directory), emission.Title + "-" + episode.Title + ".ts"), "wb")`
It would be nice to be able to right-click on a failed download and hit retry to restart it.
Bonus points if the already completely downloaded chunks are not re-downloaded.
The CLI list currently looks like this:
...
2424966275: Sur le Yangzi
2339675742: Synthétiseur
2296651836: Tabula Rasa
2422158697: The pamplemousse
2424966628: Ti-Mé Show
2424966325: Toi et moi
2424966549: Toi, t'es-tu Lucky?
...
What's often done is double-clicking the ID, which also selects the trailing :
character with some terminal emulators, and middle-clicking after having typed toutv list
to list the episodes of this show. Then the trailing :
should not be pasted, so it should be removed from the list output, because it's very annoying.
I just tried to download an episode in an Ubuntu 14.04 container:
(env) root@06dca589bdcd:/pytoutv# toutv fetch Infoman S17E10
Unknown exception: <class 'UnicodeEncodeError'>: 'ascii' codec can't encode character '\xc9' in position 24: ordinal not in range(128)
Traceback (most recent call last):
File "/pytoutv/toutvcli/app.py", line 94, in run
args.func(args)
File "/pytoutv/toutvcli/app.py", line 322, in _command_fetch
bitrate=bitrate, overwrite=args.force)
File "/pytoutv/toutvcli/app.py", line 594, in _fetch_episode_name
bitrate=bitrate, overwrite=overwrite)
File "/pytoutv/toutvcli/app.py", line 573, in _fetch_episode
self._dl.download()
File "/pytoutv/toutv/dl.py", line 290, in download
self._init_download()
File "/pytoutv/toutv/dl.py", line 142, in _init_download
if not self._overwrite and os.path.exists(self._output_path):
File "/env/lib/python3.4/genericpath.py", line 19, in exists
os.stat(path)
UnicodeEncodeError: 'ascii' codec can't encode character '\xc9' in position 24: ordinal not in range(128)
$ toutv -v
Traceback (most recent call last):
File "/home/simark/src/pytoutv-env/bin/toutv", line 9, in <module>
load_entry_point('pytoutv==2.3.1', 'console_scripts', 'toutv')()
File "/home/simark/src/pytoutv/toutvcli/app.py", line 667, in run
return app.run()
File "/home/simark/src/pytoutv/toutvcli/app.py", line 90, in run
if args.build_client:
AttributeError: 'Namespace' object has no attribute 'build_client'
Using the fetch command on newer content (for example content ID 2424966619):
toutv fetch -q MAX '############################'
I receive: Error: cannot fetch "############################": unexpected HTTP status code
Any insight as to what I might be doing wrong?
PS : I voluntarily replaced the show's title by ####.
I've filed ITP #738275 to get this packaged in Debian. If you would prefer package/maintain it yourself, I'll happily reassign the bug.
Hi, for the infoman S15E12 episode, I'm getting this error : Unknown error: Le contenu sélectionné n'est pas disponible dans votre pays
Of course, I've checked in the browser (chromium) and the video play normaly.
Checked the ip geolocation for my ip and it's still Québec.
I'll post back tommorow morning if it work-out by itself. Is there any debug command so I can provide a better idea of the problem...if it's not on my side only.
Thanks
Philippe
This works well enough for me, I think it would be great to tag the current tree as 1.0, based on semver.org logical principals of major/minor/patch releases.
timeout on https://api.tou.tv/v1/toutvapiservice.svc/json/GetEmissions
would it be the website or a problem with python?
I know that in french, "emission" is the right word, but in english it's just weird. :) To give you an idea, here's wikipedia's "Emission" disambuguation page.
The proper word would be a "program" or "show", according again to wikipedia: Television program.
I think the word should be changed in the README.md file and in the usage. Of course, it's fine if "emission" remains in the french translation (assuming there is one in the user interface!) - and it should obviously be "émission" as well. :)
I'd be happy to submit a PR for this.
Et je dis ceci comme un francophone qui s'enfarge sur son français des fois. Mais en anglais c'est juste bizarre...
When we download a serie, it's can be a good idea to check if last episode was already downloaded.
Import in Python is case-sensitive.
Hello,
many of the episodes on ici.tou.tv have subtitles available.
You can download them like this:
It's a vtt file, but the syntax is like in a srt file, so any standard video player will be able to play them.
Maybe you can integrate that into toutv? It's really helpful for people like me, who want to improve their French.
Regards,
MPW
Episodes of the latest season, since January 2015 (maybe others, but this seems consistent), are failing to download with an SSL certificate verification failure.
Unknown error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)
I'm guessing the network has yet again changed its protocol, but I am uncertain as to how to debug this.
C:\Users\sirber\Documents\GitHub\pytoutv>python setup.py install
running install
running bdist_egg
running egg_info
writing requirements to pytoutv.egg-info\requires.txt
writing entry points to pytoutv.egg-info\entry_points.txt
writing dependency_links to pytoutv.egg-info\dependency_links.txt
writing top-level names to pytoutv.egg-info\top_level.txt
writing pytoutv.egg-info\PKG-INFO
reading manifest file 'pytoutv.egg-info\SOURCES.txt'
writing manifest file 'pytoutv.egg-info\SOURCES.txt'
installing library code to build\bdist.win32\egg
running install_lib
running build_py
creating build\bdist.win32\egg
creating build\bdist.win32\egg\toutv
copying build\lib\toutv\bos.py -> build\bdist.win32\egg\toutv
copying build\lib\toutv\cache.py -> build\bdist.win32\egg\toutv
copying build\lib\toutv\client.py -> build\bdist.win32\egg\toutv
copying build\lib\toutv\config.py -> build\bdist.win32\egg\toutv
copying build\lib\toutv\dl.py -> build\bdist.win32\egg\toutv
copying build\lib\toutv\exceptions.py -> build\bdist.win32\egg\toutv
copying build\lib\toutv\m3u8.py -> build\bdist.win32\egg\toutv
copying build\lib\toutv\mapper.py -> build\bdist.win32\egg\toutv
copying build\lib\toutv\transport.py -> build\bdist.win32\egg\toutv
copying build\lib\toutv__init__.py -> build\bdist.win32\egg\toutv
creating build\bdist.win32\egg\toutvcli
copying build\lib\toutvcli\app.py -> build\bdist.win32\egg\toutvcli
copying build\lib\toutvcli\app_test.py -> build\bdist.win32\egg\toutvcli
copying build\lib\toutvcli\progressbar.py -> build\bdist.win32\egg\toutvcli
copying build\lib\toutvcli__init__.py -> build\bdist.win32\egg\toutvcli
creating build\bdist.win32\egg\toutvqt
copying build\lib\toutvqt\about_dialog.py -> build\bdist.win32\egg\toutvqt
copying build\lib\toutvqt\app.py -> build\bdist.win32\egg\toutvqt
copying build\lib\toutvqt\choose_bitrate_dialog.py -> build\bdist.win32\egg\tout
vqt
copying build\lib\toutvqt\config.py -> build\bdist.win32\egg\toutvqt
creating build\bdist.win32\egg\toutvqt\dat
creating build\bdist.win32\egg\toutvqt\dat\icons
copying build\lib\toutvqt\dat\icons\about_action.png -> build\bdist.win32\egg\to
utvqt\dat\icons
copying build\lib\toutvqt\dat\icons\cancel_action.png -> build\bdist.win32\egg\t
outvqt\dat\icons
copying build\lib\toutvqt\dat\icons\open_action.png -> build\bdist.win32\egg\tou
tvqt\dat\icons
copying build\lib\toutvqt\dat\icons\open_dir_action.png -> build\bdist.win32\egg
\toutvqt\dat\icons
copying build\lib\toutvqt\dat\icons\preferences_action.png -> build\bdist.win32
egg\toutvqt\dat\icons
copying build\lib\toutvqt\dat\icons\quit_action.png -> build\bdist.win32\egg\tou
tvqt\dat\icons
copying build\lib\toutvqt\dat\icons\refresh_emissions_action.png -> build\bdist.
win32\egg\toutvqt\dat\icons
copying build\lib\toutvqt\dat\icons\remove_item_action.png -> build\bdist.win32
egg\toutvqt\dat\icons
copying build\lib\toutvqt\dat\icons\toutv.png -> build\bdist.win32\egg\toutvqt\d
at\icons
creating build\bdist.win32\egg\toutvqt\dat\ui
copying build\lib\toutvqt\dat\ui\about_dialog.ui -> build\bdist.win32\egg\toutvq
t\dat\ui
copying build\lib\toutvqt\dat\ui\choose_bitrate_dialog.ui -> build\bdist.win32\e
gg\toutvqt\dat\ui
copying build\lib\toutvqt\dat\ui\emission_infos_widget.ui -> build\bdist.win32\e
gg\toutvqt\dat\ui
copying build\lib\toutvqt\dat\ui\episode_infos_widget.ui -> build\bdist.win32\eg
g\toutvqt\dat\ui
copying build\lib\toutvqt\dat\ui\main_window.ui -> build\bdist.win32\egg\toutvqt
\dat\ui
copying build\lib\toutvqt\dat\ui\preferences_dialog.ui -> build\bdist.win32\egg
toutvqt\dat\ui
copying build\lib\toutvqt\dat\ui\season_infos_widget.ui -> build\bdist.win32\egg
\toutvqt\dat\ui
copying build\lib\toutvqt\downloads_itemdelegate.py -> build\bdist.win32\egg\tou
tvqt
copying build\lib\toutvqt\downloads_tablemodel.py -> build\bdist.win32\egg\toutv
qt
copying build\lib\toutvqt\downloads_tableview.py -> build\bdist.win32\egg\toutvq
t
copying build\lib\toutvqt\download_manager.py -> build\bdist.win32\egg\toutvqt
copying build\lib\toutvqt\emissions_treemodel.py -> build\bdist.win32\egg\toutvq
t
copying build\lib\toutvqt\emissions_treeview.py -> build\bdist.win32\egg\toutvqt
copying build\lib\toutvqt\infos_frame.py -> build\bdist.win32\egg\toutvqt
copying build\lib\toutvqt\main_window.py -> build\bdist.win32\egg\toutvqt
copying build\lib\toutvqt\preferences_dialog.py -> build\bdist.win32\egg\toutvqt
copying build\lib\toutvqt\settings.py -> build\bdist.win32\egg\toutvqt
copying build\lib\toutvqt\utils.py -> build\bdist.win32\egg\toutvqt
copying build\lib\toutvqt__init__.py -> build\bdist.win32\egg\toutvqt
byte-compiling build\bdist.win32\egg\toutv\bos.py to bos.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutv\cache.py to cache.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutv\client.py to client.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutv\config.py to config.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutv\dl.py to dl.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutv\exceptions.py to exceptions.cpython-3
5.pyc
byte-compiling build\bdist.win32\egg\toutv\m3u8.py to m3u8.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutv\mapper.py to mapper.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutv\transport.py to transport.cpython-35.
pyc
byte-compiling build\bdist.win32\egg\toutv__init__.py to init.cpython-35.py
c
byte-compiling build\bdist.win32\egg\toutvcli\app.py to app.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutvcli\app_test.py to app_test.cpython-35
.pyc
byte-compiling build\bdist.win32\egg\toutvcli\progressbar.py to progressbar.cpyt
hon-35.pyc
byte-compiling build\bdist.win32\egg\toutvcli__init__.py to init.cpython-35
.pyc
byte-compiling build\bdist.win32\egg\toutvqt\about_dialog.py to about_dialog.cpy
thon-35.pyc
byte-compiling build\bdist.win32\egg\toutvqt\app.py to app.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutvqt\choose_bitrate_dialog.py to choose_
bitrate_dialog.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutvqt\config.py to config.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutvqt\downloads_itemdelegate.py to downlo
ads_itemdelegate.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutvqt\downloads_tablemodel.py to download
s_tablemodel.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutvqt\downloads_tableview.py to downloads
tableview.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutvqt\download_manager.py to download_man
ager.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutvqt\emissions_treemodel.py to emissions
treemodel.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutvqt\emissions_treeview.py to emissions
treeview.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutvqt\infos_frame.py to infos_frame.cpyth
on-35.pyc
byte-compiling build\bdist.win32\egg\toutvqt\main_window.py to main_window.cpyth
on-35.pyc
byte-compiling build\bdist.win32\egg\toutvqt\preferences_dialog.py to preference
s_dialog.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutvqt\settings.py to settings.cpython-35.
pyc
byte-compiling build\bdist.win32\egg\toutvqt\utils.py to utils.cpython-35.pyc
byte-compiling build\bdist.win32\egg\toutvqt__init_.py to init.cpython-35.
pyc
creating build\bdist.win32\egg\EGG-INFO
copying pytoutv.egg-info\PKG-INFO -> build\bdist.win32\egg\EGG-INFO
copying pytoutv.egg-info\SOURCES.txt -> build\bdist.win32\egg\EGG-INFO
copying pytoutv.egg-info\dependency_links.txt -> build\bdist.win32\egg\EGG-INFO
copying pytoutv.egg-info\entry_points.txt -> build\bdist.win32\egg\EGG-INFO
copying pytoutv.egg-info\requires.txt -> build\bdist.win32\egg\EGG-INFO
copying pytoutv.egg-info\top_level.txt -> build\bdist.win32\egg\EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating 'dist\pytoutv-2.3.0-py3.5.egg' and adding 'build\bdist.win32\egg' to it
removing 'build\bdist.win32\egg' (and everything under it)
Processing pytoutv-2.3.0-py3.5.egg
Removing c:\users\sirber\appdata\local\programs\python\python35-32\lib\site-pack
ages\pytoutv-2.3.0-py3.5.egg
Copying pytoutv-2.3.0-py3.5.egg to c:\users\sirber\appdata\local\programs\python
\python35-32\lib\site-packages
pytoutv 2.3.0 is already the active version in easy-install.pth
Installing toutv-script.py script to C:\Users\sirber\AppData\Local\Programs\Pyth
on\Python35-32\Scripts
Installing toutv.exe script to C:\Users\sirber\AppData\Local\Programs\Python\Pyt
hon35-32\Scripts
Installing toutv.exe.manifest script to C:\Users\sirber\AppData\Local\Programs\P
ython\Python35-32\Scripts
Installing qtoutv-script.pyw script to C:\Users\sirber\AppData\Local\Programs\Py
thon\Python35-32\Scripts
Installing qtoutv.exe script to C:\Users\sirber\AppData\Local\Programs\Python\Py
thon35-32\Scripts
Installing qtoutv.exe.manifest script to C:\Users\sirber\AppData\Local\Programs
Python\Python35-32\Scripts
Installed c:\users\sirber\appdata\local\programs\python\python35-32\lib\site-pac
kages\pytoutv-2.3.0-py3.5.egg
Processing dependencies for pytoutv==2.3.0
Searching for pycrypto>=2.0.0
Reading https://pypi.python.org/simple/pycrypto/
Best match: pycrypto 2.6.1
Downloading https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.ta
r.gz#md5=55a61a054aa66812daf5161a0d5d7eda
Processing pycrypto-2.6.1.tar.gz
Writing C:\Users\sirber\AppData\Local\Temp\easy_install-qcn51fml\pycrypto-2.6.1
setup.cfg
Running pycrypto-2.6.1\setup.py -q bdist_egg --dist-dir C:\Users\sirber\AppData
Local\Temp\easy_install-qcn51fml\pycrypto-2.6.1\egg-dist-tmp-b5oi4mfl
warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath.
error: Setup script exited with error: [WinError 2] The system cannot find the f
ile specified
pytoutv READMEs are really huge.
I suggest minimizing them the following way:
pip
method, which is simplerOn Linux it could be something like $HOME/.cache/toutv
On Windows, %AppData%\toutv
Quand on tente de chercher une émission, on mentionne que "seach" n'existe pas.
monOrdinateur:bin monUsername$ python3.4 toutv search "Infoman"
Unknown error: name 'seach' is not defined
Made pull request with the corrected variable name.
Merci!
In the settings there should be a scroll down item to choose what quality to download. I suggest the following choices:
Since the dawn of time, mankind has used stress in a constructive manner. It has helped him capture animals for food as well as escape from danger. In modern society, however, sources of stress have become ubiquitous. They are now mostly more a nuisance and a health hazard than an advantage. Using pytoutv should not contribute to elevate our global level of stress. To the contrary, it should be a relaxing and revigorating experience.
It turns out that right now, downloads (at least for me) are relatively frequently interrupted because of various network errors and timeouts. For example, I just got this twice:
Découverte.S2014E19.Le.Cap.1325kbps.ts 231.1 MiB 137/258 [##################################------------------------------] 53%
Unknown error: ('Connection aborted.', gaierror(-2, 'Name or service not known'))
This makes downloading a big file (e.g. Découverte in HQ, ~400 megabytes) an unacceptable moment of worrying: will my download reach completion or not?
pytoutv should do either or both of:
I am sure that 1 is not too hard to implement., but 2 should be possible as well. I don't know if it would be possible to resume a partial download at the right position using only the partial ts file, or if we'd need an index on the side to remember where we left off.
Quand j'essaie de faire une recherche j'obtiens cette erreur :
[~/tmp/Tou.tv-console-application-master] ./toutv-cli.py search 19-2
Traceback (most recent call last):
File "./toutv-cli.py", line 379, in
app.run()
File "./toutv-cli.py", line 48, in run
args.func(args)
File "./toutv-cli.py", line 108, in command_search
self.search(' '.join(args.query))
File "./toutv-cli.py", line 111, in search
searchresult = self.toutvclient.search_terms(query)
File "/home/cbourque/tmp/Tou.tv-console-application-master/toutv/client.py", line 429, in search_terms
return self.transport.search_terms(query)
File "/home/cbourque/tmp/Tou.tv-console-application-master/toutv/client.py", line 367, in search_terms
searchresults_dto = self._do_query("SearchTerms", {"query": query})
File "/home/cbourque/tmp/Tou.tv-console-application-master/toutv/client.py", line 318, in _do_query
json_decoded = self.json_decoder.decode(urllib2.urlopen(request).read())
File "/usr/lib64/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib64/python2.7/urllib2.py", line 406, in open
response = meth(req, response)
File "/usr/lib64/python2.7/urllib2.py", line 519, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib64/python2.7/urllib2.py", line 444, in error
return self._call_chain(_args)
File "/usr/lib64/python2.7/urllib2.py", line 378, in _call_chain
result = func(_args)
File "/usr/lib64/python2.7/urllib2.py", line 527, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 500: Internal Server Error
Hi everyone :)
I'm a noob, so please bear with me !!! Been getting this error lately (I tried uninstalling and installing back pytoutv with pip3 on OSX Yosemite, python 3.5.1 installed, but I still get this error. I installed it on my old ubuntu server and it works fine... what did I do on OSX so it does''T work anymore...that I don't know !!)
<class 'UnicodeDecodeError'>: 'utf-8' codec can't decode byte 0x97 in position 34: invalid start byte
Can anybody help me ?
Thanks.
Chester.
It would be nice to just paste-in an episode or show URL and have the application figure-out show and episode it by itself instead of using the CLI interface to search it.
get_flash_videos
works like that and I like that.
For example, searching for the show 19-2 ended up being quite tedious because 19 and 2 appear in a lot of text. Ended up doing ./tou.tv-cli.py list | grep 19-2
There is no way to fetch content from the "Extra" section!
The second one doesn't seem to get added.
Hi, it's the second time I saw this bug.
"Emission and episode:
Enquête - L’affaire Rob Ford (S2013E10)
Fetching video with bitrate 925000 bit/s
Downloading 260 segments...
Traceback (most recent call last):########## ] 56%
File "../toutv-cli.py", line 548, in
app.run()
File "../toutv-cli.py", line 58, in run
args.func(args)
File "../toutv-cli.py", line 131, in command_fetch
self.fetch_episode(args.emission, args.episode, args.directory, quality=args.quality, bitrate=args.bitrate)
File "../toutv-cli.py", line 414, in fetch_episode
ts_file = urllib2.urlopen(request).read()
File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 410, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 523, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 448, in error
return self._call_chain(_args)
File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
result = func(_args)
File "/usr/lib/python2.7/urllib2.py", line 531, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 404: Not Found
"
The downloading always stop at 56%.
Do you have some idea?
Once the bitrate is chosen for a group of episodes (download all episodes or download season episodes), a timeout may occur; here's the traceback:
Traceback (most recent call last):
File "/usr/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 331, in _make_request
httplib_response = conn.getresponse(buffering=True)
TypeError: getresponse() got an unexpected keyword argument 'buffering'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 333, in _make_request
httplib_response = conn.getresponse()
File "/usr/lib64/python3.4/http/client.py", line 1172, in getresponse
response.begin()
File "/usr/lib64/python3.4/http/client.py", line 351, in begin
version, status, reason = self._read_status()
File "/usr/lib64/python3.4/http/client.py", line 313, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "/usr/lib64/python3.4/socket.py", line 371, in readinto
return self._sock.recv_into(b)
socket.timeout: timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.4/site-packages/requests/adapters.py", line 362, in send
timeout=timeout
File "/usr/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 559, in urlopen
_pool=self, _stacktrace=stacktrace)
File "/usr/lib/python3.4/site-packages/requests/packages/urllib3/util/retry.py", line 245, in increment
raise six.reraise(type(error), error, _stacktrace)
File "/usr/lib/python3.4/site-packages/requests/packages/urllib3/packages/six.py", line 310, in reraise
raise value
File "/usr/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 516, in urlopen
body=body, headers=headers)
File "/usr/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py", line 336, in _make_request
self, url, "Read timed out. (read timeout=%s)" % read_timeout)
requests.packages.urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='api.radio-canada.ca', port=80): Read timed out. (read timeout=15)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/eepp/dev/pytoutv/toutv/dl.py", line 95, in _do_request
timeout=15, stream=stream)
File "/usr/lib/python3.4/site-packages/requests/api.py", line 59, in get
return request('get', url, **kwargs)
File "/usr/lib/python3.4/site-packages/requests/api.py", line 48, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3.4/site-packages/requests/sessions.py", line 451, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3.4/site-packages/requests/sessions.py", line 557, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python3.4/site-packages/requests/adapters.py", line 422, in send
raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPConnectionPool(host='api.radio-canada.ca', port=80): Read timed out. (read timeout=15)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/eepp/dev/pytoutv/toutvqt/main_window.py", line 243, in _on_bitrate_chosen
self.start_download_episodes(res_index, episodes, output_dir)
File "/home/eepp/dev/pytoutv/toutvqt/main_window.py", line 217, in start_download_episodes
qualities = episode.get_available_qualities()
File "/home/eepp/dev/pytoutv/toutv/bos.py", line 468, in get_available_qualities
playlist = toutv.dl.Downloader.get_episode_playlist(self, proxies)
File "/home/eepp/dev/pytoutv/toutv/dl.py", line 139, in get_episode_playlist
pl, cookies = Downloader.get_episode_playlist_cookies(episode, proxies)
File "/home/eepp/dev/pytoutv/toutv/dl.py", line 127, in get_episode_playlist_cookies
url = Downloader.get_episode_playlist_url(episode)
File "/home/eepp/dev/pytoutv/toutv/dl.py", line 117, in get_episode_playlist_url
timeout=15)
File "/home/eepp/dev/pytoutv/toutv/dl.py", line 100, in _do_request
raise toutv.exceptions.RequestTimeout(url, timeout)
toutv.exceptions.RequestTimeout: Request timeout (15 s for "http://api.radio-canada.ca/validationMedia/v1/Validation.html")
Add optional colored output.
Hi all,
I am trying to fetch content from the EXTRA section of Tou.TV. I saw a previous post discussing the issue and I tried to find what I had to input in my Terminal to get this to work.
So far, I have tried to enter the following command line:
toutv login -u [email protected] -p xxx
My terminal returns the following message:
usage: toutv [-h] [-V] {list,info,search,fetch} ...
toutv: error: argument command: invalid choice: 'login' (choose from 'list', 'info', 'search', 'fetch')
So I guess I am missing something somewhere to get this to work.
Just wanted to tell you that I am able to fetch videos from the actual Tou.TV website without any problem, thanks for this great tool!
Any help is appreciated!
Just got this error while trying to fetch a new episode.
It looks like there is no EXT-X-KEY in the M3U8.
I think tou.tv made some recent changes to their protocol...
./toutv-cli.py search Deep
[...]
Episode:
Emission ID: 2297043829
Episode ID: 2302458066
Le monde parallèle:
Adrian et Martin entrent dans une cuisine parallèle, presque identique à la leur, mais beaucoup
plus sinistre.Comment réagir lorsqu’on rencontre son double?
[...]
./toutv-cli.py fetch -d ~/tou.tv --quality MAX 2297043829 2302458066
Emission and episode:
Deep - Le monde parallèle (S01E07)
Traceback (most recent call last):
File "./toutv-cli.py", line 389, in
app.run()
File "./toutv-cli.py", line 48, in run
args.func(args)
File "./toutv-cli.py", line 105, in command_fetch
self.fetch_episodes(args.emission, args.episode, args.directory, quality=args.quality, bitrate=args.bitrate)
File "./toutv-cli.py", line 283, in fetch_episodes
request = urllib2.Request(url, None, {"User-Agent" : client.IPHONE4_USER_AGENT})
File "/usr/lib/python2.7/urllib2.py", line 198, in init
self.__original = unwrap(url)
File "/usr/lib/python2.7/urllib.py", line 1056, in unwrap
url = url.strip()
AttributeError: 'NoneType' object has no attribute 'strip'
Hi guys,
I having trouble downloading an episode:
$ toutv fetch -q MAX -d epi7 "Dans l'oeil du dragon" "S03E07"
Dans.l'oeil.du.dragon.S03E07.Episode.7.2124kbps.ts 118.7 MiB 44/260 [#########-------------------------------------------] 16%Unknown error: HTTPConnectionPool(host='toutvuniver1-vh.akamaihd.net', port=80): Read timed out.
Might be related to #36 . A resume feature would be great; do you know if it is supported by Tou.Tv ?
L'ETS est partout!
Merci Vanheu!
When adding multiple downloads (all the episodes of a show or a season), the UI blocks completely while we download the m3u8 playlist of all the episodes. This takes quite some time, during which the whole UI is frozen.
At first, some feedback should be given to indicate the progression, with a possibility of cancellation.
Also, this operation would benefit a lot from being paralellized. The latency of doing one small HTTP GET is quite high, but the size of the response is small. We could send a bunch of requests in parallel and wait for them to come back.
Hi, I followed the installation for OS X : sudo pip3 install pytoutv. Everything is good.
Just want to know how to get access to EXTRA files (or at least 720p). I don't plan on testing, just want to get the version with 720p downloading!
there seems to be certain videos that fail to download because of problems with HTTPS:
$ toutv fetch Infoman S15E16
Unknown error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)
wget seems to be able to get the file correctly, however:
$ strace -s 8192 -e recvfrom toutv fetch Infoman S15E16
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=24340, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=24341, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
recvfrom(5, "\7\216\201\200\0\1\0\2\0\1\0\0\3api\fradio-canada\2ca\0\0\34\0\1\300\f\0\5\0\1\0\0\7\324\0\34\3san\7src-cbc\2ca\7edgekey\3net\0\3001\0\5\0\1\0\0>\334\0\25\5e5627\1g\nakamaiedge\300H\300_\0\6\0\1\0\0\2M\0001\3n0g\300a\nhostmaster\6akamai\3com\0T\253\\e\0\0\3\350\0\0\3\350\0\0\3\350\0\0\7\10", 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}, [16]) = 171
recvfrom(5, "|\342\201\200\0\1\0\3\0\0\0\0\3api\fradio-canada\2ca\0\0\1\0\1\300\f\0\5\0\1\0\0\7\324\0\34\3san\7src-cbc\2ca\7edgekey\3net\0\3001\0\5\0\1\0\0>\334\0\25\5e5627\1g\nakamaiedge\300H\300Y\0\1\0\1\0\0\0\24\0\4\27\t`\311", 1877, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}, [16]) = 126
recvfrom(5, "HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/7.5\r\nContent-Length: 382\r\nContent-Type: application/json\r\nAccess-Control-Allow-Headers: *\r\nAccess-Control-Allow-Origin: *\r\nX-Powered-By: ASP.NET\r\nETag: \"90aeefc1affecf1:0\"\r\nDate: Tue, 06 Jan 2015 04:01:05 GMT\r\nConnection: keep-alive\r\n\r\n{\"url\":\"https://toutvuniver1-vh.akamaihd.net/i/012/mp4/i/2014-12-31_22_00_00_infoman_0385_,400,500,800,1200,.mp4.csmil/master.m3u8?hdnea=st=1420516862~exp=1420516877~acl=/i/012/mp4/i/2014-12-31_22_00_00_infoman_0385_*~hmac=b7beecbc39e2c89fc033f8946e74d0771adb92acbbe36d75332ace8c4722d5ed\",\"message\":null,\"errorCode\":0,\"params\":[{\"name\":\"mediaType\",\"value\":\"video\"}],\"bitrates\":null}", 8192, 0, NULL, NULL) = 657
recvfrom(5, "\360-\201\200\0\1\0\1\0\1\0\0\17toutvuniver1-vh\10akamaihd\3net\0\0\34\0\1\300\f\0\5\0\1\0\0\0\362\0\22\4a214\3w10\6akamai\300%\300?\0\6\0\1\0\0\2N\0003\5n0w10\300C\nhostmaster\6akamai\3com\0T\253\\f\0\0\3\350\0\0\3\350\0\0\3\350\0\0\7\10", 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}, [16]) = 139
recvfrom(5, "wI\201\200\0\1\0\3\0\0\0\0\17toutvuniver1-vh\10akamaihd\3net\0\0\1\0\1\300\f\0\5\0\1\0\0\0\362\0\22\4a214\3w10\6akamai\300%\300:\0\1\0\1\0\0\0\24\0\4\330\234\307*\300:\0\1\0\1\0\0\0\24\0\4\330\234\307)", 1909, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}, [16]) = 108
Unknown error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)
+++ exited with 100 +++
$ wget https://toutvuniver1-vh.akamaihd.net/i/012/mp4/i/2014-12-31_22_00_00_infoman_0385_,400,500,800,1200,.mp4.csmil/master.m3u8?hdnea=st=1420516862~exp=1420516877~acl=/i/012/mp4/i/2014-12-31_22_00_00_infoman_0385_*~hmac=b7beecbc39e2c89fc033f8946e74d0771adb92acbbe36d75332ace8c4722d5ed
--2015-01-05 23:01:15-- https://toutvuniver1-vh.akamaihd.net/i/012/mp4/i/2014-12-31_22_00_00_infoman_0385_,400,500,800,1200,.mp4.csmil/master.m3u8?hdnea=st=1420516862~exp=1420516877~acl=/i/012/mp4/i/2014-12-31_22_00_00_infoman_0385_*~hmac=b7beecbc39e2c89fc033f8946e74d0771adb92acbbe36d75332ace8c4722d5ed
Résolution de toutvuniver1-vh.akamaihd.net (toutvuniver1-vh.akamaihd.net)… 216.156.199.42, 216.156.199.41
Connexion à toutvuniver1-vh.akamaihd.net (toutvuniver1-vh.akamaihd.net)|216.156.199.42|:443… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 1285 (1,3K) [application/vnd.apple.mpegurl]
Sauvegarde en : « master.m3u8?hdnea=st=1420516862~exp=1420516877~acl=%2Fi%2F012%2Fmp4%2Fi%2F2014-12-31_22_00_00_infoman_0385_*~hmac=b7beecbc39e2c89fc033f8946e74d0771adb92acbbe36d75332ace8c4722d5ed »
master.m3u8?hdnea=st=1420516862~exp=1420516877~acl=%2Fi%2F0 100%[============================================================================================================================================>] 1,25K --.-KB/s ds 0s
2015-01-05 23:01:15 (13,1 MB/s) — « master.m3u8?hdnea=st=1420516862~exp=1420516877~acl=%2Fi%2F012%2Fmp4%2Fi%2F2014-12-31_22_00_00_infoman_0385_*~hmac=b7beecbc39e2c89fc033f8946e74d0771adb92acbbe36d75332ace8c4722d5ed » sauvegardé [1285/1285]
Now, interestingly, other episodes seem to download fine:
$ toutv fetch -f Enquête S2014E11
Enquête.S2014E11.La.guerre.des.bois.925kbps.ts 776.0 kiB 0/260 [----------------------------------------------------------------------------------] 0%
... this one is not served from an HTTPS url!
$ strace -e recvfrom -s 4096 toutv fetch -f Enquête S2014E11
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=24760, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=24761, si_uid=1000, si_status=0, si_utime=0, si_stime=0} ---
recvfrom(5, "s\351\201\200\0\1\0\3\0\0\0\0\3api\fradio-canada\2ca\0\0\1\0\1\300\f\0\5\0\1\0\0\7M\0\34\3san\7src-cbc\2ca\7edgekey\3net\0\3001\0\5\0\1\0\0>U\0\25\5e5627\1g\nakamaiedge\300H\300Y\0\1\0\1\0\0\0\5\0\4\27\t`\311", 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}, [16]) = 126
recvfrom(5, "V\234\201\200\0\1\0\2\0\1\0\0\3api\fradio-canada\2ca\0\0\34\0\1\300\f\0\5\0\1\0\0\7M\0\34\3san\7src-cbc\2ca\7edgekey\3net\0\3001\0\5\0\1\0\0>U\0\25\5e5627\1g\nakamaiedge\300H\300_\0\6\0\1\0\0\1\306\0001\3n0g\300a\nhostmaster\6akamai\3com\0T\253\\e\0\0\3\350\0\0\3\350\0\0\3\350\0\0\7\10", 1922, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}, [16]) = 171
recvfrom(5, "HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/7.5\r\nContent-Length: 368\r\nContent-Type: application/json\r\nAccess-Control-Allow-Headers: *\r\nAccess-Control-Allow-Origin: *\r\nX-Powered-By: ASP.NET\r\nETag: \"90aeefc1affecf1:0\"\r\nDate: Tue, 06 Jan 2015 04:03:19 GMT\r\nConnection: keep-alive\r\n\r\n{\"url\":\"http://cp143903-f.akamaihd.net/i/012/mp4/e/2014-12-04_21_00_00_enq_0174_,400,500,800,1200,.mp4.csmil/master.m3u8?hdnea=st=1420516996~exp=1420517011~acl=/i/012/mp4/e/2014-12-04_21_00_00_enq_0174_*~hmac=595a0a471796cda7f848bdc72d6e6964faa157c1b43ad67066fce35949fb5038\",\"message\":null,\"errorCode\":0,\"params\":[{\"name\":\"mediaType\",\"value\":\"video\"}],\"bitrates\":null}", 8192, 0, NULL, NULL) = 643
recvfrom(5, "\3755\201\200\0\1\0\3\0\0\0\0\ncp143903-f\10akamaihd\3net\0\0\1\0\1\300\f\0\5\0\1\0\0\0|\0\20\2a5\3w23\6akamai\300 \3005\0\1\0\1\0\0\0\5\0\4\314\234\0170\3005\0\1\0\1\0\0\0\5\0\4\314\234\17\t", 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}, [16]) = 101
recvfrom(5, "9\372\201\200\0\1\0\1\0\1\0\0\ncp143903-f\10akamaihd\3net\0\0\34\0\1\300\f\0\5\0\1\0\0\0|\0\20\2a5\3w23\6akamai\300 \3008\0\6\0\1\0\0\2\7\0003\5n0w23\300<\nhostmaster\6akamai\3com\0T\253\\\247\0\0\3\350\0\0\3\350\0\0\3\350\0\0\7\10", 1947, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}, [16]) = 132
recvfrom(5, "HTTP/1.0 200 OK\r\nServer: AkamaiGHost\r\nMime-Version: 1.0\r\nContent-Type: application/vnd.apple.mpegurl\r\nContent-Length: 1551\r\nPragma: no-cache\r\nCache-Control: no-store\r\nExpires: Tue, 06 Jan 2015 04:03:19 GMT\r\nDate: Tue, 06 Jan 2015 04:03:19 GMT\r\nConnection: keep-alive\r\nSet-Cookie: hdntl=exp=1420603399~acl=%2fi%2f012%2fmp4%2fe%2f2014-12-04_21_00_00_enq_0174_*~data=hdntl~hmac=351f90dca30e149492e8311aa6fb071c6603f636497b0d5eaa8841ebadca2eb4; path=/; domain=cp143903-f.akamaihd.net; \r\nSet-Cookie: _alid_=OgZcl4MfcHGlfU/wKcdgUg==; path=/i//012/mp4/e/2014-12-04_21_00_00_enq_0174_,400,500,800,1200,.mp4.csmil/; domain=cp143903-f.akamaihd.net\r\n\r\n#EXTM3U\n#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=461000,RESOLUTION=480x270,CODECS=\"avc1.66.30, mp4a.40.2\"\nhttp://cp143903-f.akamaihd.net/i/012/mp4/e/2014-12-04_21_00_00_enq_0174_,400,500,800,1200,.mp4.csmil/index_0_av.m3u8?null=&id=AgBIAEiQzJwPLIdeq1TtNog05%2fxoLFnr7XwBzkt%2fownbcelxeg8u2bC831MJyKDEMpgL+HRj%2fQnw1A%3d%3d\n#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=561000,RESOLUTION=512x288,CODECS=\"avc1.66.30, mp4a.40.2\"\nhttp://cp143903-f.akamaihd.net/i/012/mp4/e/2014-12-04_21_00_00_enq_0174_,400,500,800,1200,.mp4.csmil/index_1_av.m3u8?null=&id=AgBIAEiQzJwPLIdeq1TtNog05%2fxoLFnr7XwBzkt%2fownbcelxeg8u2bC831MJyKDEMpgL+HRj%2fQnw1A%3d%3d\n#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=925000,RESOLUTION=", 8192, 0, NULL, NULL) = 1338
recvfrom(5, "640x360,CODECS=\"avc1.66.30, mp4a.40.2\"\nhttp://cp143903-f.akamaihd.net/i/012/mp4/e/2014-12-04_21_00_00_enq_0174_,400,500,800,1200,.mp4.csmil/index_2_av.m3u8?null=&id=AgBIAEiQzJwPLIdeq1TtNog05%2fxoLFnr7XwBzkt%2fownbcelxeg8u2bC831MJyKDEMpgL+HRj%2fQnw1A%3d%3d\n#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1325000,RESOLUTION=852x480,CODECS=\"avc1.77.30, mp4a.40.2\"\nhttp://cp143903-f.akamaihd.net/i/012/mp4/e/2014-12-04_21_00_00_enq_0174_,400,500,800,1200,.mp4.csmil/index_3_av.m3u8?null=&id=AgBIAEiQzJwPLIdeq1TtNog05%2fxoLFnr7XwBzkt%2fownbcelxeg8u2bC831MJyKDEMpgL+HRj%2fQnw1A%3d%3d\n#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=61000,CODECS=\"mp4a.40.2\"\nhttp://cp143903-f.akamaihd.net/i/012/mp4/e/2014-12-04_21_00_00_enq_0174_,400,500,800,1200,.mp4.csmil/index_0_a.m3u8?null=&id=AgBIAEiQzJwPLIdeq1TtNog05%2fxoLFnr7XwBzkt%2fownbcelxeg8u2bC831MJyKDEMpgL+HRj%2fQnw1A%3d%3d\n", 8192, 0, NULL, NULL) = 854
recvfrom(5, "\324~\201\200\0\1\0\3\0\0\0\0\3api\fradio-canada\2ca\0\0\1\0\1\300\f\0\5\0\1\0\0\7M\0\34\3san\7src-cbc\2ca\7edgekey\3net\0\3001\0\5\0\1\0\0>U\0\25\5e5627\1g\nakamaiedge\300H\300Y\0\1\0\1\0\0\0\5\0\4\27\t`\311", 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}, [16]) = 126
recvfrom(5, "@\32\201\200\0\1\0\2\0\1\0\0\3api\fradio-canada\2ca\0\0\34\0\1\300\f\0\5\0\1\0\0\7M\0\34\3san\7src-cbc\2ca\7edgekey\3net\0\3001\0\5\0\1\0\0>U\0\25\5e5627\1g\nakamaiedge\300H\300_\0\6\0\1\0\0\1\306\0001\3n0g\300a\nhostmaster\6akamai\3com\0T\253\\e\0\0\3\350\0\0\3\350\0\0\3\350\0\0\7\10", 1922, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("192.168.0.1")}, [16]) = 171
recvfrom(5, "HTTP/1.1 200 OK\r\nServer: Microsoft-IIS/7.5\r\nContent-Length: 368\r\nContent-Type: application/json\r\nAccess-Control-Allow-Headers: *\r\nAccess-Control-Allow-Origin: *\r\nX-Powered-By: ASP.NET\r\nETag: \"90aeefc1affecf1:0\"\r\nDate: Tue, 06 Jan 2015 04:03:20 GMT\r\nConnection: keep-alive\r\n\r\n{\"url\":\"http://cp143903-f.akamaihd.net/i/012/mp4/e/2014-12-04_21_00_00_enq_0174_,400,500,800,1200,.mp4.csmil/master.m3u8?hdnea=st=1420516997~exp=1420517012~acl=/i/012/mp4/e/2014-12-04_21_00_00_enq_0174_*~hmac=2876c31efe9ef9413854fd4791a5753a1c1e70f0086583dd537ab220e90aa8d0
so i am guessing the HTTPS validation methods are failing here.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.