Замечания и пожелания:
У некоторыь переменных в API можно было бы скорректировать имена:
<need_bandwidth>[рекомендуемый битрейт канала]<need_bandwidth>
required bandwidth / needed bandwidth
в данном случае слово "need" подразумевает тип bool.
-------------------------
<have_archive>[флаг имеет ли канал архив 0/1]</have_archive>
has_archive
канал - единственное число, третье лицо
-------------------------
E_TOO_ENOUGH_DATA
TOO_ENOUGH совсем не по-английски: NOT_ENOUGH_DATA или MISSING_LOGIN_INFO к примеру намного лучше.
-------------------------
все NEED на MISSING (нужен на отсутствие)
define('E_NEED_XXX >>> E_MISSING_XXX
-------------------------
define('M_FAVORITE_SETS', 2); >>> 'M_FAVORITE_SET'
Есть еще одно пожелание - тэг <item> и <message>. Желательно вообще от <item> избавиться, чтоб не было несколько тэгов с одинаковым именем означающих разные элементы, к примеру у "group" и "channel" в одном и том же респонде есть "item". Если бы такого не было, то не надо было бы вручную парсить xml, а создать схему и по ней создавать объекты.
К примеру, поменять вот так:
from:
<groups>
<item>
to:
<groups>
<group>
--------------------------
from:
<channels>
<item>
to:
<channels>
<channel>
--------------------------
from:
<stream_params>
<item>
to:
<stream_params>
<stream_param>
--------------------------
from:
<epg>
<item>
to:
<epg>
<epg_program>
---------------------------
from:
<favorites>
<item>
to:
<favorites>
<favorite>
---------------------------
from:
<settings>
<name>timeshift</name>
<value>3</value>
<list>
<item>
to:
...
<list>
<setting>
---------------------------
from:
<rows>
<item>
to:
<rows>
<row>
---------------------------
from:
<videos>
<item>
to:
<videos>
<video>
---------------------------
from:
<genres>
<item>
to:
<genres>
<genre>
<message> используется в <response> и <error>
<response>
<message>M_LOGOUT_OK</message>
<response>
<error>
<message>An error message</message>
переименовать <error><message>
в <error><text> или в <error><error_message>