A useful package for parsing m3u files or links
Project description
m3u_parser
A Python package for parsing m3u files and extracting streams information. The package allows you to convert the parsed information into JSON or CSV format and provides various filtering and sorting options.
Install
Using pip,
pip install m3u-parser
Or using pipenv,
pipenv install m3u-parser
Usage
Here is an example of how to use the M3uParser class:
from m3u_parser import M3uParser
url = "/home/pawan/Downloads/ru.m3u"
useragent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"
# Instantiate the parser
parser = M3uParser(timeout=5, useragent=useragent)
# Parse the m3u file
parser.parse_m3u(url)
# Remove by mp4 extension
parser.remove_by_extension('mp4')
# Filter streams by status
parser.filter_by('status', 'GOOD')
# Get the list of streams
print(len(parser.get_list()))
# Convert streams to JSON and save to a file
parser.to_file('streams.json')
API Reference
M3uParser
The main class that provides the functionality to parse m3u files and manipulate the streams information.
Initialization
parser = M3uParser(useragent=None, timeout=5)
useragent
(optional): The User-Agent string to use for HTTP requests. Default is a Chrome User-Agent string.timeout
(optional): The timeout value in seconds for HTTP requests. Default is 5 seconds.
Methods
parse_m3u
parse_m3u(path: str, check_live: bool = True, enforce_schema: bool = True) -> None
Parses the content of a local file or URL and extracts the streams information.
path
: The path to the m3u file, which can be a local file path or a URL.check_live
(optional): Set toTrue
to check if the stream links are working or not. Default isTrue
.enforce_schema
(optional): IfTrue
, non-existing fields in a stream are filled with None. IfFalse
, non-existing fields are ignored. Default isTrue
.
parser.parse_m3u(path, check_live=True, enforce_schema=True)
parse_json
parse_json(path: str, check_live: bool = True, enforce_schema: bool = True) -> None
Parses the content of a local file or URL and extracts the streams information.
path
: The path to the json file, which can be a local file path or a URL.check_live
(optional): Set toTrue
to check if the stream links are working or not. Default isTrue
.enforce_schema
(optional): IfTrue
, non-existing fields in a stream are filled with None. IfFalse
, non-existing fields are ignored. Default isTrue
.
parser.parse_m3u(path, check_live=True, enforce_schema=True)
parse_csv
parse_csv(path: str, check_live: bool = True, enforce_schema: bool = True) -> None
Parses the content of a local file or URL and extracts the streams information.
path
: The path to the csv file, which can be a local file path or a URL.check_live
(optional): Set toTrue
to check if the stream links are working or not. Default isTrue
.enforce_schema
(optional): IfTrue
, non-existing fields in a stream are filled with None. IfFalse
, non-existing fields are ignored. Default isTrue
.
parser.parse_m3u(path, check_live=True, enforce_schema=True)
filter_by
filter_by(key: str, filters: Union[str, list], key_splitter: str = "-", retrieve: bool = True, nested_key: bool = False) -> None
Filters the streams information based on a key and filter/s.
key
: The key to filter on, can be a single key or nested key (e.g., "language-name").filters
: The filter word/s to perform the filtering operation.key_splitter
(optional): A splitter to split the nested keys. Default is "-".retrieve
(optional): Set toTrue
to retrieve matching streams orFalse
to remove matching streams. Default isTrue
.nested_key
(optional): Set toTrue
if the key is nested orFalse
if it's not. Default isFalse
.
parser.filter_by(key, filters, key_splitter="-", retrieve=True, nested_key=False)
reset_operations
reset_operations() -> None
Resets the streams information list to the initial state before any filtering or sorting operations.
parser.reset_operations()
remove_by_extension
remove_by_extension(extension: Union[str, list]) -> None
Removes stream information with a certain extension or extensions.
extension
: The name of the extension(s) to remove, e.g., "mp4" or ["mp4", "m3u8"].
parser.remove_by_extension(extension)
retrieve_by_extension
retrieve_by_extension(extension: Union[str, list]) -> None
Retrieves only stream information with a certain extension or extensions.
extension
: The name of the extension(s) to retrieve, e.g., "mp4" or ["mp4", "m3u8"].
parser.retrieve_by_extension(extension)
remove_by_category
remove_by_category(filter_word: Union[str, list]) -> None
Removes stream information with a category containing certain filter word/s.
filter_word
: The filter word/s to match against the category. It can be a string or a list of filter word/s.
parser.remove_by_category(filter_word)
retrieve_by_category
retrieve_by_category(filter_word: Union[str, list]) -> None
Selects only stream information with a category containing certain filter word/s.
filter_word
: The filter word/s to match against the category. It can be a string or a list of filter word/s.
parser.retrieve_by_category(filter_word)
sort_by
sort_by(key: str, key_splitter: str = "-", asc: bool = True, nested_key: bool = False) -> None
Sorts the streams information based on a key in ascending or descending order.
key
: The key to sort on, can be a single key or nested key seperated bykey_splitter
(e.g., "language-name").key_splitter
(optional): A splitter used to split nested keys. Default is "-".asc
(optional): Set toTrue
to sort in descending order, orFalse
to sort in ascending order. Default isFalse
.nested_key
(optional): Set toTrue
if the key is nested orFalse
if it's not. Default isFalse
.
parser.sort_by(key, key_splitter="-", asc=True, nested_key=False)
get_json
get_json(indent: int = 4) -> str
Returns the streams information in JSON format.
- indent (optional): If
indent
is a non-negative integer, then JSON array elements and object members will be pretty-printed with that indent level. An indent level of 0 will only insert newlines.
json_data = parser.get_json(indent)
get_list
get_list() -> list
Returns the list of streams information after any filtering or sorting operations.
streams = parser.get_list()
to_file
to_file(filename: str, format: str = "json") -> None
Saves the streams information to a file in the specified format.
filename
: The name of the output file.format
(optional): The output file format, either "json" or "csv". Default is "json".
parser.to_file(filename, format="json")
Other Implementations
Golang
: go-m3u-parserRust
: rs-m3u-parserTypescript
: ts-m3u-parser
Author
👤 Pawan Paudel
- Github: @pawanpaudel93
🤝 Contributing
Contributions, issues and feature requests are welcome! \ Feel free to check issues page.
Show your support
Give a ⭐️ if this project helped you!
Copyright © 2020 Pawan Paudel.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for m3u_parser-0.3.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9fa73609f81e665189251eb394cfc2d3d8867511dbba1f05837254e714ff9294 |
|
MD5 | f6bbbea812b8a789dcbbc0dfdced312c |
|
BLAKE2b-256 | 4a99b851788c81e8de7b593fb2a7d31d9d7fc40f1b62dbac7aa10f4b963eac2b |