mariman Posted June 29, 2010 Report Share Posted June 29, 2010 Все запросы к REST API формируются по специально сформированному URL и имеют вид: httр://iptv.kartina.tv/api/<тип запроса>/<имя функции>?param1=value¶m2=value... <тип запроса> может быть: xml или json или jsonp имена функций и описания к ним параметров описаны ниже. примеры: httр://iptv.kartina.tv/api/xml/epg?cid=2&day=260610 httр://iptv.kartina.tv/api/jsonp/epg?cid=2&day=260610&callback=process COOKIE Для идентификации и создании сессии было решено использовать стандартный механизм HTTP сессий с поддержкой COOKIE. первый вход - обязательное выполнение login. при корректном входе возвращается состояние, данные по клиенту и COOKIE которую необходимо передавать всегда при запросах. В COOKIE хранится идентификатор сессии и по ней организуется сессия. Далее если запрос не будет содержать COOKIE то это вызовет ошибку. Для корректного завершения сессии необходимо вызвать метод logout. Возможна передача параметров через url. имя cookie при этом необходимо брать из ответа пакета sid_name. НО!!! Подобный метод из соображений безопасности является не желательным, ровно как и передача login методом GET. Введено ограничение на 4 запроса в секунду для одной сессии. Мера вынужденная для защиты системы от избыточных перегрузок. В случае возникновения ситуации возвращается стандарный ответ ошибки с кодом 31 (Query limit exceeded). Все возвращаемые сообщения имеют вид ассоциативного массива. формат пакета формат - JSON или XML, в зависимости от сформированного URL. Если запрос содержит ошибку то это вызывает обязательную посылку следующего пакета: <?xml version="1.0" encoding="UTF-8"?> <response> <error> <message>An error message</message> <cоde>9999</cоde> </error> <servertime>1277893631</servertime> </response> где message и code собственно сообщение об ошибке и его код. Формат времени. Все данные обозначающих дату и время представлены в формате unixtime . /login?login=<login>&pass=<password>&device=<apple|default:all> Входные параметры: login - логин. идентификатор подписки выданный клиенту. pass - числовой пароль. device - параметр указывающий на тип устройства работающего с API. Генерируются соответствующие потоки и ссылки вещания. Влияет на списки возможных для устройств каналов, ссылки вещания и т.п. На данный момент работает с двумя параметрами: apple и all. По умолчанию установлен в all и генерирует ссылки для vlc. (поток TS) service=all - Выводит значения всех текущих настроек клиента Возврат пакета вида: <?xml version="1.0" encoding="UTF-8"?> <response> <sid>[идентификатор сессии]</sid> <sid_name>[имя переменной идентификатора сессии]</sid> <account> <login>[логин]</login> <packet_name>[название пакета]</packet_name> <packet_expire>[дата и время истечения пакета]</packet_expire> </account> <services> // сервисы включенные в пакет пользователя <vod>1</vod> // видеотека <archive>1</archive> // архив </services> <servertime>[дата и время генерации ответа]</servertime> </response> Параметр идентификатора сессии передан на тот случай если клиент не может получить заголовок cookie. /account Возвращает информацию об аккаунте аналогичную что при /login /logout Вызов без параметров (Идентификатор сессии должен передаваться в виде cookie Возврат пакета: <?xml version="1.0" encoding="UTF-8"?> <response> <message>M_LOGOUT_OK</message> <servertime>1277807573</servertime> </response> /channel_list Вызов без параметров (Идентификатор сессии должен передаваться в виде cookie Возврат пакета: <?xml version="1.0" encoding="UTF-8"?> <response> <groups> <item> <id>[идентификатор группы]</id> <name>[название группы]</name> <color>[CSS код цвета группы]</color> <channels> <item> <id>[идентификатор канала]</id> <name>[Название канала]</name> <stream_params> [возможные параметры потоков] <item> <rate>[битрейт] Возможный битрейт канала. Устанавливается в настройках переменной bitrate</rate> <ts>[таймшифт] в часах например: значение 2 - задержка вещания на 2 часа. Получить url вещания возможно установив в настройках переменную timeshift</ts> </item> ... <item> <rate>1500</rate> <ts>11</ts> </item> </stream_params> <is_video>[флаг потокового видео 0/1 1-видео, 0-радио]</is_video> <need_bandwidth>[рекомендуемый битрейт канала]<need_bandwidth> <protected>[флаг закрыт ли канал 0/1]</protected> <have_archive>[флаг имеет ли канал архив 0/1]</have_archive> <icon>[относительный путь к файлу иконки канала]</icon> <epg_progname>[название текущей телепередачи]</epg_progname> <epg_start>[дата и время начала текущей передачи]</epg_start> <epg_end>[дата и время окончания текущей передачи]</epg_end> </item> <item> /* пример */ <id>3</id> <name>Pоссия</name> <stream_params> <item> <rate>1500</rate> <ts>0</ts> </item> <item> <rate>900</rate> <ts>0</ts> </item> <item> <rate>1500</rate> <ts>1</ts> </item> <item> <rate>1500</rate> <ts>2</ts> </item> <item> <rate>1500</rate> <ts>3</ts> </item> <item> <rate>1500</rate> <ts>4</ts> </item> <item> <rate>1500</rate> <ts>8</ts> </item> <item> <rate>1500</rate> <ts>9</ts> </item> <item> <rate>1500</rate> <ts>10</ts> </item> <item> <rate>1500</rate> <ts>11</ts> </item> </stream_params> <is_video>1</is_video> <protected>0</protected> <have_archive>1</have_archive> <icon>/img/ico/3.gif</icon> <epg_progname>ВЕСТИ-МОСКВА</epg_progname> <epg_start>1277807400</epg_start> <epg_end>1277808600</epg_end> </item> ... /* пример */ </channels> </item> <item> <id>2</id> <name>Новости</name> <color>#ef0000</color> <channels> <item> <id>6</id> <name>РТР Вести</name> <is_video>1</is_video> <protected>0</protected> <icon>/img/ico/6.gif</icon> <epg_progname>"Вести. Сейчас. Главные события".</epg_progname> <epg_start>1277807400</epg_start> <epg_end>1277807700</epg_end> </item> ... </channels> </item> </groups> <servertime>1277807687</servertime> </response> /get_url?cid=<ИД канала>&gmt=<дата время позиции архива>&protect_code=<пароль для закрытых каналов> Параметры cid - идентификатор канала полученный из channel_list gmt - дата время позиции архива в формате unixtime protect_code - цифровой пароль для закрытых каналов. если канал закрыт а пароль не передан, либо передан неверный пароль, то в тэге <url> возвращается слово "protected". Возврат пакета вида: <?xml version="1.0" encoding="UTF-8"?> <response> <url>http/ts://217.19.222.34:18046/?ticket=W4z3WFdoSRnMMXHgYFq...md4ZGtVyT6mjgqGZk%3D :http-caching=1500 :no-http-reconnect</url> <servertime>1277808472</servertime> </response> url специально сгенерирован для проигрывания через VLC с соответствующими оптимизированными параметрами URL генерируется только один раз. Для повторного просмотра канала необходимо получить другой, перегенерированный url. При попытке трансляции url нескольких сгенерированных URL одновременно, будет транслироваться только url полученный последним. Таким образом возможна трансляция только одного потока для одной сессии. /epg?cid=<идентификатор канала>&day=<дата формата DDMMYY> Параметры cid - идентификатор канала полученный из channel_list day - дата вида DDMMYY (Пример: 29 июня 2010г = 290610) <?xml version="1.0" encoding="UTF-8"?> <response> <epg> <item> <ut_start>[дата и время начала передачи]</ut_start> <progname>[название передачи]</progname> </item> <item> <ut_start>1277521800</ut_start> <progname>"Вся Россия".</progname> </item> <item> <ut_start>1277522700</ut_start> <progname>"Диалоги о животных".</progname> </item> ... </epg> <servertime>1277809426</servertime> </response> /epg3?dtime=<Дата и время старта EPG>&period=<на сколько часов вперед> Выдача программы телепередач доступных каналов с времени указанного в dtime на следующие period часов. необходима для организации функции "что идет сейчас" как на http://tv.yahoo.com/listings Программа генерируется с учетом timeshift переменной выставленной пользователем в настройках. Параметры dtime - дата и время (unixtime) начала EPG. По умолчанию выбирается текущий момент (по серверному времени) period - на сколько часов вперед. По умолчанию выдается EPG на ближайшие 3 часа. <?xml version="1.0" encoding="UTF-8"?> <response> <item> <id>2</id> <name>Первый</name> <epg> <item> <ut_start>1278944400</ut_start> <progname>"ХОЧУ ЗНАТЬ" с Михаилом Ширвиндтом</progname> <t_start>17:20</t_start> </item> <item> <ut_start>1278946200</ut_start> <progname>"ОБРУЧАЛЬНОЕ КОЛЬЦО" - многосерийный фильм Сериал.</progname> <t_start>17:50</t_start> </item> </epg> </item> <item> <id>3</id> <name>Pоссия</name> <epg> <item> <ut_start>1278942600</ut_start> <progname>"ТАЙНЫ СЛЕДСТВИЯ" - детективный сериал. В главной роли Анна Ковальчук</progname> <t_start>16:50</t_start> </item> <item> <ut_start>1278948600</ut_start> <progname>"КУЛАГИН И ПАРТНЕРЫ"</progname> <t_start>18:30</t_start> </item> </epg> </item> <item> <id>54</id> <name>Discovery</name> <epg> <item> <ut_start>1278943800</ut_start> <progname>"СМЕРТЕЛЬНЫЙ УЛОВ: ВРЕМЯ РАСПЛАТЫ"</progname> <t_start>17:10</t_start> </item> <item> <ut_start>1278947100</ut_start> <progname>"ДЕРЗКИЕ ПРОЕКТЫ: АРИЗОНСКИЕ "КАРДИНАЛЫ"</progname> <t_start>18:05</t_start> </item> <item> <ut_start>1278950400</ut_start> <progname>"РАЗРУШИТЕЛИ ЛЕГЕНД: СПЕЦВЫПУСК "ДЖЕЙМС БОНД". 1 часть"</progname> <t_start>19:00</t_start> </item> </epg> </item> <servertime>1278944765</servertime> </response> /epg_next?cid=<id канала> Возвращает EPG на текущую и на 3 последующих телепередачи канала с заданным ID <?xml version="1.0" encoding="UTF-8"?> <response> <epg> <item> <ts>1294834800</ts> <progname>ХОЧУ ЗНАТЬ - с Михаилом Ширвиндтом</progname> </item> <item> <ts>1294836600</ts> <progname>"ОБРУЧАЛЬНОЕ КОЛЬЦО" - сериал Сериал.</progname> </item> <item> <ts>1294840200</ts> <progname>ФЕДЕРАЛЬНЫЙ СУДЬЯ</progname> </item> </epg> <servertime>1294835324</servertime> </response> /favorites Любимые каналы. Организовано хранение 12 любимых каналов. Каждая ячейка именуется индексом place. В ней содержится идентификатор канала. Без входных параметров. <?xml version="1.0" encoding="UTF-8"?> <response> <favorites> <item> <place>2</place> <channel_id>2</channel_id> </item> <item> <place>8</place> <channel_id>3</channel_id> </item> </favorites> <servertime>1278944963</servertime> </response> /favorites_set?place=<номер ячейки для хранения>&cid=<идентификатор канала> Устанавливает в заданную ячейку любимый канал. Если установить cid=0 то канал удалится из списка любимых. Возврат: пакет сообщение об успешном выполнении либо пакет ошибки. /settings?var=<http_caching|stream_server|timeshift|timezone|bitrate> Получить значение переменной настройки. http_caching - время буферизации потока в миллисекундах stream_server - IP сервера трансляции. Возможные значения передются в массиве List timeshift - смещение по времени. Возможные значения передются в массиве List timezone - часовой пояс. Возможные значения от -12 до +12 bitrate - Значание bitrate каналов. Возможные значения 1500 и 900. для некоторых типов device (см /login) могут быть указаны специфичные bitrate. Возврат: <?xml version="1.0" encoding="UTF-8"?> <response> <settings> <name>timeshift</name> <value>3</value> <list> <item>0</item> <item>1</item> <item>2</item> <item>3</item> <item>4</item> <item>8</item> <item>9</item> <item>10</item> <item>11</item> </list> </settings> <servertime>1278946045</servertime> </response> Если у переменной есть список возможных значений, то они передаются в массиве с параметром list /settings_set?var=<pcode|http_caching|stream_server|timeshift|timezone|bitrate>&val=<значение> Установка настройки. pcode - установка пароля для закрытых каналов. Необходима передача дополнительных параметров: old_code - старый пароль, new_code - новый парль, confirm_code - подтверждение нового пароля http_caching. Дополнительный параметр val передает возможное значение для установки. stream_server - установить IP сервер трансляции. val передает возможное значение для установки. timeshift - val передает возможное значение для установки. timezone - часовой пояс. Возможные значения от -12 до +12 bitrate - Значание bitrate каналов. Возможные значения 1500 и 900. для некоторых типов device (см /login) могут быть указаны специфичные bitrate. Видеотека Получить список фильмов из базы видеотеки. Фильмы выводятся в порядке заданном параметром type, порциями по 20 фильмов. Параметры для формирования списка фильмов: /vod_list? type = best|last|text page = 1 query = text если type==text genre = id nums = <фильмов на страницу> type = best - лучшие фильмы согласно рейтинга по просмотрам. last - тот же список фильмов но отсортирован по дате добавления в обратном порядке. text - поиск в базе по названию фильма. строка для поиска в query page = N - номер страницы для вывода. По умолчанию установлен 1-й номер страницы. query - строка для поиска. Работает если установлен type=text genre = id - фильтр по жанрам. Показывает фильмы только указанного жанра. Возможно перечисление выводимых жанров через знак `|`. Например: genre=205|206|215 nums = NN количество фильмов на страницу по умолчанию: 20 Ответ <?xml version="1.0" encoding="UTF-8"?> <response> <type>best</type> [текущий тип запроса] <total>60</total> [всего записей удовлетворяющих запросу] <count>20</count> [количество на текущей странице] <page>1</page> [номер страницы] <rows> <item> <id>119</id> [идентификатор фильма (не файла для вещания!!!)] <dt_modify>2010-12-24 14:35:18</dt_modify> [дата последней модификации] <name>Убить Шакала </name> [название фильма] <name_orig></name_orig> [иригинальное название фильма (если англ.)] <description>Ограблен ювелирный магазин. Объявлен всесоюзный розыск бандита по кличке Шакал. А тем временем в поезде, следующем из Киева в Крым, происходит загадочное убийство. Прибывший на место преступления следователь Петров обнаруживает связь между этим убийством и ограблением </description> [описание] <poster>/img/vod/470616.jpg</poster> [относительная ссылка на картинку постера. Относительно http://iptv.kartina.tv/] <year>1991</year> [год выпуска фильма] <rate_imdb>0.000</rate_imdb> [значение рейтинга IMDB] <rate_kinopoisk>6.500</rate_kinopoisk> [значение рейтинга кинопоиска] <rate_mpaa></rate_mpaa> [значение рейтинга MPAA] <country>СССР</country> [страна производства] <genre_str>детектив</genre_str> [строка жанров (список жанров фильма собранный в строку и разделенные запятыми)] </item> ... <rows> </responce> /vod_info?id=<id фильма> Получить полную информацию о фильме. Параметр: id - идентификатор фильма полученный из списка фильмов. Ответ: <?xml version="1.0" encoding="UTF-8"?> <response> <film> <id>119</id> [идентификатор фильма] <name>Убить Шакала </name> [название фильма] <name_orig></name_orig> [оригинальное название фильма] <description>Ограблен ювелирный магазин. Объявлен всесоюзный розыск бандита по кличке Шакал. А тем временем в поезде, следующем из Киева в Крым, происходит загадочное убийство. Прибывший на место преступления следователь Петров обнаруживает связь между этим убийством и ограблением </description> [описание фильма] <poster>/img/vod/470616.jpg</poster> [ссылка на файл постера] <lenght>73</lenght> [длина фильма в минутах] <genre_str>детектив</genre_str> [жанры фильма, разделенные запятыми] <year>1991</year> [год выпуска] <director>Григорий Кохан</director> [режиссер] <scenario>Николай Оганесов, Григорий Кохан</scenario> [сценарист] <actors>Евгений Жариков, Олег Масленников, Нина Колчина-Бунь, Давид Бабаев, Римас Моркунас, Евгений Смирнов, Вячеслав Езепов, Бимболат Ватаев, Александр Быструшкин, Степан Олексенко</actors> [в ролях] <rate_imdb>0.000</rate_imdb> [рейтигн IMDB] <rate_kinopoisk>6.500</rate_kinopoisk> [рейтинг кинопоиска] <rate_mpaa></rate_mpaa> [рейтинг MPAA] <country>СССР</country> [страна производства] <studio></studio> [студия] <awards></awards> [награды] <budget>0</budget> [бюджет] <images></images> [скриншоты (если есть)] <videos> [файлы фильма (серии)] <item> <id>161</id> [идентификатор файла] <title></title> [название серии. если фильм односерийный, поле может быть не задано] <format>dvd</format> [качество. tv|dvd|hd|fullhd|etc] <url>KILL_JACKAL.m4v</url> [имя файла (справочное. не используется.)] <size>0</size> [размер файла] <lenght>0</lenght> [длительность фильма в минутах] <codec>h264</codec> [кодек] <width>0</width> [ширина картинки] <height>0</height> [высота картинки] <track1_codec>aac</track1_codec> [тип аудио] <track1_lang></track1_lang> [язык звукового трека1] <track2_codec></track2_codec> [кодек звука] <track2_lang></track2_lang> <track3_codec></track3_codec> <track3_lang></track3_lang> </item> </videos> <genres> [массив жанров фильма] <item> <id>209</id> [идентификатор жанра] <name>детектив</name> [наименование жанра] </item> </genres> </film> <servertime>1294761468</servertime> </response> Получить ссылку для вещания потока видео. /vod_geturl?fileid=<ид файла> Параметр fileid - идентификатор файла полученый из /vod_info Ответ: <?xml version="1.0" encoding="UTF-8"?> <response> <url>http://vod.kartina.tv/Tass_02.m4v?ticket=mkcuTmdjrxyJAOE5Nb6EZNxeNin3IDojbkF0...WQlzY4CMP%2F5%2BIr8Y%3D :http-caching=1500 :no-http-reconnect</url> <servertime>1294826729</servertime> </response> Внимание! Ссылка вещания генерируется динамично. В зависимости от нагрузки на сервер. /vod_genres без параметров. возвращает список жанров. не рекомендуется делать статичную копию справочника, поскольку жанры могут появляться по мере поступления новых фильмов. Ответ: <?xml version="1.0" encoding="UTF-8"?> <response> <genres> <item> <id>205</id> <name>биографический</name> </item> <item> <id>206</id> <name>боевик</name> </item> <item> <id>208</id> <name>военный</name> </item> <item> <id>209</id> <name>детектив</name> </item> <item> <id>210</id> <name>детский</name> </item> <item> <id>213</id> <name>драма</name> </item> <item> <id>215</id> <name>исторический</name> </item> <item> <id>216</id> <name>комедия</name> </item> <item> <id>219</id> <name>криминал</name> </item> <item> <id>220</id> <name>мелодрама</name> </item> <item> <id>221</id> <name>музыка</name> </item> <item> <id>222</id> <name>музыкальный</name> </item> <item> <id>224</id> <name>приключения</name> </item> <item> <id>227</id> <name>семейный</name> </item> <item> <id>230</id> <name>триллер</name> </item> <item> <id>231</id> <name>ужасы</name> </item> <item> <id>232</id> <name>фантастика</name> </item> <item> <id>234</id> <name>фэнтези</name> </item> </genres> <servertime>1294827021</servertime> </response> /vod_favlist список отобраных любимых фильмов[/size] Формат ответа идентичен формату списка /vod_list /vod_favadd?id=<ID фильма> Добавить фильм с идентификатором id в список любимых фильмов /vod_favsub?id=<ID фильма> Удалить фильм с идентификатором id из списка любимых фильмов Дополнительная информация Коды и сообщения об ошибках: define('E_UNKNOW_ERROR', 0); define('E_INCORRECT_REQUEST', 1); define('E_TOO_ENOUGH_DATA', 2); define('E_ACCESS_DENIED', 3); define('E_INCORRECT_LOGIN', 4); define('E_CONTRACT_INACTIVE', 5); define('E_CONTRACT_PAUSED', 6); define('E_NOT_ALLOWED', 7); define('E_GET_URL_INFO', 8); define('E_NEED_DAY', 9); define('E_NEED_CHANNEL_ID', 10); define('E_ANOTHER_CLIENT_IN', 11); define('E_AUTH_ERROR', 12); define('E_PACKET_EXPIRED', 13); define('E_INCORRECT_METHOD', 14); define('E_ARCHIVE_NOT_AVAILABLE', 15); define('E_NEED_PLACE', 16); define('E_NEED_SETTING_VARIABLE', 17); define('E_PASS_BAD_CONFIRM', 18); define('E_CURRENT_PASS_BAD', 19); define('E_NEW_PASS_BAD', 20); define('E_NEED_VALUE', 21); define('E_VALUE_NOT_ALLOWED', 22); define('E_NEED_PARAM', 23); define('E_NEED_PARAM_ID', 24); define('E_NEED_PARAM_FILEID', 25); define('E_NEED_PARAM_TYPE', 26); define('E_NEED_PARAM_QUERY', 27); define('E_BITRATE_NOT_AVAILABLE', 29); define('E_SERVICE_NOT_AVAILABLE', 30); define('E_LIMIT_EXCEEDED', 31); define('M_FAVORITE_SETS', 2); define('M_PASS_CHANGED', 3); define('M_COMPLETED', 4); E_INCORRECT_REQUEST E_INCORRECT_REQUEST E_TOO_ENOUGH_DATA Wrong login or password E_ACCESS_DENIED Access denied E_INCORRECT_LOGIN Login incorrect E_CONTRACT_INACTIVE You contract is inactive E_CONTRACT_PAUSED You contract is paused E_NOT_ALLOWED Channel not found or not allowed E_GET_URL_INFO Error generate URL. Bad parameters E_NEED_DAY Need DAY parameter <DDMMYY> E_NEED_CHANNEL_ID Need ChannelID E_ANOTHER_CLIENT_IN Another client with you login was logged E_AUTH_ERROR Authentification error E_PACKET_EXPIRED You packet was expired E_UNKNOW_ERROR Unknown error E_INCORRECT_METHOD Unknown API function E_ARCHIVE_NOT_AVAILABLE Archive is not available E_NEED_PLACE Need place to set E_NEED_SETTING_VARIABLE Need name of settings variable E_PASS_BAD_CONFIRM Incorrect confirmation code E_CURRENT_PASS_BAD Current code is wrond E_NEW_PASS_BAD New code is wrond E_NEED_VALUE Need value (val) parameter E_VALUE_NOT_ALLOWED This value is not allowed E_NEED_PARAM Need parameter E_NEED_PARAM_ID Need parameter <id> E_NEED_PARAM_FILEID Need parameter <fileid> E_NEED_PARAM_TYPE Need parameter <type> E_NEED_PARAM_QUERY Need parameter <query> E_SERVICE_NOT_AVAILABLE Service is not available E_LIMIT_EXCEEDED Query limit exceeded M_FAVORITE_SETS Favorite channel was set M_PASS_CHANGED Password was changed M_COMPLETED Operation completed successfully Link to comment Share on other sites More sharing options...
Eugene Posted June 29, 2010 Report Share Posted June 29, 2010 1) пожалуйста, сделайте ini_set('display_errors', 0); ибо <br /> <b>Notice</b>: Use of undefined constant API - assumed 'API' in <b>/***/***/api/face.class.php</b> on line <b>15</b><br /> не то, чтобы придираюсь, просто XML не валидный получается а в дальнейшем это вас избавит от ругани простых пользователей.. 2) Для идентификации и создании сессии было решено использовать стандартный механизм HTTP сессий с поддержкой COOKIE. означает ли это, что вы форсировали параметр session.use_only_cookies? или же только пугаете, и можно будет спокойно передавать параметр типа MWARE_SSID=4cqi1rt010uf4bi2okmflpavs7 обычным параметром запроса (что иногда предпочтительнее) Link to comment Share on other sites More sharing options...
mariman Posted June 30, 2010 Author Report Share Posted June 30, 2010 Исправлено. XML валидный. session.use_only_cookies установили в 0 Ждем конструктивных замечаний. Link to comment Share on other sites More sharing options...
Oxotnik Posted June 30, 2010 Report Share Posted June 30, 2010 Исправлено. XML валидный. session.use_only_cookies установили в 0 Ждем конструктивных замечаний. http://iptv.kartina.tv/api/xml/login?login...mp;password=xxx <response> − <error> <message>Wrong login or password</message> <code>2</code> </error> <servertime>1277893413</servertime> </response> пароль и логин вроде правильные, через online захожу без проблем Link to comment Share on other sites More sharing options...
mariman Posted June 30, 2010 Author Report Share Posted June 30, 2010 http://iptv.kartina.tv/api/xml/login?login...mp;password=xxx пароль и логин вроде правильные, через online захожу без проблем Прошу прощения великодушно! параметр не "password" а "pass". т.е. правильно http://iptv.kartina.tv/api/xml/login?login=xxx&pass=xxx Link to comment Share on other sites More sharing options...
nitrogen14 Posted July 1, 2010 Report Share Posted July 1, 2010 нереально сделать запрос на видестрим вместе с логином и также для епг? типо /get_url?cid=<ИД канала>&gmt=<дата время позиции архива>&login=<login>&pass=<password> чтобы можно было формировать свои плейлисты и смотреть на любом плеере/приставке с поддержкой тс потока с кодировкой x.264 Link to comment Share on other sites More sharing options...
mariman Posted July 2, 2010 Author Report Share Posted July 2, 2010 нереально сделать запрос на видестрим вместе с логином и также для епг? типо /get_url?cid=<ИД канала>&gmt=<дата время позиции архива>&login=<login>&pass=<password> чтобы можно было формировать свои плейлисты и смотреть на любом плеере/приставке с поддержкой тс потока с кодировкой x.264 Нереально. две причины как минимум 1. доп. нагрузка на сервер (потому как при логине и пароле производится масса проверок); 2. безопасность. Вообще посылать пароль в открытом виде через УРЛ пока не рекомендуется и, скорее всего, в будущем будет запрещено (если возникнут прецеденты - будем принимать подобные меры). Настойчивые рекомендации: для процедуры /login пользоваться SSL соединением и отсылать данные через POST. По первой причине могу добавить: если будет паразитическая нагрузка в виде "дергания" на каждый чих логина и пароля - мы вынуждены будем ужесточать меры на ограничения. Link to comment Share on other sites More sharing options...
Bigfan Posted July 10, 2010 Report Share Posted July 10, 2010 Как можно сделать ссылку для VLC, то есть плейлист? Link to comment Share on other sites More sharing options...
Eugene Posted July 11, 2010 Report Share Posted July 11, 2010 1. доп. нагрузка на сервер (потому как при логине и пароле производится масса проверок); расшифрую: выборка по ид или паре логин/пароль нагружает сервер БД практически одинаково (при соответветствующих индексах). а проверять состояние аккаунта юзера, по хорошему, все равно надо, вне зависимости от того, залогинен он или нет.. 2) безопасность. Вообще посылать пароль в открытом виде через УРЛ пока не рекомендуется и, скорее всего, в будущем будет запрещено тут полностью поддерживаю. хотя, будем объективны, риски малы. скорее всего в ssl особого смысла нет, но шуровать пароль в виде хеша md5 из пароля + адреса подсети (пусть не в виде основного, до дополнительного варианта авторизации) было бы здорово. типо: $subnet = implode('.', array_slice(explode('.', $_SERVER['REMOTE_ADDR']), 0, 3)); $passMD5 = md5($password . $subnet); По первой причине могу добавить: если будет паразитическая нагрузка в виде "дергания" на каждый чих логина и пароля - мы вынуждены будем ужесточать меры на ограничения. упростите (опишите более детально) требования к авторизации и все станет гораздо проще. дайте людям понять, что "не куки" будут работать. как вариант, добавьте возможность (и документируйте её) передавать ид сессии прямо в урл. развитие API -- это большой шаг, как для развитие вашего web-интерфейса, так и для привлечения сторонних разработчиков (все-таки, вы продаете сервис, а не приставки к сервису), что принесет дополнительных клиентов. <br />Как можно сделать ссылку для VLC, то есть плейлист?<br /> при помощи "паразитической нагрузки" проксировав запрос на канал через простой скриптик который авторизируется и перезапросит ссылку на канал. писать паразита можно на любом языке программирования, вплоть до shell (wget + grep + awk справятся аж бегом) Link to comment Share on other sites More sharing options...
Bigfan Posted July 11, 2010 Report Share Posted July 11, 2010 То есть прямой ссылки типа "url blab bla user+pw bla bla" нету и не будет никогда? Можно попонятнее про скрипт? Link to comment Share on other sites More sharing options...
mariman Posted July 19, 2010 Author Report Share Posted July 19, 2010 расшифрую: выборка по ид или паре логин/пароль нагружает сервер БД практически одинаково (при соответветствующих индексах). а проверять состояние аккаунта юзера, по хорошему, все равно надо, вне зависимости от того, залогинен он или нет.. Может все-таки мы, как разработчики, лучше знаем где у нас нагрузка больше... Мы проводили тесты перед тем как определиться с архитектурой API и пришли к выводу что механизм сессии оптимален. Есть много нюансов в авторизации, которые просто невозможно делать каждый раз. Например биллинг... ... будем объективны, риски малы. скорее всего в ssl особого смысла нет, Будем объективны. Риски, хоть и малые, но все-таки есть. Мы обязаны предоставить безопасное соединение. Пока сама учетная запись будет объектом купли-продажи, к ней будет интерес злоумышленников. <br />Как можно сделать ссылку для VLC, то есть плейлист?<br /> при помощи "паразитической нагрузки" проксировав запрос на канал через простой скриптик который авторизируется и перезапросит ссылку на канал. писать паразита можно на любом языке программирования, вплоть до shell (wget + grep + awk справятся аж бегом) не в инструментах речь. Да. только через такой проксик только и можно сделать плейлист. Многие не поймут поэтому расшифрую: НИКОГДА НЕ БУДЕТ ВОЗМОЖНОСТИ НАПРЯМУЮ ПОЛУЧИТЬ ПЛЕЙЛИСТ! если посмотреть на сам плейлист, то там фигурируют такие вещи как URL. т.е. величины постоянные. Суть в том, что у kartina.tv эти самые URL перегенирируются на каждый запрос. Это необходимое условие для отдачи контента только для одной учетной записи и только в конкретный промежуток времени. Если кто-то попробует воспользоваться этим URL еще раз или через некоторый промежуток времени, вещание прекратится. В виду этого создание плейлиста с прямыми урлами невозможно. НО! Если создать локально некий прокси, который будет авторизоваться и перегонять трафик снаружи (например) на http://localhost/playlist/90 ..., то с такими URL (на локальный хост) создать плейлист уже возможно. Link to comment Share on other sites More sharing options...
Eugene Posted July 20, 2010 Report Share Posted July 20, 2010 Может все-таки мы, как разработчики, лучше знаем где у нас нагрузка больше... Мы проводили тесты перед тем как определиться с архитектурой API и пришли к выводу что механизм сессии оптимален. Есть много нюансов в авторизации, которые просто невозможно делать каждый раз. Например биллинг... то, что механизм предварительной авторизации оправдывает себя -- я с этим и не думал спорить. это доказано многочисленными практиками экономии, как на спичках, так и на серьезных расходах рессурсов. вполне можно считать это стандартом "де факто". хотя, биллинг, в данном случае, это отчасти именно экономия на спичках. поскольку все равно срок годности абонемента надо сравнивать с текущим таймстемпом при каждом запросе API, а будет ли при этом выполнен дополнительный запрос к базе (по первичному ключу!) или нет (и значение будет извлечено из некого кеша, коим и является механизм сессий) -- это уже детали реализации. к слову, вот скажите откровенно, храните ли вы в сессии существенно больше биллинг-рилэйтед информации, чем ID аккаунта? вопрос риторический.. Будем объективны. Риски, хоть и малые, но все-таки есть. Мы обязаны предоставить безопасное соединение. Пока сама учетная запись будет объектом купли-продажи, к ней будет интерес злоумышленников.<br /><br /> действительно похвально. как на счет альтернативного способа авторизации по хешу (предложенного мной выше в теме)? дешево и сердито.. в перспективе решает ряд вопросов для авторизации с убогих девайсов имеющих проблемы с ssl соединениями. не в инструментах речь. Да. только через такой проксик только и можно сделать плейлист. вопрос в том, что "будет ли такая реализация считаться паразитической"? ибо простой shell скрипт открывающий таким образом канал пишется за 3 минуты. а вот скрипт с сохранением промежуточного состояния сесси между получением списка каналов, просмотром программки и переключением тех самых каналов будет писаться дольше. Link to comment Share on other sites More sharing options...
admin Posted July 21, 2010 Report Share Posted July 21, 2010 простой shell скрипт открывающий таким образом канал пишется за 3 минуты. а вот скрипт с сохранением промежуточного состояния сесси между получением списка каналов, просмотром программки и переключением тех самых каналов будет писаться дольше. до получения URL-а вещания канала все равно необходимо получить актуальный плейлист (мало ли, убрали/добавили пару каналов) т.е. что-то ваш клиент все равно должен хранить раз уж вы пишете полноценного клиента, то сохранить и передать куку не проблема а для 3-минутной поделки слишком много параметров в сервисе Link to comment Share on other sites More sharing options...
mariman Posted July 21, 2010 Author Report Share Posted July 21, 2010 к слову, вот скажите откровенно, храните ли вы в сессии существенно больше биллинг-рилэйтед информации, чем ID аккаунта? вопрос риторический.. Риторика саркастичная... Таки да. В сессии у нас хранится СУЩЕСТВЕННО больше нежели только биллинг-рилэйтед информация. ... как на счет альтернативного способа авторизации по хешу (предложенного мной выше в теме)? дешево и сердито.. в перспективе решает ряд вопросов для авторизации с убогих девайсов имеющих проблемы с ssl соединениями. Предложенный вами вариант практически не отличается от прямого запроса с логином-паролем, т.е. поднимать паровоз на каждый запрос все равно придется. Да и потом, Вы предлагаете заменить пару логин-пароль на логин-хэш (от пароля и части IP клиента). Вопрос: каким таким образом клиент увидит свой реальный IP чтобы соорудить подобный хэш? В 95% случаев клиентский IP будет из диапазона 192.168.х.х а на сервере определиться внешний IP шлюза. А насчет убогих девайсов без ssl могу сказать точно - они не потянут декодирование потока в 2 мегабита. вопрос в том, что "будет ли такая реализация считаться паразитической"? ибо простой shell скрипт открывающий таким образом канал пишется за 3 минуты. а вот скрипт с сохранением промежуточного состояния сесси между получением списка каналов, просмотром программки и переключением тех самых каналов будет писаться дольше. Лучше дольше да лучше Link to comment Share on other sites More sharing options...
Eugene Posted July 27, 2010 Report Share Posted July 27, 2010 (edited) Вопрос: каким таким образом клиент увидит свой реальный IP чтобы соорудить подобный хэш? dig +short myip.opendns.com @resolver1.opendns.com или типа того (даже стянуть http://whatismyip.com и отпарсить оттуда адрес вполне сойдет) те, кто будут думать, что локальный адрес и есть внешний, вряд ли будут способны написать что-то достойное. так что можно этот сегмент игнорировать. ну или пусть используют ssl.. хотя, дело, конечно, хозяйское.. наше дело предложить © Edited July 28, 2010 by Eugene Link to comment Share on other sites More sharing options...
User7 Posted July 27, 2010 Report Share Posted July 27, 2010 А насчет убогих девайсов без ssl могу сказать точно - они не потянут декодирование потока в 2 мегабита. Хотелось бы заметить, что Картина в будущем может захотеть сделать отдельный поток с пониженным битрейтом для просмотра на смартфонах. Как будет отражаться использование SSL на мобильных девайсах, сказать затрудняюсь, может, у Вас есть опыт? сорри за оффтоп Link to comment Share on other sites More sharing options...
Eugene Posted July 28, 2010 Report Share Posted July 28, 2010 Хотелось бы заметить, что Картина в будущем может захотеть сделать отдельный поток с пониженным битрейтом для просмотра на смартфонах. Как будет отражаться использование SSL на мобильных девайсах, сказать затрудняюсь, может, у Вас есть опыт? я так понимаю, что речь идет об использовании защищенного соединения исключительно для авторизации, что нормально. потому что гонять трафик через SSL (особенно на мобильных девайсах) -- страшный overload на обе стороны. а чахлые девайсы просто не потянут такой нагрузки (декодирование трафика, декодирование потока + проигрывание потока) Link to comment Share on other sites More sharing options...
mariman Posted July 29, 2010 Author Report Share Posted July 29, 2010 ...я так понимаю, что речь идет об использовании защищенного соединения исключительно для авторизации, что нормально... Именно так. Урлы для вещания генерируются сервером. И они не SSL. Авторизация идет через зашифрованный ticket. Link to comment Share on other sites More sharing options...
Jo2003 Posted July 29, 2010 Report Share Posted July 29, 2010 (edited) Здравствуйте! Я начинал использовать API в VLC-Record. Еще рано сказать, когда будет такой релис. Если посмотрю все информации которые есть когда исползую API и когда делаю вопрос как "ранше", мне нехватает допольнительное информация в EPG. Там теперь только имя передачи. А надо еще как ранше "program description (XML name: pdescr)". Возможно ли это? Спасибо! Простите, что не так хорошо по-немецки говорю - я немец. Типа: /epg?cid=<идентификатор канала>&day=<дата формата DDMMYY> <?xml version="1.0" encoding="UTF-8"?> <response> <epg> <item> <ut_start>[дата и время начала передачи]</ut_start> <progname>[название передачи]</progname> <pdescr>[допольнительные информации передачи]</pdescr> </item> <item> ... </item> </epg> </response> Edited July 29, 2010 by Jo2003 Link to comment Share on other sites More sharing options...
Jo2003 Posted July 29, 2010 Report Share Posted July 29, 2010 (edited) Я видел, что все информации передачи в "<progname>". Все же было бы лучше, если там действительно только было бы называние а другие информации в "<pdescr>". Я знаю, что информации есть отдельно. Например когда с COOKIE идешь на этот URL. http://iptv.kartina.tv/?m=epg&act=show_day_xml&day=<ddmmyy>&cid=<channel id> Edited July 29, 2010 by Jo2003 Link to comment Share on other sites More sharing options...
mariman Posted July 30, 2010 Author Report Share Posted July 30, 2010 progname = progname + "\n" + pdescr Link to comment Share on other sites More sharing options...
Jo2003 Posted July 30, 2010 Report Share Posted July 30, 2010 (edited) О! Если так, вообще без проблем! Спасибо! П.С. Я пробовал! Работает классно! Edited July 30, 2010 by Jo2003 Link to comment Share on other sites More sharing options...
Jo2003 Posted August 3, 2010 Report Share Posted August 3, 2010 TimeShift не работает. Могу соханять - работает. Могу спрашивать - работает. Но каналы всегда идут без TimeShift. Link to comment Share on other sites More sharing options...
Eugene Posted August 3, 2010 Report Share Posted August 3, 2010 mariman, подумалось вот: неплохо бы для json запросов добавить опциональный параметр callback (или типа того) 1) google-style (http://code.google.com/intl/ru/apis/gdata/docs/json.html) 2) реально создавать "тонкие" клиенты без дополнительного серверного скрипта для проксирования запросов Link to comment Share on other sites More sharing options...
mariman Posted August 10, 2010 Author Report Share Posted August 10, 2010 TimeShift не работает. Могу соханять - работает. Могу спрашивать - работает. Но каналы всегда идут без TimeShift. Поправлено. Link to comment Share on other sites More sharing options...
Recommended Posts