Frndly TV for Channels

I was thinking of starting a 7 day frndlyTV trial.
Two questions for anyone using this to record from.

  1. How many hours is the EPG
  2. Do we still need this workaround to get EPG for all of the channels Frndly TV for Channels - #133 by matthuisman

Do you know what the new channels are?
They list these 38 on their website

  1. A&E
  2. BabyFirst
  3. BYUtv
  4. Circle
  5. CuriosityStream
  6. Decades
  7. Dove Channel
  8. FETV
  9. FMC
  10. FYI
  11. GAC Family
  12. GAC Living
  13. Gameshow
  14. getTV
  15. Hallmark Channel
  16. Hallmark Drama
  17. Hallmark Movies & Mysteries
  18. Hallmark Movies Now
  19. Heartland TV
  20. Heroes & Icons
  21. INSP
  22. Lifetime
  23. Lifetime Movie Network
  24. Local Now
  25. MeTV
  26. Military HISTORY
  27. Outdoor Channel
  28. Pixl
  29. QVC
  30. Recipe.TV
  31. Sportsman Channel
  32. Start TV
  33. StoryTV
  34. The HISTORY Channel
  35. The Weather Channel
  36. UPtv
  37. VICE TV
  38. World Fishing Network

I am getting 16 days.

I am getting 38. Your list looks good. They recently added Decades, H&I and Start TV. A couple of weeks before that they added MeTV and Story.

Decades 112941
Heroes & Icons 81349
Start TV 74916

3 Likes

Not too sure the Decades station id is correct.
frndlyTV website guide says 'The Lucy Show-Lucy and Winter Sports' is playing on Decades, which is correct, but station id 112941 says 'The Lucy Show-Lucy, the Starmaker' is playing.

frndlyTV website guide is incorrect saying 'Matt Houston' is playing on H&I, but it's actually 'Hawaii Five-O' like the station id 81349 says.

If anyone wants to try these I found other stationid's that seem to match what the frndlyTV website guide displays (assuming it's correct). No way to know what's correct until I record shows that differ between the stationid's.

I'm recording the following times to see what's correct as these new stationid airings match the frndlyTV website guide.

Decades stationid 122694 shows the same airing for 7pm ET/4pm PT today as the frndlyTV website "Love, American Style"

Heroes & Icons stationid 120460 shows the same airing for 6pm ET/3pm PT tomorrow as the frndlyTV website "Renegade"

Man, this gets complicated with frndlyTV online guide being wrong sometimes.

I verified that stationid 122694 should be used for DECADES.
The one being used now, 112941 is incorrect.
Guide for stationid 112941 listed "The Ed Sullivan Show" airing at 4PM PT, but what actually aired was "Love, American Style".
So for this channel, DECADES, the frndlyTV website guide and the guide for stationid 122694 are correct.

I verified that stationid 74916 should be used for StartTV.
The one matching the frndlyTV website guide, stationid 122695 is incorrect.
Guide for stationid 122695 and frndlyTV website guide listed "The Closer-S06E15-An Ugly Game" airing at 4PM PT, but what actually aired was "The Closer-S06E13-Living Proof: Part One".
So for this channel, StartTV, the frndlyTV website guide and the guide for stationid 122695 were wrong and stationid 74916 guide was correct.

Will be checking stationid's for Heroes & Icons tomorrow at 3PM PT to see which is correct, 81349 or 120460.

I verified that stationid 120460 should be used for Heroes & Icons.
The one being used now, 81349 is incorrect.
Guide for stationid 81349 listed "Black Sheep Squadron-S02E11-The Show Must Go On ... Sometimes" airing at 3PM PT, but what actually aired was "Renegade-S03E04-The King and I".
So for this channel, Heroes & Icons, the frndlyTV website guide and the guide for stationid 120460 are correct.

And talk about confusing. Just before Love, American Style aired it showed The Best of The Ed Sullivan Show was next, but then Love, American Style aired..

3 Likes

I'm running this docker container on my Terra-master NAS and it works PERFECTLY!
If anyone needs help setting it up on a Terra-master NAS hit me up! maybe I can help!

@matthuisman
Could you update the stationid's to Decades=122694, Heroes & Icons=120460.
The current stationid 74916 is correct for StartTV.

Thanks

1 Like

I signed up for the trial account an trying to use the non-docker version on Raspberry Pi 3 running debian stretch based raspbian.

