Went through the open issue backlog and verified each claim against
the live streams with check_channels.py / curl before touching
anything, rather than acting on the reports alone.
Moved to Invalid (2 attempts, both `gone`, re-verified by hand):
- Greece: Start, Thraki Net TV
- Slovakia: Doma, Dajto, Krimi, Markíza TN Live, Jojko (joining the
JOJ-family channels already Invalid - same upstream host, same
missing-channel pattern)
- Bosnia and Herzegovina: Sevdah
- Spain: Nova, La 7 CYLTV, Canal TE24
- USA: NASA TV Public
- USA + zz_news_en: CNN / CNN International - both point at
turnerlive.warnermediacdn.com/.../cnn_slate/..., which returns a
permanently frozen manifest (#EXT-X-PUBLISHED-TIME and
MEDIA-SEQUENCE identical across two fetches 8s apart, dated several
months in the past) - a live-looking HTTP 200 that check_channels.py
currently has no way to catch, since it never compares a URL against
its own earlier response. Also moved the alternate CNN entry in
zz_news_en.md (a raw.githubusercontent.com link that 404s outright).
- Not moved: N1 Bosna i Hercegovina (`disputed` - ffprobe found a real
stream behind the dead-looking HTTP response, needs a human) and
everything reported merely `unreachable`/`blocked` across these
lists - neither is strong enough evidence on its own, see
check_channels.py's own docstring.
Japan: added the Ⓖ marker to the 6 terrestrial channels on mov3.co
(NHK総合, 日本テレビ, テレビ朝日, TBSテレビ, テレビ東京, フジテレビ) -
confirmed HTTP 403 from here on all six, consistent with the
geo-restriction every other Ⓖ-marked channel in this repo already
documents. They were working `[>]` entries with no Ⓖ, which reads as
"this should work from anywhere" when it does not.
Left alone after checking (false alarms / already resolved, not a
list-file problem):
- Croatia HRT 1-4: already Ⓖ-marked and alive.
- Mongolia TenGer TV/TV5/TV9: all 40 Mongolia channels alive.
- Japan Willfonk/naori-test links: already Invalid on master.
- Several `unreachable` entries (Greece ART TV/Epirus TV 1, Croatia's
RTL family, half of Spain, Bosnia's BHT/Glas Drine/etc.) -
`unreachable` means "every attempt timed out or failed to connect
from here", not "confirmed gone" - too weak to act on without a
second opinion, and these didn't get one in this pass.
ran: python3 make_playlist.py (clean regen) + check_channels.py on
every touched list afterward to confirm nothing newly broke and the
moved channels no longer show up as working.
42 channels across 14 lists have an EPG column in their markdown table row
but the column is blank. The condition in Channel.to_m3u_line() only checked
for None (no EPG column at all) but not for an empty string, so these
channels got a tvg-id="" attribute in the generated playlist. An empty
tvg-id tells IPTV players "this channel has an EPG ID and it is the empty
string", which prevents EPG matching rather than falling back to name-based
matching the way a missing attribute would.
Changing `if self.epg is not None` to `if self.epg` makes both None and
empty string omit the attribute, matching the existing pattern used by
the chno and country_code attributes on the lines just above.
Follow-up to #1156. That PR found working cids (01, 08, 12 - the range
was 02-07,10,11 before) for channels previously marked [NO PUBLIC
STREAM], which is valuable, but it also reassigned the cid of every
already-known-working channel (NHK BS, BS日テレ, BS朝日, BS-TBS,
BSテレ東, BSフジ) to its neighbor's old value - a clean cyclic shift
across exactly six channels, which is what a list/list zip misaligned
by one produces, not what channel-by-channel verification produces.
Neither the old nor the new mapping carries any content-level proof
(the streams have no identifying metadata), so there's no way to tell
which is right - only that the shift itself isn't evidence of anything.
This takes only the part that's unambiguous: three cids nobody had
before, given to the three channels that had nothing. bs07 was one of
the "new" ones in #1156, but it's already BS10スターチャンネル's cid,
so WOWOWシネマ gets bs08 instead - the only other free value.
Verified each new cid resists a single flaky read (checked 4x): bs01
and bs12 came back flaky (3/4 ok) but real, bs08 came back alive (4/4).
That's consistent with how naori-test.netgenx.site behaves generally
(see check_channels.py's docstring), not a sign these three are wrong.
Added to the existing Rチャンネル/Rakuten section: NTV News (日テレNEWS),
FNN Prime Online (FNNプライムオンライン), and MBS News (MBSニュース),
via Rakuten's official Amagi CDN (cdn-apne1/cdn-uw2-prod.tsv2.amagi.tv),
same source already used for the existing Tokyo MX channel.
Verified HTTP 200 for all three, not geo-blocked.
Add ISO 3166-1 alpha-2 country codes via tvg-country attribute
to all #EXTINF lines, enabling IPTV players to filter and display
channels by country.
Co-authored-by: Kálmán „KAMI” Szalai <kami911gmail.com>