http://client.zsperm.ru:2000/
http://client.zsperm.ru:2001/ - запасной вариант, использовать если не удается подключиться по 2000 порту
авторизационные данные (логин, пароль) передаются при каждом обращении к серверу
http://client.zsperm.ru:2000/api/Account
Возвращает фото юзера + в Header записывает DisplayName и другую информацию.
Аккаунты для тестов:
логины : TestUser01 / TestUser02 / TestUser03 …
пароль: testuser
http://client.zsperm.ru:2000/Data/Agendas/AgendaList.xml
Id - int
Name=”Заседание 20.03.2014” - название
Date=”2014.03.20” - дата в формате yyyy.MM.dd
Status=”Проект” - статус
Path=”/Data/Agendas/171/“ - часть пути до xml с заседанием
добавляется к адресу сервера
в конец - agenda.xml
Пример: http://client.zsperm.ru:2000/Data/Agendas/306/agenda.xml
https://client.zsperm.ru:2005/api/agendalist
Возвращает кусок ссылки вида /api/AgendaZsList/1
По ней возвращается zip файл со списком повесток
https://client.zsperm.ru:2005/api/agendaissueslist?id={id}
id - id повестки
Возвращается кусок ссылки вида /api/AgendaIssuesZsList/200052
По ней возвращается zip файл со списком вопросов
Текст в ячейках - Name
http://client.zsperm.ru:2000/Data/PassportsList.xml
RegDate - дата в формате yyyy.MM.dd
RegNumber - text
Type - text
Name - text - название закона
Subject - text
Id - int
Прямой переход на xml-страницу с контентом:
адрес сервера + /Data/Passports/+ Id + .xml
Пример:
http://client.zsperm.ru:2000/Data/Passports/6206170.xml
Тескт ячеек таблицы - название закона
Новый способ:
https://client.zsperm.ru:2005/api/passport/6206170
http://client.zsperm.ru:2000/Data/AgendasCommittee/AgendaListCommittee.xml
аналогично с повестками комиссий
Пример ссылки для перехода на xml с вопросами
http://client.zsperm.ru:2000/Data/AgendasCommittee/161/AgendaCommittee.xml
В коммитетах, комиссиях, фракциях, комиссиях МП и совете МП идентичные xml
Все также как и в обычных повестках, но сначала нужно делать группировку по значению AgendaSubType
http://client.zsperm.ru:2000/Data/AgendasCommission/AgendaListCommission.xml
Id - int
Name - text (название)
Date - дата в формате dd.MM.yyyy
Status - text - статус
AgendaSubType - text - Название комиссии
Надо просмотреть все AgendaSubType и составить список комиссий (пока их 2). Внутри - заседания конкретной комиссии
Path=”/Data/AgendasCommission/62/“ - часть пути до xml добавляется к адресу сервера
в конец - AgendaCommission.xml
Пример: http://client.zsperm.ru:2000/Data/AgendasCommission/62/AgendaCommission.xml
http://client.zsperm.ru:2000/Data/AgendasFraction/AgendaListFraction.xml
аналогично с повестками комиссий
Пример ссылки для перехода на xml с повестками
http://client.zsperm.ru:2000/Data/AgendasFraction/168/AgendaFraction.xml
http://client.zsperm.ru:2000/Data/AgendasYouthCouncil/AgendaListYouthCouncil.xml
Пример ссылки для перехода на xml с повестками
http://client.zsperm.ru:2000/Data/AgendasYouthCouncil/109/agendayouthcouncil.xml
http://client.zsperm.ru:2000/Data/AgendasYouth/AgendaListYouth.xml
Пример ссылки для перехода на xml с повестками
http://client.zsperm.ru:2000/Data/AgendasYouth/163/agendayouth.xml
http://client.zsperm.ru:2000/api/BudJet
Возвращает путь и версию в header’e
Ссылка на xml - по запросу
http://client.zsperm.ru:2000/api/newslist
В ответе - путь, пример:
/Data/News/0.xml
Но искать нужно, добавив .zip в конец:
http://client.zsperm.ru:2000/Data/News/0.xml.zip
Xml паспорта лежит по адресу http://client.zsperm.ru:2000/Data/Passports/{id}.xml. {id} - поле passport у вопроса в agenda.xml. Ссылки на документы располагаются в тегах заканчивающихся на Source.
(см. также карточку Аннотации в ветке паспортов, там то же самое
http://client.zsperm.ru:2000/api/personaldocumentlist?id=%d Возвращает список(XML) версий для документа с идентификатором id, соответственно если там есть документы с минорными версиями - то это личные версии.
http://client.zsperm.ru:2000/api/personaldocument?id=%d Возвращает документ, где id - идентификатор версии из списка, полученного выше
Запрос http://client.zsperm.ru:2000/Data/extresources.xml.zip
В xml поля
Title -название
Url - ссылка на ресурс
Получение дерева материалов:
/Data/KSM/ksmaterials.xml
“api/ksmaterialstree?version=%d” [параметр version-опционален, передается при условии, что на устройстве уже присутствует версия данного файла]
В случае присутствия более новой версии возвращается относительный URL на xml файл. Пример файла в приложении.
Каждый элемент данного файла включает следующие атрибуты:
Id-идентификатор элемента(используется опционально)
Title-отображаемое название.
ShowDisclosure-отображения индикатора раздела (стрелка)
DocId-ид документа, который необходимо отобразить
Опционально атрибут DocUrl, при его наличии вместо отображения документа необходимо отобразить содержимое URLадреса.
Чтобы получить документ, заданный параметром DocId
/Data/KSM/<id>.pdf
необходимо обратиться к сервису, передав ему параметром id документа: “api/ksmaterialsdocument?id=%d&version=%d” [параметр version-опционален, передается при условии, что на устройстве уже присутствует версия данного файла]
“api/kspreportdocument?id=%d&version=%d”
“api/kspreporttree?version=%d”
Data/KSP/ksp.xml
/Data/KSP/<id>.pdf
“api/govprogdocument?id=%d&version=%d”
“api/govprogtree?version=%d”
/Data/GPR/gpr.xml
/Data/GPR/<id>.pdf
“api/ikreportdocument?id=%d&version=%d”
“api/ikreporttree?version=%d”
/Data/IKR/ikreport.xml
/Data/IKR/<id>.pdf
“api/uppcreportdocument?id=%d&version=%d”
“api/uppcreporttree?version=%d”
/Data/UPPC/uppcreport.xml
/Data/UPPC/<id>.pdf
“/api/budgetdocumentlist[?version=%d]”
“/api/budgetdocument?id=%d[&version=%d]”
/Data/Budgets/budgets.xml
/Data/Budgets/<id>.pdf
файл agenda.xml
1 уровнень - тег Agenda, копия из agendalist.xml (поля id, name, status, path). Name - вставляется в заголовок.
2 уровень
Вопросы - идут списком
поле, выделенное красным, может отсутствовать в отдаче
id - уникальный номер, int
OrderNum - поле типа int, порядковый номер записи в списке. Как правило, в отдаче уже упорядочены по возрастанию значения, но на всякий случай лучше на клиенте упорядочивать по этому полю
Num - поле типа int, просто номер, поле может быть пустым “”
QType - пока обнаружено только значение “Question”, назначение поля выясняется. Возможно, в других отдачах есть тоже тег Question, но с другим значением этого поля
title - укороченный заголовок
fullTitle - полный заголовок. В списке на iPad используется это значение
reading - int
status - возможны варианты “Утвержден”, “Зарегистрирован”, “Включен в проект”, “Перенесен”. Используется для распределения по sections (Утв. , Все, Доп). В Доп. пока не ясно что, везде 0.
group - текстовое поле
ExtId - intBDId
- intdate
- dd.MM.yyyy h:mm:ssshortDesc
- text
passport
- int
Если поле есть, то html контент можно получить аналогичным образом, как в Паспортах закона:
адрес сервера + /Data/Passports/ + passport + .html.
!! При этом в html не будет 1 части - заголовок. 2 часть (контент) - такая же.
passportlink
- textRegNumber
- text; номер законопроекта.HeadComm
- textSubject
- textdokl
– text (докладчик)sodokl
- text (содокладчик)
QuestionLink - ссылка на html-файл с контентом. Забирать аутентифицированным http get запросом. Аутентификация базовая (username + password). Есть ошибка в синтаксисе запроса при перечислении параметров: после поля siteUrl стоит ? вместо &.
3 уровень
может отсутствовать, может быть несколько
Title - text
reading - int
У теги есть значение в виде части пути /data/docs/12345.pdf?1234 (добавляется к http://client.zsperm.ru:2000/); где используется - пока не ясно
Текст - fullTitle, номер - Num (Если нет, то пусто)
Разделение по Утв/Доп : Если у вопроса нет номера, то он Доп
(Почти все это есть в первом xml файле):
Все даты в xml в формате YYYY-MM-ddThh:mm:ss+hh:mm
(пример 2014-04-17T00:00:00+06:00)
Под заголовком “Документы” - разделы документов
Кнопка “Звезда”-добавление/удаление из избранного. Избранные локальные
Правая кнопка - переход на экран аннотаций к паспорту
Папка: законопроект
Подпапка: Проект закона {номер} от {дата}
Папка : Текст закона
Чтения содержат в себе похожие структуры, так что опишу их в общем
{Number} - одно из списка [First , Second, Third]
Подразделы начинаются с первой буквы чтения (F, S, T)
Подпапка : Заключения
Заключения бывают 6 видов :
{upper_case_char}UAZD_Resolution - УАЗД
{upper_case_char}KSP_Resolution - КСП
{upper_case_char}GPU_Resolution - ГПУ
{upper_case_char}AO_Resolution - Губернатор
{upper_case_char}EZKpK_Resolution - Коммиссия по вопросам противодействия корупции
{upper_case_char}PR_Resolution - Прокуратура
Подпапка: Решения
Поля:
Подзаголовок вида: {название коммисии} №{номер} от {дата}
Подпапка: Рассмотрения ЗС
Внутри список {upper_case_char}Decree
Внутри {upper_case_char}Decree:
{upper_case_char}DecreeDate - дата
{upper_case_char}DecreeNumber - номер
{upper_case_char}DecreeSource - список документов
Подзаголовок вида: Постановление ЗС №{номер} от {дата}
Подпапка: Дополнительное рассмотрение ЗС
Внутри {upper_case_char}AdditionalDecree:
{upper_case_char}DecreeSDate - дата
{upper_case_char}DecreeNumber - номер
{upper_case_char}DecreeSource - список документов
Подзаголовок вида: Дополнительное постановление ЗС №{номер} от {дата}
Относится ко второму чтению
Подпапка: Таблица поправок
Внутри:
AmendmentsTableSource. Внутри него часть пути до документа
Относится ко второму чтению
Подпапка: Заседания рабочих групп
Заголовок вида: Протокол РГ №{номер} от {дата}
Все относятся к законопроекту
Подпапки соответственно: Письмо о переносе законопроекта, Письмо о возврате законопроекта, Письмо об отзыве законопроекта
Структура почти одинаковая.
Папка: Протесты
Внутри список протестов Protest
У протеста есть источник ProtestSource
Внутри ProtestSource:
Папка: Обнародование
Подпака: Подписание
Внутри список SignificationLetter
Внутри SignificationLetter:
Папка будет “Контроль исполнения”
Папка: Текст закона
Подпапка: Постановление об отклонении №{номер} от {дата}
Внутри:
Папка: Доп. материалы
Заголовок: {title или Документ} №{номер} от {дата}
Внутри список AdditionalMaterialsDocument
Внутри AdditionalMaterialsDocument:
Папка: Первое чтение
Подпапка : Согласование с органами МСУ
Заголовок : Документ о направлении на согласование {номер} от {дата}
Структура:
Теги Change_by_Laws и Changed_Laws
Change_by_Laws - законы, изменяющие данный закон
Changed_Laws - законы изменяемые данным законом
файл AgendaCommittee.xml
1 уровень
тег Agenda, копия из AgendaListCommittee.xml
2 уровень
аналогично повесткам комиссий
3 уровень
может отсутствовать, может быть несколько
- как и в повестках ЗС
Title - text
reading - int
У тега есть значение в виде части пути /data/docs/12345.pdf?1234 (добавляется к http://client.zsperm.ru:2000/); где используется - пока не ясно
может отсутствовать, может быть несколько
Title - text
У тега есть значение в виде части пути /data/docs/12345.pdf?1234 (добавляется к http://client.zsperm.ru:2000/); где используется - пока не ясно
файл AgendaComission.xml
1 уровень
тег Agenda, копия из AgendaListCommission.xml
2 уровень
Вопросы - идут списком
поле, выделенное красным, может отсутствовать в отдаче
id - уникальный номер, int
OrderNum - поле типа int, порядковый номер записи в списке. Как правило, в отдаче уже упорядочены по возрастанию значения, но на всякий случай лучше на клиенте упорядочивать по этому полю
Num - поле типа int, просто номер, поле может быть пустым “”
time - формат yyyy.MM.dd hh:mm
QType - пока обнаружено только значение “Question”, назначение поля выясняется. Возможно, в других отдачах есть тоже тег Question, но с другим значением этого поля
title - укороченный заголовок
fullTitle - полный заголовок. В списке на iPad используется это значение
reading - int
status - пока замечен только вариант “Утвержден”.group
- текстовое полеExtId
- intSubject
- textdokl
– text (докладчик)BDId
- intHeadComm
- textshortDesc
- text
passport
- int
passportlink
- text - ссылка на html-файл с контентом. Пример: http://srvhnp-cl/Data/Passports/6061677.html . Берем часть пути, начинающуюся с Data, добавляем к адресу сервера.
Пример результата:
http://client.zsperm.ru:2000/Data/Passports/6061677.htmlRegNumber
- text; номер законопроекта.sodokl
- text (содокладчик)
аналогично заседанию комиссии
аналогично заседанию комиссии МП
+ атрибуты в Question
AgendaStatus - text
AgendaType - text
файл agendayouth.xml
1 уровнень - тег Agenda, копия из agendalistyouth.xml. Name - вставляется в заголовок.
2 уровень
Поля - как у повесток ЗС +
StageStart - формат yyyy-MM-ddThh:mm:ss
, пример: 2014-02-15T16:09:56
StageFinish - то же, что StageStart
uid - text
Title - text
У тега есть значение в виде части пути /data/docs/12345.pdf?1234 (добавляется к http://client.zsperm.ru:2000/); где используется - пока не ясно
Name - автор коммента
В значении - текст
Pro - int
Contra - int
Abstained- int
DidntVote- int
Для получения указа используется сервис
http://client.zsperm.ru:2000/api/GovDecree?Id=
где {id} - идентификатор документа (атрибут docid в html)
Сервис возвращает путь до файла (добавляется к адресу сервиса)
Также в header’е ответа возвращается номер версии и другая информацию о документе.
Номер версии храним. Сравниваем версию скачанного документа с версией в header’e - если в header’e версия старше, то скачиваем документ снова. Т.е. аналогично с документами по повесткам.
Для получения постановления используется сервис
http://client.zsperm.ru:2000/api/Decree?Id=
где {id} - идентификатор документа (атрибут docid в html)
Сервис возвращает путь до файла (добавляется к адресу сервиса)
Также в header’е ответа возвращается номер версии и другая информацию о документе.
Номер версии храним. Сравниваем версию скачанного документа с версией в header’e - если в header’e версия старше, то скачиваем документ снова. Т.е. аналогично с документами по повесткам.
Для получения отчета используется сервис
http://client.zsperm.ru:2000/api/GetReport?Id=
где {id} - идентификатор документа (атрибут docid в html)
Сервис возвращает путь до файла (добавляется к адресу сервиса)
Также в header’е ответа возвращается номер версии и другая информацию о документе.
Номер версии храним. Сравниваем версию скачанного документа с версией в header’e - если в header’e версия старше, то скачиваем документ снова. Т.е. аналогично с документами по повесткам.
Для получения документа используется сервис
http://client.zsperm.ru:2000/api/GetIogvCalendar?Id=
где {id} - идентификатор документа (атрибут docid в html)
Сервис возвращает путь до файла (добавляется к адресу сервиса)
Также в header’е ответа возвращается номер версии и другая информацию о документе.
Номер версии храним. Сравниваем версию скачанного документа с версией в header’e - если в header’e версия старше, то скачиваем документ снова. Т.е. аналогично с документами по повесткам.
Тег Items
Поля
FIO - text
Id - number
Тег Item
Поля
Id - номер, по которому далее достается контент (напр. html)
Title - Заголовок. Обычно тут дата в формате dd.MM.yyyy
, иногда + какой то тест
Date -yyyy-MM-ddThh:mm:ss
FileType - hmtl/pdf (text)
Type - пусто или number
CategoryId - number, используется для категоризации новостей
Author - текст новости тут
Count - number
Каждый Item - это лента новостей
Лента выдается по ссылке
http://client.zsperm.ru:2000/Data/News/ID.html.zip
где ID - поле Id объекта Item
Корневой элемент - <AddressBook>
Внутри - иерархия элементов двух типов -
d - департамент
u - человек
Элемент d может содержать в себе другие d или u
Элемент u - конечный
Поля
dn - text, название департамента
io - bool, может отсутсвовать; назначение не ясно, везде true или ничего
Поля
некоторые поля могут быть пустыми!
ui - text, id-шник
ll - text, email
ur - int, номер кабинета
n - text, ФИО
ut - text, должность
up - text, телефон(ы), мб несколько через запятую
ua - text, адрес
uc - см. название в iPad версии; ~родительский департамент верхнего уровня; в UI наверно не будет
ma - text, снова email
im - bool, назначение неясно, везде true или ничего
/api/Document?Id="doc_id"
В ответе - путь до документа
Name:value
Version:intvalue
Path:path
Title:title
Получение документов для Повесток такое же как и для паспортов, если есть поле passport.
К повестке могут быть прикреплены документы. Они будут в лежать в agenda.xml
Тег AttachmentSource
Внутри AttachmentSource:
Тег YouthCommissionDecision
Внутри YouthCommissionDecision:
Для документов из повесток используется сервис
http://client.zsperm.ru:2000/api/Document?Id={id}
где {id} - идентификатор документа (атрибут docid в html)
Сервис возвращает путь до файла (добавляется к адресу сервиса)
Также в header’е ответа возвращается номер версии и другая информацию о документе, например, для документа с Id=284 возвращается:
Version=6
DocumentId=284
Path=/data/docs/284.pdf
UID=d846c58d-415b-45ec-9da4-67ceeb1ec309
Номер версии храним. Сравниваем версию скачанного документа с версией в header’e - если в header’e версия старше, то скачиваем документ снова
Внутри BinderSource
Свойства BinderSource:
Внутри BinderSource - часть пути к документу
В этой части пути к документу число это id документа
Пример: http://client.zsperm.ru:2000/Data/Personal/PermKrai/Passports/6238627/CustomDocList6238627.xml
Ссылка для получения списка аннотаций к паспорту имеет вид:
http://client.zsperm.ru:2000/Data/Personal/{login}/Passports/{passId}/CustomDocList{passId}.xml
Внутри xml:
Получение текста аннотации:
http://client.zsperm.ru:2000/Data/Personal/*username*/Passports/*passid*/*annotationid*.txt
POST запрос имеет вид:
http://client.zsperm.ru:2000/api/PersonalPassportDocument?passportId={passId}&blockId={blockId}&fileName={fileName}&docToUpdate={docId}
Файл должен лежать в теле запроса
Если нужно создать файл, то нужно отправить запрос без docToUpdate. Создастся новый файл с уникальным id
Запрос на удаление файла:
http://client.zsperm.ru:2000/api/PersonalPassportDocumentDelete?id={docId}
Похоже что индексация сквозная. Поэтому для удаления нужен только docId
Внутри BinderSource
Свойства BinderSource:
Внутри BinderSource - часть пути к документу
Заголовок вида: УАЗД № {number} от {date}
Внутри список ChangingLaw
Внутри ChangingLaw:
Внутри список ChangedLaw
Внутри ChangedLaw:
Типовая html без блока с заголовком
часть 2 (контент) - такая же, как в Повестках ЗС
См. Получение документов в Повестках ЗС
См. Получение документов в Повестках ЗС и Паспортах
Типовая html без блока с заголовком
часть 2 (контент) - такая же, как в Повестках ЗС
См. Получение документов в Повестках ЗС
аналогично остальным повесткам
см. в повестках комиссий МП
аналогично остальным повесткам
POST запрос на api/YouthVote?QuestionId=%d
QuestionId - ид вопроса
id вопроса - это BDId
В поле content - строка с результатом голосования “Pro”, “Contra” или “Abstained”
В ответ приходит:
“ok” - голос успешно отправлен
“vote type error” - установлено очное голосование
“already voted” - уже голосовали по данному вопросу
“user error” - пользователь не может принять участие в голосовании
“agenda status error” - “Повестка не в стадии голосования!”
POST на api/YouthComment?QuestionId=[id вопроса]
id вопроса - это BDId
В заголовке content - текст, аналогично голосованию
Ответы - “ok” - ок
“user error” - юзер не может комментить
“agenda status error” - повестка не в статусе обсуждения
“vote type error” - только очное обсуждение
“empty text” - если пустой текст
Получение комментов - из xml/html
Состоит из повторяющихся блоков table
Пример:
<table cellspacing="0px" cellpadding="0px" class="NewsLenta newsInternet" xmlns="">
<tr>
<td>
<div class="imgInternet"></div>
</td>
<td class="NewsTitle">Москва. Депутаты-коммунисты защищают жилищные права работников издательства «Прогресс»</td>
</tr>
<tr>
<td colspan="2" class="NewsSource">КПРФ.ру - Главные новости</td>
</tr>
<tr>
<td colspan="2" class="NewsBody">
<div class="newsBodyCollapse">
<img src="http://cs1.kprf.ru/images/newsstory_illustrations/rss/1c0ef3_dsc00714.jpg" />
<br />
<br />
<p>Вечером 26 марта депутат Мосгордумы фракции КПРФ Владимир Алексеевич Святошенко встретился с жителями дома 30, корпус 4 по улице Академика Анохина района Тропарево-Никулино. Суть проблемы в следующем. Издательство &laquo;Прогресс&raquo;, чьим правопреемником является ОАО &laquo;Издательская группа ...</p>
<a style="margin-top: 4px; display: block;" href="http://kprf.ru/dep/reg/129746.html" target="_blank">Читать дальше &rarr;</a>
</div>
<div class="detailNewsShort" title="Развернуть" onclick="showNewsAll(this, true)">
Развернуть
<img src="/" alt="" height="50px" width="15px" style="visibility:hidden" /></div>
<div class="detailNews" title="Свернуть" onclick="showNewsAll(this, false)">
Свернуть
<img src="/" alt="" height="50px" width="15px" style="visibility:hidden" /></div>
<a href="http://kprf.ru/dep/reg/129746.html">Подробнее
</a>
<img src="/" alt="" height="50px" width="1px" style="visibility:hidden" />
</td>
</tr>
</table>
Заголовок новости - текст внутри <td class="NewsTitle">
Источник новости - текст внутри <td colspan="2" class="NewsSource">
Краткий текст новости - текст внутри <div class="newsBodyCollapse">
Может отсутствовать
Может быть выделен тегами <p></p>
Может присуствовать ссылка на картинку<img src="http://cs1.kprf.ru/images/newsstory_illustrations/rss/1c0ef3_dsc00714.jpg" />
(показываем ли в аппе зависит от диза
Полный текст новости - это ссылка, достать можно 2-мя способами:
<a style="margin-top: 4px; display: block;" href="http://kprf.ru/dep/reg/129746.html" target="_blank">Читать дальше &rarr;</a>
- идет сразу после краткого текста<a href="http://kprf.ru/dep/reg/129746.html">
Подробнее
</a>