python app.py --PORT 8183 --USERNAME "[email protected]" --PASSWORD "secret"

File "app.py", line 27
self.wfile.write(f'Error: {message}'.encode('utf8'))

Not sure where to go with that. This is why I usually avoid python, perl and the like. When it fails I have no idea what to do.

Try upgrading to python 3.

I did that for something else , believe me it was a big "PITA " and that is the very reason I HATE python . Its now at 3.8 .

These forums suck. Too much scrolling with page loads.

I got it to run now on a different machine with the same version of Python (i'll never understand python and its quirks). It starts a server but did not create any files there..

update
had a bad password!
Working now .

@matthuisman StartTV stationid should be changed to 122695.

Using the method I described here Picking the correct tvc-guide-stationid for a channel
and looking at 16 days of airings (386 airings), stationid's 74916, 109454 and 122772 are identical.
stationid 122695 has 11 of 386 airings different.
I recorded 3 of the differences and found stationid 122695 has the correct listings.
Here's 2 of them from last Sunday.and stationid 122695 on the right side was correct.

If anyone wants to verify, the next difference is airing tonight at 9pm PT.
The listing on the left side is stationid 74916
The listing on the right side is stationid 122695

The one after that is tomorrow night at 9PM PT.
left side is stationid 74916, right side is stationid 122695

And here's all 11 differences in 16 days of listings, not much

3 Likes

:astonished: Very nice investigation work!:+1:

1 Like

have updated starttv to 122695

2 Likes

ok, my FrndlyTV seven day trial is quickly running out and still no joy...

First to the author of FrndlyTV for Channels.... Good work but Channels looks like they have no free tier. I do not want to be a cord cutter getting nickeled and dimed to death on small fees here and there that add up to the same cost as a basic cable subscription.

So I have tried a few other DVRs and I have very similar results with them . some like NextPVR will not take the epg.xml generated by this script at all. Others like TVMosacCE take it but seem to not recognize it. I am pretty sure something does not come out quite right from the script with the epg.xml file..

Also there are issues with some other DVRs not playing these links. I can see they point to my Raspberry Pi where I am running the script. and the script generates the following error when I try to access it from TVMosaic.

Someone will probably say it is a python problem or something but I can extract the link from the m3u8 file and open the link from a desktop computer with VLC or Celluloid without issue. I can see there is no error and the "frndlytv-for-channels" is happy with VLC or Celluloid, but not with some of the servers..

10.0.0.230 - - [13/May/2022 21:35:09] "GET /play/4.m3u8 HTTP/1.1" 500 -
----------------------------------------
Exception happened during processing of request from ('10.0.0.230', 58019)
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/socketserver.py", line 650, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/local/lib/python3.8/socketserver.py", line 360, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/opt/xmltv/frndlytv/app.py", line 22, in __init__
    super().__init__(*args, **kwargs)
  File "/usr/local/lib/python3.8/socketserver.py", line 720, in __init__
    self.handle()
  File "/usr/local/lib/python3.8/http/server.py", line 426, in handle
    self.handle_one_request()
  File "/usr/local/lib/python3.8/http/server.py", line 414, in handle_one_request
    method()
  File "/opt/xmltv/frndlytv/app.py", line 51, in do_GET
    self._error(e)
  File "/opt/xmltv/frndlytv/app.py", line 49, in do_GET
    routes[func]()
  File "/opt/xmltv/frndlytv/app.py", line 55, in _play
    url = frndly.play(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 36, in play
    path = self._channel_path(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 94, in _channel_path
    for row in self.guide([channel_id])[channel_id]:
KeyError: '4'
----------------------------------------
10.0.0.230 - - [13/May/2022 21:35:11] "GET /play/4.m3u8 HTTP/1.1" 500 -
----------------------------------------
Exception happened during processing of request from ('10.0.0.230', 58020)
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/socketserver.py", line 650, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/local/lib/python3.8/socketserver.py", line 360, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/opt/xmltv/frndlytv/app.py", line 22, in __init__
    super().__init__(*args, **kwargs)
  File "/usr/local/lib/python3.8/socketserver.py", line 720, in __init__
    self.handle()
  File "/usr/local/lib/python3.8/http/server.py", line 426, in handle
    self.handle_one_request()
  File "/usr/local/lib/python3.8/http/server.py", line 414, in handle_one_request
    method()
  File "/opt/xmltv/frndlytv/app.py", line 51, in do_GET
    self._error(e)
  File "/opt/xmltv/frndlytv/app.py", line 49, in do_GET
    routes[func]()
  File "/opt/xmltv/frndlytv/app.py", line 55, in _play
    url = frndly.play(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 36, in play
    path = self._channel_path(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 94, in _channel_path
    for row in self.guide([channel_id])[channel_id]:
KeyError: '4'
----------------------------------------
10.0.0.230 - - [13/May/2022 21:35:14] "GET /play/4.m3u8 HTTP/1.1" 500 -
----------------------------------------
Exception happened during processing of request from ('10.0.0.230', 58021)
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/socketserver.py", line 650, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/local/lib/python3.8/socketserver.py", line 360, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/opt/xmltv/frndlytv/app.py", line 22, in __init__
    super().__init__(*args, **kwargs)
  File "/usr/local/lib/python3.8/socketserver.py", line 720, in __init__
    self.handle()
  File "/usr/local/lib/python3.8/http/server.py", line 426, in handle
    self.handle_one_request()
  File "/usr/local/lib/python3.8/http/server.py", line 414, in handle_one_request
    method()
  File "/opt/xmltv/frndlytv/app.py", line 51, in do_GET
    self._error(e)
  File "/opt/xmltv/frndlytv/app.py", line 49, in do_GET
    routes[func]()
  File "/opt/xmltv/frndlytv/app.py", line 55, in _play
    url = frndly.play(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 36, in play
    path = self._channel_path(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 94, in _channel_path
    for row in self.guide([channel_id])[channel_id]:
KeyError: '4'
----------------------------------------
10.0.0.230 - - [13/May/2022 21:35:17] "GET /play/4.m3u8 HTTP/1.1" 500 -
----------------------------------------
Exception happened during processing of request from ('10.0.0.230', 58022)
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/socketserver.py", line 650, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/local/lib/python3.8/socketserver.py", line 360, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/opt/xmltv/frndlytv/app.py", line 22, in __init__
    super().__init__(*args, **kwargs)
  File "/usr/local/lib/python3.8/socketserver.py", line 720, in __init__
    self.handle()
  File "/usr/local/lib/python3.8/http/server.py", line 426, in handle
    self.handle_one_request()
  File "/usr/local/lib/python3.8/http/server.py", line 414, in handle_one_request
    method()
  File "/opt/xmltv/frndlytv/app.py", line 51, in do_GET
    self._error(e)
  File "/opt/xmltv/frndlytv/app.py", line 49, in do_GET
    routes[func]()
  File "/opt/xmltv/frndlytv/app.py", line 55, in _play
    url = frndly.play(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 36, in play
    path = self._channel_path(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 94, in _channel_path
    for row in self.guide([channel_id])[channel_id]:
KeyError: '4'
----------------------------------------
10.0.0.230 - - [13/May/2022 21:35:20] "GET /play/4.m3u8 HTTP/1.1" 500 -
----------------------------------------
Exception happened during processing of request from ('10.0.0.230', 58023)
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/socketserver.py", line 650, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/local/lib/python3.8/socketserver.py", line 360, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/opt/xmltv/frndlytv/app.py", line 22, in __init__
    super().__init__(*args, **kwargs)
  File "/usr/local/lib/python3.8/socketserver.py", line 720, in __init__
    self.handle()
  File "/usr/local/lib/python3.8/http/server.py", line 426, in handle
    self.handle_one_request()
  File "/usr/local/lib/python3.8/http/server.py", line 414, in handle_one_request
    method()
  File "/opt/xmltv/frndlytv/app.py", line 51, in do_GET
    self._error(e)
  File "/opt/xmltv/frndlytv/app.py", line 49, in do_GET
    routes[func]()
  File "/opt/xmltv/frndlytv/app.py", line 55, in _play
    url = frndly.play(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 36, in play
    path = self._channel_path(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 94, in _channel_path
    for row in self.guide([channel_id])[channel_id]:
KeyError: '4'
----------------------------------------
10.0.0.230 - - [13/May/2022 21:35:23] "GET /play/4.m3u8 HTTP/1.1" 500 -
----------------------------------------
Exception happened during processing of request from ('10.0.0.230', 58024)
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/socketserver.py", line 650, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/local/lib/python3.8/socketserver.py", line 360, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/opt/xmltv/frndlytv/app.py", line 22, in __init__
    super().__init__(*args, **kwargs)
  File "/usr/local/lib/python3.8/socketserver.py", line 720, in __init__
    self.handle()
  File "/usr/local/lib/python3.8/http/server.py", line 426, in handle
    self.handle_one_request()
  File "/usr/local/lib/python3.8/http/server.py", line 414, in handle_one_request
    method()
  File "/opt/xmltv/frndlytv/app.py", line 51, in do_GET
    self._error(e)
  File "/opt/xmltv/frndlytv/app.py", line 49, in do_GET
    routes[func]()
  File "/opt/xmltv/frndlytv/app.py", line 55, in _play
    url = frndly.play(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 36, in play
    path = self._channel_path(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 94, in _channel_path
    for row in self.guide([channel_id])[channel_id]:
KeyError: '4'
----------------------------------------
10.0.0.230 - - [13/May/2022 21:35:27] "GET /play/4.m3u8 HTTP/1.1" 500 -
----------------------------------------
Exception happened during processing of request from ('10.0.0.230', 58025)
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/socketserver.py", line 650, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/local/lib/python3.8/socketserver.py", line 360, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/opt/xmltv/frndlytv/app.py", line 22, in __init__
    super().__init__(*args, **kwargs)
  File "/usr/local/lib/python3.8/socketserver.py", line 720, in __init__
    self.handle()
  File "/usr/local/lib/python3.8/http/server.py", line 426, in handle
    self.handle_one_request()
  File "/usr/local/lib/python3.8/http/server.py", line 414, in handle_one_request
    method()
  File "/opt/xmltv/frndlytv/app.py", line 51, in do_GET
    self._error(e)
  File "/opt/xmltv/frndlytv/app.py", line 49, in do_GET
    routes[func]()
  File "/opt/xmltv/frndlytv/app.py", line 55, in _play
    url = frndly.play(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 36, in play
    path = self._channel_path(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 94, in _channel_path
    for row in self.guide([channel_id])[channel_id]:
KeyError: '4'
----------------------------------------
10.0.0.230 - - [13/May/2022 21:35:30] "GET /play/4.m3u8 HTTP/1.1" 500 -
----------------------------------------
Exception happened during processing of request from ('10.0.0.230', 58026)
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/socketserver.py", line 650, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/local/lib/python3.8/socketserver.py", line 360, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/opt/xmltv/frndlytv/app.py", line 22, in __init__
    super().__init__(*args, **kwargs)
  File "/usr/local/lib/python3.8/socketserver.py", line 720, in __init__
    self.handle()
  File "/usr/local/lib/python3.8/http/server.py", line 426, in handle
    self.handle_one_request()
  File "/usr/local/lib/python3.8/http/server.py", line 414, in handle_one_request
    method()
  File "/opt/xmltv/frndlytv/app.py", line 51, in do_GET
    self._error(e)
  File "/opt/xmltv/frndlytv/app.py", line 49, in do_GET
    routes[func]()
  File "/opt/xmltv/frndlytv/app.py", line 55, in _play
    url = frndly.play(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 36, in play
    path = self._channel_path(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 94, in _channel_path
    for row in self.guide([channel_id])[channel_id]:
KeyError: '4'
----------------------------------------
10.0.0.230 - - [13/May/2022 21:35:33] "GET /play/4.m3u8 HTTP/1.1" 500 -
----------------------------------------
Exception happened during processing of request from ('10.0.0.230', 58027)
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/socketserver.py", line 650, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/local/lib/python3.8/socketserver.py", line 360, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/opt/xmltv/frndlytv/app.py", line 22, in __init__
    super().__init__(*args, **kwargs)
  File "/usr/local/lib/python3.8/socketserver.py", line 720, in __init__
    self.handle()
  File "/usr/local/lib/python3.8/http/server.py", line 426, in handle
    self.handle_one_request()
  File "/usr/local/lib/python3.8/http/server.py", line 414, in handle_one_request
    method()
  File "/opt/xmltv/frndlytv/app.py", line 51, in do_GET
    self._error(e)
  File "/opt/xmltv/frndlytv/app.py", line 49, in do_GET
    routes[func]()
  File "/opt/xmltv/frndlytv/app.py", line 55, in _play
    url = frndly.play(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 36, in play
    path = self._channel_path(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 94, in _channel_path
    for row in self.guide([channel_id])[channel_id]:
KeyError: '4'
----------------------------------------
10.0.0.230 - - [13/May/2022 21:35:36] "GET /play/4.m3u8 HTTP/1.1" 500 -
----------------------------------------
Exception happened during processing of request from ('10.0.0.230', 58028)
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/socketserver.py", line 650, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/local/lib/python3.8/socketserver.py", line 360, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/opt/xmltv/frndlytv/app.py", line 22, in __init__
    super().__init__(*args, **kwargs)
  File "/usr/local/lib/python3.8/socketserver.py", line 720, in __init__
    self.handle()
  File "/usr/local/lib/python3.8/http/server.py", line 426, in handle
    self.handle_one_request()
  File "/usr/local/lib/python3.8/http/server.py", line 414, in handle_one_request
    method()
  File "/opt/xmltv/frndlytv/app.py", line 51, in do_GET
    self._error(e)
  File "/opt/xmltv/frndlytv/app.py", line 49, in do_GET
    routes[func]()
  File "/opt/xmltv/frndlytv/app.py", line 55, in _play
    url = frndly.play(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 36, in play
    path = self._channel_path(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 94, in _channel_path
    for row in self.guide([channel_id])[channel_id]:
KeyError: '4'
----------------------------------------
10.0.0.230 - - [13/May/2022 21:35:40] "GET /play/4.m3u8 HTTP/1.1" 500 -
----------------------------------------
Exception happened during processing of request from ('10.0.0.230', 58029)
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/socketserver.py", line 650, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/local/lib/python3.8/socketserver.py", line 360, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/opt/xmltv/frndlytv/app.py", line 22, in __init__
    super().__init__(*args, **kwargs)
  File "/usr/local/lib/python3.8/socketserver.py", line 720, in __init__
    self.handle()
  File "/usr/local/lib/python3.8/http/server.py", line 426, in handle
    self.handle_one_request()
  File "/usr/local/lib/python3.8/http/server.py", line 414, in handle_one_request
    method()
  File "/opt/xmltv/frndlytv/app.py", line 51, in do_GET
    self._error(e)
  File "/opt/xmltv/frndlytv/app.py", line 49, in do_GET
    routes[func]()
  File "/opt/xmltv/frndlytv/app.py", line 55, in _play
    url = frndly.play(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 36, in play
    path = self._channel_path(slug)
  File "/opt/xmltv/frndlytv/frndly.py", line 94, in _channel_path
    for row in self.guide([channel_id])[channel_id]:
KeyError: '4'
----------------------------------------

I found the bug in your epg.xml file. You do not have a proper header

<?xml version="1.0" encoding="UTF-8"?><tv>

you should probably have something like:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE tv SYSTEM "xmltv.dtd"><tv generator-info-name="www.matthuisman.nz">

Making that change manually and testing, now allows the epg data to work in TVMosaic and NextPVR. I have not yet tested with TVHeadend.

With TV Mosaic the streams still do not play

markosjal the latest github code and docker container should hopefully solve both your issues.

It is odd your playlist is generating urls like /play/4.m3u8
It should be more like /play/pixl.m3u8

Maybe whatever your running the code on can't retrieve the data from https://i.mjh.nz/frndly_tv/app.json

You'd probably want to sort that out :slight_smile:

And fyi: the container and code is meant for channels (hence its name). Consider yourself lucky if it works elsewhere

I have seen at least one error related to that .json file but it was only once then came back. It was about 20 hours ago.

I am not running docker so hopefully I will not have to switch to try it.

And yes it does say "for Channels" but then again there is other similar code out there says it is for XYZ but works with others because it generates standard files. Would there be a reason you do not want to conform to standards? You know there is a lot of chatter on forums about using this script with other PVRs , so I am not alone.

Personally I am put off of by Channels for the claims that there is a free tier but come to find out there is none. I also believe they are not up-front with this until AFER you install it. Very misleading....

Thanks for the response and hopefully the fix. will check it out.
Mark

You are mis-informed. Where did you see that?
There is a free trial period. There is no free tier to Channels DVR.
The only thing I know of that is free is their iOS app for use with an SD HDHR tuner.

1 Like