Remote control API

More
2 years 10 months ago #116515 by quarrier
quarrier created the topic: Remote control API
День добрый. Кто пробовал использовать сабж для автоматизации работы с системой? Есть проблема следующего рода: использую доступ с применением XML_RPC из powershell. Удалось заставить работать методы получения/закрытия сессии и получения списка опросов и списка пользователей. На попытку использовать add_survey система выдает "500 Внутренняя ошибку сервера". Примеров использования не нашел поэтому делал все методом тыка.
вот xml который пробую передавать
<?xml version=""1.0""?>
<methodCall>
   <methodName>add_survey</methodName>
   <params>
      <sSessionKey>
         <value>"+$session+"</value>
      </sSessionKey>
      <iSurveyID>
         <value/>"+$id+"</value>
      </iSurveyID>
      <sSurveyTitle>
         <value>"+$title+"</value>
      </sSurveyTitle>
	  <sSurveyLanguage>
	  	<value>"+$lang+"</value>
	  </sSurveyLanguage>
	  <sformat>
	  	<value>"+$fmt+"</value>
	  </sformat>
   </params>
</methodCall>
где
$session - идентификатор сессии полученный методом get_session_key
$id - целое 6-значное число
$title - строка наименование опроса
$lang - строка "ru" язык опроса
$fmt - строка "G" формат опроса - посмотрел в базе все опросы имеют тип G

Please Log in to join the conversation.

More
2 years 10 months ago #116566 by vipgroup
vipgroup replied the topic: Remote control API
Добрый день, никогда не работал с XML_RPC, может есть смысл спросить на англоязычном форуме об этом.

Андрей

Please Log in to join the conversation.

More
2 years 9 months ago - 2 years 9 months ago #117824 by asch01
asch01 replied the topic: Remote control API
Решение так и не нашел. Перешел на использование JSON-RPC. Пока все работает, но есть несколько нюансов:

1. Если используешь powershell не получилось использовать стандартную функция ConvertTo-Json - не знаю на каком этапе (то ли при формировании хештаблицы, то ли при самой конвертации) происходит сортировка параметров по имени - следовательно например при создании сессии password вылезает вперед username, а такие выкрутасы сервер не обрабатывает. Приходится простым формированием строки все делать ...
2. В powershell и в java при наличии в запросе локализованной строки надо провести некоторые манипуляции иначе будут вопросительные знаки. Пример:
PS
function survey_add_survey{
param(
[string]$url,
[string]$session,
[long]$id,
[string]$title,
[string]$lang="ru",
[string]$fmt="G"
)
 
$data = "{"
$data += """method"": ""add_survey"","
$data += """params"": {""sSessionKey"": """+$session+""","
$data += """iSurveyID"": "+$id+","
$data += """sSurveyTitle"": """+$title+""","
$data += """sSurveyLanguage"": """+$lang+""","
$data += """sformat"": """+$fmt+"""},"
$data += """id"": 1}"
	Write-Host $data
	$data_bytes = [System.Text.Encoding]::UTF8.GetBytes($data)
	$res = (Invoke-RestMethod -Method Post -Uri $url -Body $data_bytes -Header @{"Content-type"="application/json"} )
	$group_id = $res.result
	if($group_id -ne $null){
		return $group_id
	}
	else{
		$Host.get_UI().WriteErrorLine("Не удалось создать опрос!")
		return $null
	}
}
Если не сконвертировать в массив байтов
$data_bytes = [System.Text.Encoding]::UTF8.GetBytes($data)
будут "?????"
Java
post.setEntity(new StringEntity(
"{\"method\": \"add_survey\", \"params\": {\"sSessionKey \": "
  + sessionKey
  + ", \"iSurveyID \": \"100050\""
  + ", \"sSurveyTitle\": \"Проверка\""
  + ", \"sSurveyLanguage\": \"ru\""
  + ", \"sformat\": \"G\"}, \"id\": 1}", StandardCharsets.UTF_8));
здесь надо указать что посылаем UTF-8
StandardCharsets.UTF_8
остальное стандартно как в примере.
PS: не подскажете как разблокировать логин форума? (не смог зайти под quarrier восстановление пароля не помогает)
Last Edit: 2 years 9 months ago by asch01.

Please Log in to join the conversation.

Moderators: vipgroup

Start now!

Just create your account and start using Limesurvey today.

Register now
Join our Newsletter!