Files
abc1763613206-myiptv/convertor.py
2025-02-13 18:11:09 +08:00

138 lines
4.8 KiB
Python

import csv
import os
def csv_to_m3u8(input_csv, output_m3u8, encoding='utf-8'):
"""
Convert CSV file to M3U8 format
Args:
input_csv (str): Path to input CSV file
output_m3u8 (str): Path to output M3U8 file
"""
try:
with open(input_csv, 'r', encoding=encoding) as csv_file, \
open(output_m3u8, 'w', encoding='utf-8') as m3u8_file:
# Write M3U8 header
m3u8_file.write('#EXTM3U\n')
# Read CSV file
csv_reader = csv.DictReader(csv_file)
# Convert each row to M3U8 format
for row in csv_reader:
channel = row['Channel']
group = row['Group']
source = row['Source']
link = row['Link']
# Write channel information
m3u8_file.write(f'#EXTINF:-1 group-title="{group}" tvg-name="{channel}" tvg-logo="" tv-source="{source}",{channel}\n')
m3u8_file.write(f'{link}\n')
return True
except Exception as e:
print(f"Error converting CSV to M3U8: {str(e)}")
return False
def m3u8_to_csv(input_m3u8, output_csv, encoding='utf-8'):
"""
Convert M3U8 file to CSV format
Args:
input_m3u8 (str): Path to input M3U8 file
output_csv (str): Path to output CSV file
"""
try:
with open(input_m3u8, 'r', encoding=encoding) as m3u8_file, \
open(output_csv, 'w', encoding=encoding, newline='') as csv_file:
writer = csv.DictWriter(csv_file, fieldnames=['Channel', 'Group', 'Source', 'Link'])
writer.writeheader()
lines = m3u8_file.readlines()
i = 0
while i < len(lines):
line = lines[i].strip()
if line.startswith('#EXTINF:'):
info = line.split('"')
group = info[1] if len(info) > 1 else ''
channel = info[3] if len(info) > 3 else ''
source = info[7] if len(info) > 7 else ''
name = info[-1].split(',')[-1]
if i + 1 < len(lines):
link = lines[i + 1].strip()
writer.writerow({
'Channel': name,
'Group': group,
'Source': source,
'Link': link
})
i += 1
return True
except Exception as e:
print(f"Error converting M3U8 to CSV: {str(e)}")
return False
def tvlist_to_m3u8(input_file, output_file, encoding='utf-8'):
"""
Convert TVList file to M3U8 format
Args:
input_file (str): Path to input TVList file
output_file (str): Path to output M3U8 file
"""
try:
with open(input_file, 'r', encoding=encoding) as tvlist_file, \
open(output_file, 'w', encoding='utf-8') as m3u8_file:
# Write M3U8 header
m3u8_file.write('#EXTM3U\n')
for line in tvlist_file:
parts = line.strip().split(',')
Channel = parts[0]
Link = parts[1]
m3u8_file.write(f'#EXTINF:-1 tvg-name="{Channel}",{Channel}\n')
m3u8_file.write(f'{Link}\n')
return True
except Exception as e:
print(f"Error converting TVList to M3U8: {str(e)}")
return False
def tvgroup_to_m3u8(output_file):
MAPPING = {
"cctv": "央视频道",
"weishi": "卫视频道",
"difang": "地方频道",
"special": "特色频道"
}
DIR = os.path.join(os.path.dirname(__file__), 'groups')
try:
with open(output_file, 'w', encoding='utf-8') as m3u8_file:
m3u8_file.write('#EXTM3U\n')
for group in MAPPING:
file = os.path.join(DIR, f"{group}.txt")
if os.path.exists(file):
with open(file, 'r', encoding='gb18030') as f:
for line in f:
parts = line.strip().split(',')
Channel = parts[0]
Link = parts[1]
m3u8_file.write(f'#EXTINF:-1 group-title="{MAPPING[group]}" tvg-name="{Channel}",{Channel}\n')
m3u8_file.write(f'{Link}\n')
return True
except Exception as e:
print(f"Error converting TVGroup to M3U8: {str(e)}")
return False
if __name__ == "__main__":
input_file = "data.csv"
output_file = "playlist.m3u8"
# csv_to_m3u8(input_file, output_file, encoding='gb18030')
tvgroup_to_m3u8(output_file)